提交表单后,向mysql添加paypal付款确认

时间:2014-03-22 22:26:09

标签: php mysql paypal paypal-ipn

我有一个非常简单的在线HTML表单。用户填写表单,当他们提交时,将信息插入MySQL数据库,然后将其重定向到PayPal以完成付款。问题是数据库没有关于他们是否真正完成付款的任何信息。

解决方法是使用IPN。我在网上搜索你的教程,但它太复杂了,我无法通过IPN确认支付给MySQL。

请问是否有人可以帮我把它们放在一起。

1 个答案:

答案 0 :(得分:2)

它并不太复杂。

您已经有一个沙箱帐户进行测试了吗?如果没有,请在sandbox.paypal.com注册卖家/买家测试帐户。可能需要两个不同的电子邮件地址,不确定。

1。)在提交表单中输入您的IPN脚本的路径,例如pp.notifiy.php

<input type="hidden" name="notify_url" value="http://my.test/pp.notifiy.php" />

同样在您的PayPal商家/沙箱帐户设置中,指定您的听众的网址。 侦听器脚本不得使用防火墙。它将从PayPal收到$ _POST。

2。)付款成功后,

  • Paypal将发布到您的听众脚本(例如pp.notifiy.php)
  • 并且听众会发回帖子的副本。
  • 您正在检查字符串VERIFIED的正文以处理订单并更新您的数据库。

我更喜欢cURL解决方案,因为PayPal最近发生了变化,这导致了一些麻烦,cURL解决方案对我来说很好,特别是在沙箱测试时。需要cURL extension to be active in PHP

有关cURL解决方案,请参阅PayPal Developer: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,最好至少测试一次。

我希望这有助于入门!