ほとんどのマーチャントは、PayPal 即時支払い通知 (IPN) を使用して、配送先住所を含む支払いの詳細を受け取ります。これにより、支払いが行われたと思われるときに PayPal に ping を送信するのではなく、PayPal からリアルタイムで通知を受け取ることができます。以下は、IPN を取得して検証し、なりすましの試みではないことを確認する単純な PHP スクリプトです。検証が完了したら、データベースを更新したり、電子メールを送信したり、支払いが行われたことがわかったら必要なタスクを送信したりできます。
// Validate with curl
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$req .= "&" . $key . "=" . $value;
}
$curl_result=$curl_err='';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'www.paypal.com');//Change URL to sandbox.paypal.com if testing in our developer environment
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);
//Set validation flag
if (strpos($curl_result, "VERIFIED")!==false)
$valid = true;
else
$valid = false;
この方法は、消費者がサイトに戻って支払いを行う必要がないため、支払いデータ転送 (PDT) よりもはるかに信頼性が高くなります。