这并不复杂。
您已经有用于测试的沙盒帐户了吗?如果没有,请在sandbox.paypal.com 注册卖家/买家测试帐户。也许两者都需要不同的电子邮件地址,不确定。
1.) 在您的提交表单中输入您的 IPN 脚本的路径,例如pp.notifiy.php
<input type="hidden" name="notify_url" value="http://my.test/pp.notifiy.php" />
同样在您的 PayPal 商家/沙盒帐户设置中,指定您的侦听器的 URL。
侦听器脚本不得设置防火墙。它将从 PayPal 收到 $_POST。
2.) 支付成功后,
- Paypal 将发布到您的侦听器脚本(例如 pp.notifiy.php)
- 并且听众会发回帖子的副本。
- 您正在检查正文中的字符串
VERIFIED 以处理订单并更新您的数据库。
我更喜欢 cURL 解决方案,因为 PayPal 最近发生了一些变化,这引起了一些麻烦,使用 cURL 解决方案对我来说效果很好,尤其是在沙盒测试时。需要cURL extension to be active in PHP。
对于 cURL 解决方案,请阅读 PayPal 开发人员的更多信息:How To Process Instant Payment Notification (IPN) Messages;另一个解决方案,我不推荐uses fsockopen。
这是我工作的 cURL 侦听器脚本 (pp.notify.php) 的一部分
#$pp_url = "https://www.paypal.com/cgi-bin/webscr";
$pp_url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
// build the request / postback
$req = 'cmd=_notify-validate';
foreach($_POST AS $k => $v) {
$v=urlencode(stripslashes($v));
$req.="&$k=$v";
}
// post back to PayPal system to validate using curl
$ch = curl_init($pp_url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
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_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
if(!($res=curl_exec($ch)))
{
#error_log("Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit;
}
$res = trim($res);
curl_close($ch);
// inspect IPN validation result and act accordingly
if(strcmp($res,"VERIFIED")==0)
{
// The IPN is verified
// update your db/process order...
} else if (strcmp($res,"INVALID")==0)
{
// IPN invalid, log for manual investigation
}
这也适用于沙盒。所以最好做几个测试。您应该获得VERIFIED,然后处理订单/更新数据库。当一切正常时,从沙盒切换到真正的 PayPal,最好也至少测试一次。
我希望这有助于入门!