web-dev-qa-db-ja.com

Paypal notify_urlおよびreturn_url。 PHPを使用してIPNなしで変数を受け取る

Paypalへの簡単な支払いオプションを設定しようとしていますが、返品および通知URLに問題/混乱があります。私はphpにかなり慣れていないため、以前はaspでこれを達成しましたが、今は迷子になっています。

私の基本的なPaypalフォーム:

<form action="https://www.Paypal.com/cgi-bin/webscr" method="post" id="PayPalForm" name="PayPalForm"  target="_top">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="business" value="[email protected]">
 <input type="hidden" name="amount" value="0.01">
 <input type="hidden" name="item_name" value="Composite Door">
 <input type="hidden" name="item_number" value="<?php echo $orderID ?>">
 <input type="hidden" name="currency_code" value="GBP">
 <input type="hidden" name="cancel_return" value="http://www.mydomain.co.uk/Paypal-notcompleted.php">
<input type="hidden" name="return" value="http://www.mydomain.co.uk/Paypal-completed.php">
<input type="hidden" name="notify_url" value="http://www.mydomain.co.uk/Paypal-completed.php"> 
</form>


  <script>
    document.PayPalForm.submit();
   </script>

フォームがPaypalに投稿され、結果に応じてフォームが返されるのを確認できるので、失敗/キャンセルされた場合は、Paypal-notcompleted.phpに送られます。

成功した場合、Paypal-completed.phpに移動します。そして、これは私が理解できないところです、私はIPNをセットアップしていません、私がしたいのは、Paypalが私にポストするいくつかの変数を取得して、単純な挿入クエリを実行し、確認メッセージにいくつかの詳細を表示することです顧客に。

Notify_urlとreturn_urlを同じページにすることはできますか?

なぜPaypalは予想されるすべてをここに表示しないのですか(ここに示すように PaypalのURLを通知 )ページに戻りますか?

XMLなどに何か関係があることは理解していますが、Paypalから返された変数を$ _GETできると思っただけです。誰かがこの方法でそれをしたことがありますか、私がどこで間違っているのか教えてもらえますか?

17
Bohdi

詳細を戻りURLに戻すには、 [〜#〜] pdt [〜#〜] を使用する必要があります。これは [〜#〜] ipn [〜#〜] に非常に似ていますが、戻りURLでの使用を目的としているのに対し、 [〜#〜] ipn [〜#〜] =サードパーティでの使用を目的としています [〜#〜] ipn [〜#〜] サーバー上のリスナースクリプト。

[〜#〜] pdt [〜#〜] は、戻りURLページでユーザーにトランザクションを表示するだけの場合は問題ありませんが、 [〜#〜] pdt [〜#〜] (つまり、データベースの更新、電子メールのレシートの送信など)。自動復帰が有効になっている場合でも、ユーザーがこのページに戻る保証はないためPaypalアカウント。

[〜#〜] ipn [〜#〜] は、ユーザーが支払いの完了後にサイトに戻ったかどうかに関係なく、トランザクションが発生するたびにトリガーされます。

通知URLはIPNにのみ使用され、IPNのPaypalプロファイルにある設定を上書きします。 PDTは、戻りURLにデータを返すためにPaypalアカウントプロファイルで設定する必要があります。

リターンと通知に異なるURLを使用する必要があります。そうしないと、同じコードが2回実行されます。1回はユーザーがサイトに戻ったとき、もう1回はPaypal IPN POSTから実行されます。

19
Drew Angell

支払いデータ転送(PDT)

returnおよびcancel_returnのURLは、主に1回限りの支払いデータ転送( [〜#〜] pdt [〜#〜] )コールなので、ユーザーあなたのサイトでトランザクションを完了します。それはあなたのサイトがその仕事を成し遂げるのを合理的に助けるために情報を渡すだけです。買い手が戻る前に終了しないという保証はないので、これらを使用してanyトランザクション後処理を実行できるとは限りません。

即時支払い通知(IPN)

notify_urlは、即時支払い通知( [〜#〜] ipn [〜#〜] )プロセスで使用され、eachトランザクションステータスの変更で呼び出されます。これは、トランザクションのライフサイクル中に行われたallアクションの完全な記録であることを意図しており、会計、注文処理、キャンセルなどのバックエンドプロセスの駆動に依存できます。 IPNプロセスは、プロセスの整合性を確保するための対策を講じます。

それらの目的は異なるため、関連する情報とセキュリティも異なります。 長所と短所 の場合。

IPNメッセージは大幅に遅延する可能性があるため、3つすべての変数を使用します

ほとんどのIPNメッセージはPaypalトランザクションの完了から数秒以内に送信されますが、私は数時間までの遅延を経験しているため、信頼できるが必ずしもタイムリーではないことに注意してください。

returnreturn_cancelnotify_urlのすべてを使用することをお勧めします。前の2つはすぐに返されるので、ユーザーに即座にフィードバックを提供し、バックエンドデータを更新できます。フルフィルメントプロセス。ただし、ユーザーが返品される前にPaypalを終了した場合は、後者をバックアップとして使用します。購入者にサイトに戻って注文がタイムリーに処理されるように指示します。

PDTがすでに完了している場合にIPNがフルフィルメントをトリガーしないように注文ステータスを管理する必要があります。これは、基本的に、繰り返されたCompleted IPNメッセージがフルフィルメントをリトリガーしないようにするために行う必要があることです最初。

Notify_urlは、同じトランザクションの後続のメッセージに引き続き使用されます

同じトランザクションのIPNメッセージは引き続き同じnotify_urlアドレスに送信されます。 IPNの履歴を確認したところ、Refund IPNメッセージが元のnotify_urlに送信されました。

https://developer.Paypal.com/docs/classic/ipn/integration-guide/IPNSetup/ のようにIPN設定を変更した場合でも、それは続きます:

IPNメッセージを受信する設定を無効にしていない限り、IPNメッセージは常に通知URLに送信されます。プロファイルでIPNメッセージの受信を有効にしていないか、IPNメッセージをオフにして設定をリセットした場合でも、Paypalは、特定の支払いについて指定した通知URLにIPNメッセージを送信しますプロファイルで設定を無効にしたため送信されなかったIPNメッセージは、受信IPNを有効にするとIPN履歴に表示されます。履歴に表示されたら、再送信するかどうかを選択できます。

異議申し立てやその後の定期購入の支払いなど、関連する取引で元のnotify_urlが引き続き使用されるかどうかは不明です。おそらく、実際に知っている人が答えを出すことができます。

9
Patanjali

notify-urlとreturn urlはどちらも異なります。返品URLは、支払いが正常に完了した後、返品情報を顧客に案内します。ちなみに、通知URLは、顧客が購入した取引の完全な詳細を取得することであり、顧客がアクセスすることはできません。これは、データベースまたはストレージの目的のためです。

6
user2374680