Masalah telah mengganggu saya untuk masa yang lama, saya rasa kod saya agak betul, tetapi ia tidak dapat membalas secara automatik. Bolehkah seseorang membantu saya, terima kasih banyak
Kodnya adalah seperti berikut /p>
<?php
//tentukan token anda
define("TOKEN", "weixin");
$wechatObj = wechatCallbackapiTest baharu();
if (isset($_GET['echoster'])) {
$wechatObj->valid();
}lain{
$wechatObj->responseMsg();
}
kelas wechatCallbackapiTest
{
fungsi awam valid()
{
$echoStr = $_GET["echoster"];
//tandatangan sah, pilihan
if($this->checkSignature()){
echo $echoStr;
keluar;
}
}
respons fungsi awamMsg()
{
//dapatkan data siaran, Mungkin disebabkan oleh persekitaran yang berbeza
//$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postStr = file_get_contents("php://input");
//ekstrak data siaran
if (!empty($postStr)){
/* libxml_disable_entity_loader adalah untuk menghalang Suntikan Entiti Eksternal XML,
cara terbaik ialah menyemak sendiri kesahihan xml */
//libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$kata kunci = trim($postObj->Kandungan);
$masa = masa();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Kandungan><![CDATA[%s]]></Kandungan>
<FuncFlag>0</FuncFlag>
</xml>";
jika(!kosong( $kata kunci ))
{
$msgType = "teks";
$contentStr = "Selamat datang ke dunia wechat!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}lain{
echo "Masukkan sesuatu...";
}
}lain {
gema "";
keluar;
}
}
fungsi peribadi checkSignature()
{
// anda mesti menentukan TOKEN sendiri
jika (!defined("TOKEN")) {
throw new Exception('TOKEN tidak ditakrifkan!');
}
$tandatangan = $_GET["tandatangan"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
// gunakan peraturan SORT_STRING
sort($tmpArr, SORT_STRING);
$tmpStr = meletup( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $tandatangan ){
kembali benar;
}lain{
kembali palsu;
}
}
}
?>
Cuba gunakan simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA) untuk menghuraikan $postStr
Selain itu, cuba tambahkan balasan ikut ini di hadapan $keyword