PHP微信決済通知の処理方式


お知らせの仕組みの実現には、公式文書だけがデモコードを持っていません。やったことのない人には、テストに時間がかかります。
ドキュメント上で言っているように、WeChatが通知するたびに、データの構造が複雑で、POSTデータを取り出す以外に、他のデータを取るべきです。
ここでまず一つの関連点に触れます。php://inputと$POSTの値を取る問題は、簡単に次のように並べられます。

    1,Content- Type application/x-www-form-urlencoded ,php http body $_POST, $_POST urldecode() 。( , Content-Type, multipart/form-data , )
    2,php://input , Content-Type multipart/form-data( )。 php://input http entity body 。 Content-Length 。
    3, Content-Type application/x-www-form-urlencoded POST ,$_POST php://input ” ”( , , ) 。 , 。
    4,php://input $_GET 。 $_GET query_path http (header) PATH , http body 。

    , 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 body ,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 body $_POST , PHP 。 php://input multipart/form-data ,

以上のように多くの文字を意味するようになりました。つまり、この2つの方法でWeChatが送ってきたデータを読み取らなければなりません。
これは一般的な支払通知情報です。

array (
  'bank_type' => '3006',
  'discount' => '0',
  'fee_type' => '1',
  'input_charset' => 'UTF-8',
  'notify_id' => 'YaNO6cznoNZK0aGb8nJWGgVUWssjt7Ze7gWRaRS0R_5w9oXgGNkRGxReEk0r45yk3I9a2_gzo9IqgqMYbap6bxC2T3p0o-2C',
  'out_trade_no' => '1214284731',
  'partner' => '12xxxxxxxx',
  'product_fee' => '3400',
  'sign' => '545FA0E8B594BBXXXX48XX142F084TY',
  'sign_type' => 'MD5',
  'time_end' => '20130223110224',
  'total_fee' => '3400',
  'trade_mode' => '1',
  'trade_state' => '0',
  'transaction_id' => '12XXX449012014XXX33174005XXX',
  'transport_fee' => '0',
)
またfile_を使いますゲットするcontenstsphp://input')追加の情報を読み込むと、次のような形になります。

<xml><OpenId><![CDATA[o0pd3jqHaN7b0tVPDFJPzJEkSCLw]]></OpenId>
<AppId><![CDATA[wxXXX06XX2cXXX88XX]]></AppId>
<IsSubscribe>1</IsSubscribe>
<TimeStamp>1400814743</TimeStamp>
<NonceStr><![CDATA[lqxwMsiY9EXRDpms]]></NonceStr>
<AppSignature><![CDATA[c2dxxxe186116b32b06axxxc1a688b671eexxx5e]]></AppSignature>
<SignMethod><![CDATA[sha1]]></SignMethod>
</xml>
最後に、相応の業務の論理処理をして、詳しく述べませんでした。