ホームページ >PHPフレームワーク >ThinkPHP >避雷! thinkphp 統合エンタープライズアカウントの落とし穴

避雷! thinkphp 統合エンタープライズアカウントの落とし穴

藏色散人
藏色散人転載
2020-07-28 14:03:011912ブラウズ

thinkphp フレームワーク の次のチュートリアル コラムでは、エンタープライズ アカウントを統合する thinkphp の落とし穴について説明します。困っている友人の役に立てば幸いです。

避雷! thinkphp 統合エンタープライズアカウントの落とし穴WeChat エンタープライズ アカウント コールバックの使用における ThinkPHP の落とし穴

私は最近、エンタープライズ アカウント コールバックのインターフェイスに取り組んでいます。以前にいくつかのエンタープライズ アカウント アプリケーションを作成しました。初めて Thinkphp に接続したとき、さまざまなエラーが報告され、避けるべき落とし穴に対処しなければならなかったので不運でした。

今回は罠に落ちてほぼ諦めました。Enterprise アカウントを開発したことのある人なら誰でも、Enterprise アカウントのコールバックは暗号化されたアルゴリズムを通過し、開発者はコールバックを有効にするには暗号化を解除する必要があることを知っています。 . このコールバックです WeChatのエラーメッセージは非常に高圧的で、何を間違えても「echostrの検証に失敗しました。正しく復号化され平文のechostrが出力されているか確認してください。」とだけ表示されます。開発者には、少なくとも WeChat が受信した応答の長さを知らせる必要があります。そうでない場合は、内容はもちろん、長さが矛盾している場合は、独自の出力で検証することができます。

私と同じように TP フレームワークを使用している場合は、注意する必要があります。この記事では、Thinkphp3.2.3 php バージョン 5.3 を例として取り上げます

pit 1

    公式の処理インターフェイスのサンプルをダウンロードし、Thinkphp>ライブラリ>Wechat (自作) ディレクトリに配置します
  • WXBizMsgCrypt.php を WXBizMsgCrypt.class.php
  • に変更します。

  • WXBizMsgCrypt で名前空間 Wechat を宣言します;
  • 必要なコントローラーで Wechat WXBizMsgCrypt を使用するクラスを導入します;
  • その後は、公式サンプル コピーを使用してプロジェクトを入力し、それを修正するだけで統合が完了します。プロセスは非常に簡単ですが、! PHP5.3以前とPHP5.3以降でコンストラクタの記述方法が変更になり、クラス名を関数名としてコンストラクタ名を付けることができなくなりました コンストラクタの宣言には__constructを使用する必要があり、公式サンプルを使用して統合することになりますもちろん、PHP5.3 以降のバージョンを使用している場合は、必ずエラーが報告されます。

したがって、

    WXBizMsgCrypt ファイル内の WXBizMsgCrypt 関数名を __construct
  • pkcs7Encoder に変更する必要があります。 pkcs7Encoder ファイル 関数名を __construct
  • に変更します。これで完了です。Thinkphp の以前のバージョンまたは php5.3 以下には適用されない可能性があります。他のバージョンはテストしていません。

ピット 2

#企業番号のコールバック情報を入力して [保存] をクリックできない場合、さらに数回クリックすると、驚くほどうまくいきます。

これは冗談ではありません~~ エンタープライズ アカウントから開発者に送信されるランダムな署名には、その番号が含まれている可能性が高いためです。URL を取得すると、PHP は自動的に番号をスペースでフィルタリングし、送信された署名と実際の署名が得られます。署名が矛盾している場合、署名検証は合格せず、「40001: 署名検証エラー」が報告されます。

もちろん、送信された署名アドレスとの一貫性を確保するために、スペースを数字に復元することもできます。 (これは WeChat コールバックの小さなバグだと思います。署名にはそのような特殊な記号を含めるべきではありません) 成功したのか失敗したのか、何でしょうか?ローカルで印刷して見てください。間違っていません。百度中を検索しました。ファイルの BOM ヘッダーを削除し、ヘッダーを変更するためにすべてを試しました。実際に復号化して、復号化された結果を返しました。WeChat を試してみましたが、まだ機能しません、なんてことでしょう。 。

本当にクリアテキストが返されるのでしょうか?ローカルへの印刷は正しいと思いますか?間違っている。バッファと呼ばれるものがあります

バッファ内の内容はローカルには表示されません。WeChat が Web サイトにアクセスすると、最初に取得するのは、出力した平文ではなくバッファの内容です。そのため、echoの前にob_clean()を使用してバッファをクリアする必要がありますが、他のフレームワークも同様と考えられます。

これらの 3 つは比較的大きな落とし穴であり、インターネット上に情報が非常に少ないため、皆様のお役に立てれば幸いです。

以上が避雷! thinkphp 統合エンタープライズアカウントの落とし穴の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。