多くの人が私と同じようになると思います。トークン検証後、サブスクリプションにメッセージが送信されます。アカウントを削除してもメッセージは返されません。
以下は、ハードなデバッグの後に得られた解決策です:
まず、トークンの検証:
私が書いたトークンは常に検証に失敗しました。長い間探しましたが、バグは見つかりませんでした。仕方がないので公式のサンプルコードを使用しました。そして、サンプルコードのデバッグを通じて、血を吐くようなバグを発見しました(バグではありません):
トークンの検証には文字エンコード形式が必要なようです! ! ! !
公式サンプルコードはサーバーに直接アップロードされ、トークンは直接渡されます!
公式サンプルコードをUTF-8形式に変更してオーバーレイをアップロードしましたが、トークンが失敗しました。失敗!失敗!
その後、作成した内容を ANSI 形式に変更しましたが、トークンは依然として失敗しました。酔った、酔った!その場合は、公式のサンプルコードを使用する必要があります。ここで、トークンは 1 回限りのハンドシェイク検証であり、一度検証した後は不要になるとします。
さて、本題に戻りますが、話が逸れたようです...orz
トークン検証後、公式サンプルコードを直接使ってサブスクリプションアカウントを簡単にテストした結果…送信されたメッセージは水が注がれたようなもので、何も返されませんでした…orz
。
私はさまざまな方法でバグを検索し、さまざまなグループに質問し、さまざまな方法で検索しました...このブロガーの努力の後、ついに問題を発見しました(これは私が自分で開発したものを指しており、すべてが含まれているわけではありません、別のバグがある場合は、ご連絡ください):
1. 最も見落とされやすいバグは、公式のサンプル コードが記述された responseMsg() 関数をまったく呼び出していないことです。
2. 前のトークン コード ($wechatObj->valid(); の行) をコメント化します。トークン検証コードには echo $echostr が含まれるため、responseMsg() 関数の echo $resultStr; (行 56) は紛らわしい XML 形式になり、それがサーバーに入力されたときに認識されません。 WeChatサーバー(xml形式しか認識できないようですが、json形式も可)。 (トークン検証はハンドシェイク検証です。開発者を検証した後は必要なくなります。きれいなコードからは消えてくださいorz...)
3. 最も厄介なバグは文字エンコーディングの問題です。 orz...xml では UTF-8 エンコードが必要なので、サンプル コードを UTF-8 エンコードに戻します。このバグは私を崩壊させます! ! !
以下は私が修正したコードです。正常に実行でき、バグはありません。必要に応じて参照してください。 リーリー 上記は、PHP WeChat サブスクリプション アカウントの開発のために編集者が共有したソリューションです。トークン検証後、メッセージはサブスクリプション アカウントに自動的に送信されますが、メッセージは返されません。
興味がありそうな記事: PHPトークン(トークン)の設計
http://www.bkjia.com/PHPjc/1084581.html
。