php - Tiada jawapan apabila menghantar mesej ke akaun rasmi WeChat
PHP中文网
PHP中文网 2017-05-16 13:05:00
0
1
365

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;
        }
    }
}

?>
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
小葫芦

Cuba gunakan simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA) untuk menghuraikan $postStr
Selain itu, cuba tambahkan balasan ikut ini di hadapan $keyword

if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event
 if($postObj->Event == 'subscribe'){ //如果是订阅事件
  $contentStr = "欢迎订阅~~~";
  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
  echo $resultStr;
  exit();
 }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan