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

Posted

技术标签:

【中文标题】提交表单后向mysql添加paypal付款确认【英文标题】:Add paypal payment confirmation to mysql after form is submitted 【发布时间】:2014-04-30 08:06:04 【问题描述】:

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

解决方案是使用 IPN。我在网上和 youtube 上搜索了教程,但它太复杂了,我无法实现 IPN 来确认向 MySQL 付款。

请问有没有人可以帮我整理一下。

【问题讨论】:

为了确保您使用 IPN 通过 Paypal 进行的付款是强制性的。您希望安全地处理您的付款,而不使用 IPN 会使您远离安全的应用程序。所以我建议你深入研究 IPN 并尝试实施它。实际上,这甚至没有那么难 - 您只需提交 notifiy_url 包括 Paypal 将向您发送有关交易信息的位置,您可以查看并根据它采取行动;这是您实际想要存储数据库行的位置。 goo.gl/Si4OC1 【参考方案1】:

这并不复杂。

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

我希望这有助于入门!

【讨论】:

谢谢你,我正在处理这个问题,我有一个问题:my.test/pp.notifiy.php" /> 与按钮或表单一起放置?因为表单在一个页面上,下一页是贝宝按钮 将它放在表单中,所有变量都发布到 PayPal(业务、项目名称、货币代码、金额...)。 notify_url 的值是侦听器脚本的 URL,以 http://... 开头 我有一个问题,表格被发送到数据库,然后被重定向到支付选项, 请务必将其发布到 PayPal。 &lt;form name="order" method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr"&gt; ... somewhere here 应该没问题。 @Loading Welcome :) 很高兴你成功了。

以上是关于提交表单后向mysql添加paypal付款确认的主要内容,如果未能解决你的问题,请参考以下文章

我的网页上的 PayPal 捐款确认

来自 PayPal 的“回调”以确认付款?

PayPal 网站付款标准错误

Laravel paypal表单提交验证

在卖家网站上提交付款

写入我的数据库并使用相同的表单向 Paypal 提交表单?