ホームページ >バックエンド開発 >PHPチュートリアル >クイックヒント:PayPal IPNのソリューションは常に「無効」を返します

クイックヒント:PayPal IPNのソリューションは常に「無効」を返します

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-14 08:26:121014ブラウズ

クイックヒント: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メッセージステータスが「無効」であることの重要性は何ですか?
  1. IPNメッセージの「無効」ステータスは、メッセージがPayPalから発信されなかったことを示しています。これは、誤ったデータ形式、誤ったエンコード、トランザクションの詳細の不一致など、多くの理由が原因である可能性があります。不正なトランザクションを防ぐために、IPNメッセージの信頼性を検証することが重要です。

    「無効」IPNメッセージをトラブルシューティングするにはどうすればよいですか?

    IPNメッセージのデータ形式とエンコードをチェックすることから始めます。 PayPalが提供する仕様と一致するようにしてください。また、PayPalアカウントでトランザクションの詳細をクロスバイリングします。問題が続く場合は、PayPalが提供するIPNシミュレーターツールの使用をテスト目的で使用することを検討してください。

    IPNの問題の解決におけるIPNシミュレーターの役割は何ですか?テスト目的で偽のIPNメッセージをリスナーURLに送信できるPayPalによる。リスナーとの問題を特定し、ライブになる前に是正するのに役立ちます。

    IPNシミュレーターを使用してリスナーをテストするにはどうすればよいですか? PayPal Developerアカウントに参加して、IPNシミュレーターページに移動します。リスナーURLを入力し、テストするIPNメッセージタイプを選択します。 「IPNを送信」をクリックして、リスナーに偽のIPNメッセージを送信します。

    リスナーがIPNメッセージを受信して​​いない場合はどうすればよいですか?リスナーのURLにエラーがないか確認してください。また、サーバーがPayPalからの着信接続をブロックしていないことを確認してください。問題が続く場合は、PayPalのテクニカルサポートからヘルプを求めることを検討してください。

    IPNトランザクションのセキュリティを確保するにはどうすればよいですか? IPNメッセージ。また、リスナーのURLに安全な接続(HTTPS)を使用し、PayPalアカウント資格情報を秘密にしてください。 「cmd = _notify-validate」コマンドは、IPNメッセージを検証するために使用されます。このコマンドでIPNメッセージをPayPalに送り返すと、PayPalは、メッセージが本物である場合は「確認」または「無効」である場合は「確認」されています。 ?

    PayPalは、支払いの更新または再取得の場合、同じトランザクションに対して複数のIPNメッセージを送信する場合があります。これらの重複メッセージを処理し、トランザクションの二重処理を防ぐためにリスナーを設計する必要があります。

    IPNメッセージを検証した後でも「無効」応答を受け取った場合はどうすればよいですか? IPNメッセージを検証した後でも「無効」応答を受け取った場合、トランザクションデータの矛盾を示します。 PayPalアカウントでトランザクションの詳細を相互に検証し、IPNメッセージのエラーを確認します。 JS、「PayPal-IPN」モジュールを使用できます。このモジュールは、IPNメッセージを検証および解析する方法を提供します。 npmを使用してインストールし、node.jsアプリケーションで必要とすることができます。

以上がクイックヒント:PayPal IPNのソリューションは常に「無効」を返しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。