ホームページ >バックエンド開発 >PHPチュートリアル >クイックヒント:PayPal IPNのソリューションは常に「無効」を返します
PayPalのIPNシミュレーターで開発する場合、設定しているエンコードやすべての条件に関係なく、メッセージを検証するときに「無効」を返し続ける状況に遭遇する可能性があります。
PayPal Developersチームはすべての問い合わせを無視することで有名であり、ドキュメントは読みにくいことが有名です。したがって、これらの問題をデバッグすることは非常に難しく、請求可能な時間に時間がかかる可能性があります。 IPNシミュレーターをテストするためのライブサーバーをセットアップすることさえありました。恐怖ngrokはローカルでテストするときに誤りがあり、HTTPSを実行するためにエンドポイントに証明書を追加しました。最終的に、解決策は - 通常そうであるように、単純だがあいまいだった。症状(故障)は、タイムゾーン識別子が含まれている場合、日付フィールドによって引き起こされます。ただし、これはすべて、PHPに2つの異なるURLエンコード /デコード機能のRAWと非ローがあるという事実によって引き起こされます。
これが例です。
このようになるIPNシミュレーターに日付があると言います:
これは、リスナーの終わり(PHPコードで)に到着します。
Fri Aug 19 2016 09:25:00 GMT+0100 (GMT Daylight Time)
PHP関数のurldecodeが空間として解釈されるため、次のようにデコードされるため、サブストリングGMT 0100には問題があります。
Fri%20Aug%2019%202016%2009%3A25%3A00%20GMT+0100%20%28GMT%20Daylight%20Time%29失われたことに気づき、スペース文字に変わりました。
これが検証のためにPayPalに返送するために再エンコードされると、フィールドで同じ値ではなくなったため、検証は失敗します - 欠落しています。それは非常に小さなディテールであり、フィールドの値を手で検査するときに見つけるのは非常に難しいですが、そこにあります。これは、PayPalドキュメントに従って、検証を「無効」に戻すのに十分です。 この問題には2つの解決策があります
Fri Aug 19 2016 09:25:00 GMT 0100 (GMT Daylight Time)
非RAWの対応物の代わりにRawurlencodeとRawurldecodeを使用します。これらは、シンボルをスペースキャラクターに変える代わりにエンコードし、すべてが機能します。
これが組み込まれているPayPal IPNリスナークライアントを使用します。最近、これにパッチを提出しました。この小さなヒントが、誰かをイライラするグーグルから救ったことを願っています!
PayPal IPN
に関するよくある質問(FAQ)IPNメッセージのデータ形式とエンコードをチェックすることから始めます。 PayPalが提供する仕様と一致するようにしてください。また、PayPalアカウントでトランザクションの詳細をクロスバイリングします。問題が続く場合は、PayPalが提供するIPNシミュレーターツールの使用をテスト目的で使用することを検討してください。
IPNシミュレーターを使用してリスナーをテストするにはどうすればよいですか? PayPal Developerアカウントに参加して、IPNシミュレーターページに移動します。リスナーURLを入力し、テストするIPNメッセージタイプを選択します。 「IPNを送信」をクリックして、リスナーに偽のIPNメッセージを送信します。
以上がクイックヒント:PayPal IPNのソリューションは常に「無効」を返しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。