1

Paypal IPN の仕組みについて簡単な説明が必要です。基本的なことだけで詳細は何もありません。

HTML 変数を設定する方法と、Paypal からの支払いを確認するためのデータを取得する方法を教えてください。これが私が知る必要があるすべてであり、これに関する簡単な説明がどこにも見つかりません。

可能であれば、いくつかのコード行も表示してください。間違いなく役立ちます。

ありがとう。

4

3 に答える 3

4

IPNは、 PayPalが次のような特定のイベントに関する通知を送信するために使用するメッセージ サービスです

  • エクスプレス チェックアウト、クレジット カードによる直接支払い、および承認 (承認されているがまだ回収されていないトランザクションの支払い) を含む即時支払い
  • eCheck の支払いと関連するステータス (保留中、完了済み、拒否など)、およびその他の理由で保留中の支払い (詐欺の可能性を検討中など)
  • 定期的な支払いとサブスクリプション アクション
  • 取引に関連するチャージバック、異議申し立て、取り消し、および払い戻し

多くの場合、IPN イベントをトリガーするアクションは、Web サイトでのユーザー アクションです。ただし、他のアクションによって IPN がトリガーされる場合があります。たとえば、サイトのバックオフィス プロセスが支払いを返金する PayPal API を呼び出したり、顧客が PayPal に異議のある請求を通知したりすることがあります。

リスナー (ハンドラーと呼ばれることもあります) を使用して IPN メッセージを受信し、処理します。このリスナーは基本的に、サーバー上に作成する Web ページまたは Web アプリケーションであり、常にアクティブであり、PayPal から送信された IPN メッセージを受け入れて検証し、サーバーからの情報に基づいてサーバー上のバックエンド サービスを呼び出すコードを持っています。 IPN メッセージ。Web アプリケーションは IPN を待機し、(通常) 適切に応答する管理プロセスにそれらを渡します。PayPal は、メッセージ PayPal から送信された IPN を処理するリスナーを実装するために変更できるサンプル コードを提供します。詳細については、IPN リスナーの実装 を参照してください。

詳細情報とヘルプについては、PayPal 即時支払い通知ガイドをご覧ください。

お役に立てれば。

于 2012-09-07T07:22:19.330 に答える
3

コード

私はこれに相当する c# を何度も使用しました (そして、PHP バージョンは非常によく似ています)。

https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

<?php
  //reading raw POST data from input stream. reading pot data from $_POST may cause serialization issues since POST data may contain arrays
  $raw_post_data = file_get_contents('php://input');
  $raw_post_array = explode('&', $raw_post_data);
  $myPost = array();
  foreach ($raw_post_array as $keyval)
  {
      $keyval = explode ('=', $keyval);
      if (count($keyval) == 2)
         $myPost[$keyval[0]] = urldecode($keyval[1]);
  }
  // read the post from PayPal system and add 'cmd'
  $req = 'cmd=_notify-validate';
  if(function_exists('get_magic_quotes_gpc'))
  {
       $get_magic_quotes_exits = true;
  } 
  foreach ($myPost as $key => $value)
  {        
       if($get_magic_quotes_exits == true && get_magic_quotes_gpc() == 1)
       { 
            $value = urlencode(stripslashes($value)); 
       }
       else
       {
            $value = urlencode($value);
       }
       $req .= "&$key=$value";
  }

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.paypal.com'));
// In wamp like environment where the root authority certificate doesn't comes in the bundle, you need
// to download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
// of the certificate as shown below.
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
$res = curl_exec($ch);
curl_close($ch);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];


if (strcmp ($res, "VERIFIED") == 0) {
    // check the payment_status is Completed
    // check that txn_id has not been previously processed
    // check that receiver_email is your Primary PayPal email
    // check that payment_amount/payment_currency are correct
    // process payment
}
else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
}
?>

概要

基本的に、PayPal がお客様に連絡し、お客様が応答します。これにより、IPN ハンドラを呼び出したのが PayPal であり、悪意のある当事者ではないことを検証できます。その検証ステップの後、結果の処理に進むことができます。ご存じのとおり、支払いが発生した後に IPN 呼び出しが行われます (また、支払いライフサイクルの他のイベント用に構成することもできます)。IPN を使用して、システム ステータスを更新できます (購入した製品のロック解除など)。

他のもの

  • 私が PayPal に使用した最後の開発 URL はhttps://www.sandbox.paypal.com/cgi-bin/webscrでした(おそらくまだ有効です) 。
  • IPN ページ/ハンドラーは、PayPal が呼び出すために公開されている必要があります。
  • PayPal 開発者 UI で IPN 通知を構成する必要があります (主に、IPN ページへの URL を提供する必要があります)。
  • PayPal が IPN ハンドラーに送り返す元のトランザクションで、カスタム情報を PayPal に送信できます。「カスタム」というフィールドで渡されると思います。
于 2012-09-07T07:23:10.637 に答える
2

私はこのPHPクラスが非常に便利(そして使いやすい)であることがわかりました:

于 2012-09-09T09:16:23.920 に答える