Paypal IPN の仕組みについて簡単な説明が必要です。基本的なことだけで詳細は何もありません。
HTML 変数を設定する方法と、Paypal からの支払いを確認するためのデータを取得する方法を教えてください。これが私が知る必要があるすべてであり、これに関する簡単な説明がどこにも見つかりません。
可能であれば、いくつかのコード行も表示してください。間違いなく役立ちます。
ありがとう。
IPNは、 PayPalが次のような特定のイベントに関する通知を送信するために使用するメッセージ サービスです
多くの場合、IPN イベントをトリガーするアクションは、Web サイトでのユーザー アクションです。ただし、他のアクションによって IPN がトリガーされる場合があります。たとえば、サイトのバックオフィス プロセスが支払いを返金する PayPal API を呼び出したり、顧客が PayPal に異議のある請求を通知したりすることがあります。
リスナー (ハンドラーと呼ばれることもあります) を使用して IPN メッセージを受信し、処理します。このリスナーは基本的に、サーバー上に作成する Web ページまたは Web アプリケーションであり、常にアクティブであり、PayPal から送信された IPN メッセージを受け入れて検証し、サーバーからの情報に基づいてサーバー上のバックエンド サービスを呼び出すコードを持っています。 IPN メッセージ。Web アプリケーションは IPN を待機し、(通常) 適切に応答する管理プロセスにそれらを渡します。PayPal は、メッセージ PayPal から送信された IPN を処理するリスナーを実装するために変更できるサンプル コードを提供します。詳細については、IPN リスナーの実装 を参照してください。
詳細情報とヘルプについては、PayPal 即時支払い通知ガイドをご覧ください。
お役に立てれば。
私はこれに相当する 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 を使用して、システム ステータスを更新できます (購入した製品のロック解除など)。
私はこのPHPクラスが非常に便利(そして使いやすい)であることがわかりました: