ホームページ >バックエンド開発 >PHPチュートリアル >WeChat開発のトークン検証失敗の解決策

WeChat開発のトークン検証失敗の解決策

韦小宝
韦小宝オリジナル
2018-03-14 13:21:095815ブラウズ

この記事では、WeChat 開発中のトークン検証エラーの解決策について説明します。WeChat 開発に興味がある場合、またはトークン検証エラーが発生したものの解決できない場合は、この記事を読むことができます。早速、本題に入りましょう!

WeChatミニプログラム設定トークン検証エラーは通常、メッセージをプッシュするときに発生しますこのエラーは、インターフェースページがまだWeChatインターフェースに正しい情報をフィードバックしていないために発生しますネチズンはいくつかの回避策も提供しています。さまざまな機能がありますが、正常に構成できるものもあれば、そうでないものもあります。以下は、ネットユーザーが提供する 2 種類の phpインターフェース検証コードで、簡単に設定できるものです。

コード例 1 (私の検証は成功する可能性があります):

<?php  
//1. 将timestamp , nonce , token 按照字典排序  
$timestamp = $_GET[&#39;timestamp&#39;];  
$nonce = $_GET[&#39;nonce&#39;];  
$token = "你自定义的Token值";  
$signature = $_GET[&#39;signature&#39;];  
$array = array($timestamp,$nonce,$token);  
sort($array);  
  
//2.将排序后的三个参数拼接后用sha1加密  
$tmpstr = implode(&#39;&#39;,$array);  
$tmpstr = sha1($tmpstr);  
  
//3. 将加密后的字符串与 signature 进行对比, 判断该请求是否来自微信  
if($tmpstr == $signature)  
{  
    echo $_GET[&#39;echostr&#39;];  
    exit;  
}

コード例 2:

<?php  
/** 
  * wechat php test 
  */  
  
//define your token  
define("TOKEN", "自定义token");  
$wechatObj = new wechatCallbackapiTest();  
$wechatObj->valid();  
  
class wechatCallbackapiTest  
{  
    public function valid()  
    {  
        $echoStr = $_GET["echostr"];  
  
        //valid signature , option  
        if($this->checkSignature()){  
            echo $echoStr;  
            exit;  
        }  
    }  
  
    public function responseMsg()  
    {  
        //get post data, May be due to the different environments  
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  
        //extract post data  
        if (!empty($postStr)){  
                  
                $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);  
                $fromUsername = $postObj->FromUserName;  
                $toUsername = $postObj->ToUserName;  
                $keyword = trim($postObj->Content);  
                $time = time();  
                $textTpl = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            <FuncFlag>0</FuncFlag>  
                            </xml>";               
                if(!empty( $keyword ))  
                {  
                    $msgType = "text";  
                    $contentStr = "Welcome to wechat world!";  
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
                    echo $resultStr;  
                }else{  
                    echo "Input something...";  
                }  
  
        }else {  
            echo "";  
            exit;  
        }  
    }  
          
    private function checkSignature()  
    {  
        $signature = $_GET["signature"];  
        $timestamp = $_GET["timestamp"];  
        $nonce = $_GET["nonce"];      
                  
        $token = TOKEN;  
        $tmpArr = array($token, $timestamp, $nonce);  
        sort($tmpArr);  
        $tmpStr = implode( $tmpArr );  
        $tmpStr = sha1( $tmpStr );  
          
        if( $tmpStr == $signature ){  
            return true;  
        }else{  
            return false;  
        }  
    }  
}  
  
?>

上記 2 つのコード例のいずれかを選択してサーバーに直接アップロードし、メッセージ構成 php に URL (サーバーアドレス) を書き込みます。ファイルサーバーアドレス)、対応するカスタムトークン(トークン)を入力します。メッセージ暗号化キーはランダムに生成できます。暗号化方法の互換モードを入力しました。データ形式は個人の好みに応じます(JSONを入力しました) )。あとは「送信」をクリックするだけです。次の画像が表示された場合は、検証が成功したことを意味します:



トークン検証エラーが発生した場合は、確認してください。トークンの問題をより迅速に解決できるようにします。

関連する推奨事項:

アプリインターフェーストークンの詳細な説明

WeChatアプレットのURLとトークンの設定方法

以上がWeChat開発のトークン検証失敗の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。