php - 表单提交后添加paypal支付确认到mysql

标签 php mysql paypal paypal-ipn

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

对此的解决方案是使用 IPN。我已经在网上和 you-tube 上搜索教程,但是它太复杂了,我无法获得 IPN 来确认支付到 MySQL 中。

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

最佳答案

并不复杂。

您已经有一个用于测试的沙箱帐户了吗?如果没有,请在 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 并且最好至少测试一次。

我希望这有助于入门!

关于php - 表单提交后添加paypal支付确认到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584462/

相关文章:

mysql - 使用 between 运算符的 SQL 选择

paypal - 需要支付流程的解决方案

node.js - 在 Node 中使用 Paypal Rest API

php - SQL - 根据另一个表中的行数删除行

javascript - 如何为您的网站制作模糊的延迟图像加载?

mysql - Node.js 没有很好的 ORM 来管理 MySQL 模式/迁移......所以我可以使用 SQLAlchemy 来管理它吗?

mysql - 如何编写一个带有 where 子句的左连接来限制多个表的左侧部分?

php - 使用 LAMP 连接到 MSSQL 服务器

php - 将 utf8 字符转换为 iso-88591 并返回 PHP

ruby-on-rails - 如何在 Ruby on Rails 中集成 Paypal 集成