ホームページ  >  記事  >  バックエンド開発  >  WeChat 支払い通知の処理方法の簡単な分析_PHP チュートリアル

WeChat 支払い通知の処理方法の簡単な分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:29:33842ブラウズ

通知メカニズムの実装には公式ドキュメントのみがあり、これまでに実行したことがない人にとっては、テストに多くの時間がかかります。

ドキュメントによると、WeChat によって毎回通知されるデータの構造は比較的複雑で、POST データを取得するだけでなく、他のデータも取得する必要があります。

これには、まず php://input と $_POST の値に関する質問が含まれます。以下にいくつかの簡単なポイントがあります:

1. Content-Type 値が application/x-www-form-urlencoded の場合、PHP は http リクエスト本文の対応するデータを配列 $_POST に埋め込み、$_POST 配列に埋め込まれるデータは urldecode( ) 分析結果。 (実際には、Content-Type に加えて、データがフォームデータであることを示す multipart/form-data もあります。これについては後ほど紹介します)
2, php://input データ、Content-タイプが multipart/form-data ではありません (条件付き制限は後で導入されます)。 php://input データは、データの http エンティティ本体部分と一致します。この部分的に一貫したデータの長さは、Content-Length によって指定されます。
3. Content-Type が application/x-www-form-urlencoded で、送信メソッドが POST メソッドである場合にのみ、$_POST データと php://input データが「一致」します (引用符で囲まれていることを示します)。形式は一貫していませんが、コンテンツは一貫しています)。そうでなければ、それらは矛盾します。
4、php://input は $_GET データを読み取ることができません。これは、$_GET データが http リクエストの本文部分ではなく、http リクエスト ヘッダーの PATH フィールドに query_path として書き込まれているためです。

これは、xml_rpc サーバーが file_get_contents(‘php://input’, ‘r’) を通じてデータを読み取る理由を理解するのにも役立ちます。 $_POST から読み取るのではなく、xml_rpc のデータ仕様が xml であり、その Content-Type が text/xml であるためです。
5. php://input は multipart/form-data と遭遇します。その説明については RFC1867 を確認してください。 multipart/form-data も POST メソッドを使用してフォーム データを送信することを意味し、ファイルのアップロードを伴うため、application/x-www-form-urlencoded データ形式とは異なります。より合理的かつ効率的なデータ形式でサーバーに渡されます。 Content-Type が multipart/form-data の場合、HTTP リクエストボディにデータがあっても、php://input は空になります。このとき、PHP は php://input ストリームにデータを入力しません。 。したがって、php://input を使用して enctype=multipart/form-data データを読み取ることはできないことは確かです。

6. Content-Type が application/x-www-form-urlencoded の場合、php://input と $_POST のデータは「一貫性」があります。それ以外の Content-Type の場合、php://input と$_POST データに一貫性がありません。 Content-Type が application/x-www-form-urlencoded または multipart/form-data の場合にのみ、PHP は http リクエスト パケット内の本文データの対応する部分を PHP グローバル変数に埋め込みます。他のすべての状況を無視します。データ型が multipart/form-data の場合 php://input が空であることを除き、他の状況では空にならない可能性があります

上で引用した非常に多くの言葉の意味は、WeChat から送信されたデータを読み取るにはこれら 2 つの方法を使用する必要があるということです。

まず $POST を取得してください。これは、次の形式の通常の支払い通知メッセージです。 リーリー

次に、file_get_contents('php://input') を使用して、次の形式で追加情報を読み取ります:

リーリー

最後に、対応するビジネス ロジック処理を実行します。詳細については説明しません。

http://www.bkjia.com/PHPjc/775945.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/775945.html技術記事通知メカニズムの実装には公式ドキュメントのみがあり、デモ コードはありません。これまでに実行したことがない人にとっては、テストに時間がかかります。 文書の内容から判断すると、毎回 WeChat から送信される通知の数は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。