Paypal不会向IPN发送沙盒交易数据

3
我今天花了九个小时在Paypal上工作,但是我遇到了一个无法解决的问题。
我正在使用 Paypal Javascript Buttons Github脚本创建动态页面生成按钮,用于简单的“立即购买”交易。
该按钮示例输出由PHP生成(因此是动态的),并且看起来像这样(包含沙箱细节):
  <script src='https://site-addr/includes/js/paypal-button.min.js?merchant=siteemail-facilitator@gmail.com'
data-callback='https://site-addr/account/listener.php'
data-tax='0' 
data-env='sandbox' 
data-shipping='0' 
data-currency='GBP' 
data-amount='1.00'
data-quantity='1' 
data-custom='$2y$10$BdA/7xN2S/fzRq8X9p4pFOmzYBpia/u7sWsAcWN/4w9NZVXduaUzu'
data-number='20165'
data-size='Large'
data-locale='UK'
data-host='www.sandbox.paypal.com'
data-type='button'
data-cancel_return='https://site-addr/account/basket.php'
data-return='https://site-addr/account/complete.php'
data-name='Site Name Tickets' 
data-button='buynow' 
async='async'></script>

这会生成一个完美的简单点击表单,以通过Paypal接口购买。
同时,我已经从Paypal Github下载了IPN监听器并根据要求更新了详细信息,还从这里下载了cacert.pem文件。
我已经运行了Paypal IPN模拟器,每次运行测试都会通过我的listener.php文件给出正确的完整数据和VERIFIED反馈。 问题 但是,当我使用上述细节运行沙盒购买时,购买正常运行,但我没有收到任何关于我的IPN监听器的反馈,也没有在我的沙箱交易通知上获得任何交易细节。但是,我确实可以在沙箱Paypal帐户上获得有关购买成功和购买已成功完成的详细信息。 我尝试过的事情

我阅读了很多Paypal文档,并发现他们提供一个清晰简明的指南来设置任何东西非常困难。我阅读了大约40页他们的文档,包括从Stack Overflow中找到各种有用的帖子(Paypal直接参考这些帖子提供解决方案,而不是提供自己的解决方案)。

尝试但失败的解决方案:

  • This similar question did not provide any clear solution.

  • This question gives some help and confirms that the transactions should be the acceptable web_accept type.

  • This question (answer) gives clear advise to use data-notify_url rather than the data-callback as specified on the JavascriptButton github

    data-notify_url='https://site-addr/account/listener.php'
    

但是替换data-callback并没有起作用。交易似乎仍然成功,但没有记录任何交易或IPN数据。

  • 尝试删除/替换各种data-实体,但没有成功。

  • 我在整个网站上启用了完整的PHP错误报告,但没有生成任何形式的错误。


进一步考虑

我确定你们中的一些人会说,我应该使用SDK下载来完成这种事情,但是SDK的范围很大,而我的需求相对简单,并且Paypal的文档还有很多地方需要设计。此外,他们在一系列Paypal github存款中使用 MySQL_ 请求作为示例代码以及 addslashes 等已经过时的东西。

此外值得注意的是,虽然Javascript按钮生成器的Paypal文档接受帐户电子邮件或帐户代码,但给出帐户代码会导致关键错误并阻止处理付款(真实或沙盒)。

再加上只有零散的指导信息,以及文档中的“循环”,使我处于一个主题上,它说“哦,如果你想找出如何做到这一点,请遵循此链接”,然后跟随链接,它更详细的是为非开发人员编写的文本(在开发者门户网站上),然后链接到另一个文本块,再链接回要开始的文本。

抱歉,这似乎变成了对Paypal的抱怨,但尽可能地,我希望避免使用庞大的SDK系统,因为这应该是一项简单的发送和接收数据操作。

有解决这个问题的任何有用示例吗?


< p > 最后说明: 上个月我在Stripe上制作了一个支付系统,与这个系统完全相同,只用了四个小时,而且运行得非常好。

(我不能在这里使用Stripe,因为客户有一个现有的Paypal账户,不会更改)。

解决方案:

在David Nguyens的帮助下,我发现我的问题在于我已经设置了IPN并启用了IPN,并给出了正确的地址, 但是这是在Live账户上而不是sandbox账户上, 尽管只有在所有详细信息都应用于真实帐户之后才设置了沙箱帐户。

Paypal的LiveSandbox配置文件完全互斥, 而且沙箱创建不会导入与其关联的任何实时帐户数据。

1个回答

3

进一步排除Paypal问题

  • 在Sandbox Paypal上调查IPN日志,查看数据发送的内容和位置,此处链接是生产环境URL沙盒URL
  • 检查状态码,如果出现5xx类型的错误,请对脚本进行调试。
  • 这应该会告诉你IPN被发送到了哪里。如果不是应该发送到的地方,请检查:
    • 按钮中的ipn URL
    • 配置文件中覆盖的ipn URL

我的交易页面在这里没有显示任何交易,但是登录沙盒网站可以看到交易,但是除了JS表单中给出的数据之外,没有显示更多信息,也没有5xx返回等。监听器脚本不应该有问题,因为IPN模拟器使用相同的脚本引用(如在真实账户控制面板中设置)。我在沙盒管理网站中找不到任何编辑任何交易目的地等选项。 - Martin
我用了你提供的链接,并将沙盒地址替换进去,结果告诉我它处于“排队”状态,因为在我的沙盒配置文件中我没有创建IPN目标文件(但在真实配置文件中我已经创建了)。天啊。 - Martin
@Martin,这应该可以让你开始了,是的,PayPal开发真的很令人愤怒 :) - David Nguyen
我得等他们重新发送交易,看看它们是否到账,但如果成功了,我就可以给你打勾。感谢你指导我正确的方向,David。非常感谢。 - Martin
我有点沮丧地发现IPN历史记录页面不允许我重新发送详细信息,除非我去菜单并重新加载相同的页面,从菜单中,重新发送复选框突然出现在IPN历史记录页面上。无论如何,感谢您的帮助。 - Martin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接