検索

ホームページ  >  に質問  >  本文

php - WeChat公式アカウントにメッセージを送信しても応答がありません

長い間問題が発生していて、私のコードはかなり正しいと思いますが、自動的に応答できません。誰か助けてください。ありがとうございます。
コードは次のとおりです。 /p>

<?php

// トークンを定義します
定義("トークン", "微信");
$wechatObj = 新しい wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
    $wechatObj->valid();
}それ以外{
    $wechatObj->responseMsg();
}


クラス wechatCallbackapiTest
{
    パブリック関数 valid()
    {
        $echoStr = $_GET["echostr"];

        //有効な署名、オプション
        if($this->checkSignature()){
             エコー $echoStr;
            出口;
        }
    }

    パブリック関数responseMsg()
    {
    //投稿データを取得します。環境が異なるためかもしれません
    //$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    $postStr = file_get_contents("php://input");
    
          //投稿データを抽出する
        if (!empty($postStr)){
                /* libxml_disable_entity_loader は XML 外部エンティティの挿入を防ぐためのものです。
                   最善の方法は、xml の有効性を自分でチェックすることです */
                //libxml_disable_entity_loader(true);
                  $postObj = simplexml_load_string($postStr);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = トリム($postObj->コンテンツ);
                $time = 時間();
                $textTpl = ";
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <コンテンツ><![CDATA[%s]]></コンテンツ>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
                if(!empty( $keyword ))
                {
                      $msgType = "テキスト";
                    $contentStr = "wechat の世界へようこそ!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    エコー $resultStr;
                }それ以外{
                    echo "何かを入力してください...";
                }

        }それ以外 {
            エコー「」;
            出口;
        }
    }
        
    プライベート関数 checkSignature()
    {
        // TOKEN を自分で定義する必要があります
        if (!define("トークン")) {
            throw new Exception('TOKEN が定義されていません!');
        }
        
        $signature = $_GET["署名"];
        $タイムスタンプ = $_GET["タイムスタンプ"];
        $nonce = $_GET["nonce"];
                
        $トークン = トークン;
        $tmpArr = 配列($token, $timestamp, $nonce);
        // SORT_STRING ルールを使用する
        ソート($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            true を返します。
        }それ以外{
            false を返します。
        }
    }
}

?>
PHP中文网PHP中文网2788日前371

全員に返信(1)返信します

  • 高洛峰

    高洛峰2017-05-16 13:07:00

    simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA) を使用して $postStr を解析してみてください
    また、このフォロー返信を $keyword の前に追加してみてください

    リーリー

    返事
    0
  • キャンセル返事