PHP公式アカウントのトークン検証が失敗した場合の対処方法

PHPz
リリース: 2023-04-19 10:36:55
オリジナル
5015 人が閲覧しました

PHP パブリック アカウントのトークン検証エラーの解決策

WeChat パブリック アカウントの開発プロセスでは、トークン検証エラーが頻繁に発生します。通常、この状況は、トークンの構成が間違っているか、WeChat サーバーがトークンにアクセスできないことが原因です。サーバ。この記事では、いくつかの一般的なトークン検証の失敗とその解決策を紹介します。

  1. トークン構成エラー

トークンを設定するときは、コードにトークンを書き込み、WeChat パブリック プラットフォーム上で構成する必要があります。入力したトークンがコード内のトークンと一致しない場合、トークンの検証は失敗します。

トークン構成エラーの解決策:

まず、パブリック プラットフォームで入力したトークンがコード内のトークンと同じかどうかを確認する必要があります。異なる場合は、同じトークンに変更する必要があります。

2 番目に、コード内のトークンが正しく設定されているかどうかを確認する必要があります。以下に示すように、コード内のトークンを出力することで確認できます。

define("TOKEN", "XXXXXXXXXXXXXX");

echo TOKEN;
ログイン後にコピー

出力された結果は、パブリック プラットフォームで設定されたトークンと同じであるはずです。異なる場合は、コード内のトークンを変更する必要があります。

  1. サーバー構成エラー

トークン検証を実行すると、WeChat サーバーはサーバーへの HTTP GET リクエストを開始します。リクエストには、WeChat パブリック上にある情報が含まれていますトークン、タイムスタンプ、ノンスの 3 つのパラメータを入力します。私たちのサーバーは、これら 3 つのパラメータに基づいて暗号化処理を実行し、WeChat サーバーに返す必要があります。

WeChat サーバーからサーバーにアクセスできない場合、またはサーバーの応答が正しくない場合、トークンの検証は失敗します。

サーバー構成エラーの解決策:

まず、サーバーがポート 80 を開いていて、ファイアウォールが WeChat サーバーへのアクセスをブロックしていないかどうかを確認する必要があります。

2 番目に、サーバー側のコードが正しく設定されているかどうかを確認する必要があります。以下に示すように、コード内のサーバーから返されたデータを出力して確認できます。

$echostr = $_GET["echostr"];

echo $echostr;
ログイン後にコピー

サーバーがデータを正しく返さない場合は、コードにエラーやロジックの問題があるかどうかを確認する必要があります。コード。

  1. セーフ モードでのトークン検証エラー

公式アカウントの設定でセーフ モードがオンになっている場合、トークンに対して特別な処理を実行する必要があります。セーフ モードでは、WeChat サーバーはサーバーへの HTTP POST リクエストを開始します。リクエストには、WeChat パブリック プラットフォームで入力した 4 つのパラメーター (Token、timestamp、nonce、msg_signature) が含まれます。

セーフ モードでのトークン検証エラーの解決策:

まず、サーバーが HTTP POST リクエストを正常に処理できることを確認する必要があります。次に、トークンに対して特別な処理を実行する必要があります。コード例は次のとおりです:

$token = "XXXXXXXXXXXXXX"; // Token和公众平台上设置一致
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$msg_signature = $_GET["msg_signature"];
$encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == "aes")) ? "aes" : "raw"; // 兼容明文模式与安全模式

if ($msg_signature) {
    $signature = $_GET["signature"];

    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = $encrypt_type == 'aes' ? $tmpStr . $_GET["encrypted"] : $tmpStr;
    $signatureLocal = sha1($tmpStr);

    if ($signature == $signatureLocal) {
        if ($encrypt_type == 'aes') {
            // 对密文进行解密
        }

        $echostr = $_GET["echostr"];

        echo $echostr;
    }
}
ログイン後にコピー
  1. トークン タイムアウト

トークンには有効期限があります。公式アカウントの場合トークンの有効期限を超えると、トークンが無効になり、トークンの検証が失敗します。

トークン タイムアウトの解決策:

コード内でトークンの有効期限を設定できます。たとえば、7200 秒 (2 時間) に設定します。コード例は次のとおりです:

define("TOKEN", "XXXXXXXXXXXXXX");
define("EXPIRE_TIME", 7200);

$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$signature = $_GET['signature'];

if (time() - $timestamp > EXPIRE_TIME) {
    die('Token expired');
}

$tmpArr = array(TOKEN, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);

if ($tmpStr == $signature) {
    $echostr = $_GET['echostr'];
    echo $echostr;
}
ログイン後にコピー

以上、PHP公式アカウントのトークン検証に失敗した場合の対処法をまとめてみましたので、皆様のお役に立てれば幸いです。

以上がPHP公式アカウントのトークン検証が失敗した場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート