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

Posted

技术标签:

【中文标题】Paypal 不会将沙盒交易数据发送到 IPN【英文标题】:Paypal won't send sandbox transaction data to IPN 【发布时间】:2016-09-09 20:07:21 【问题描述】:

我今天花了 9 个小时与 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 界面进行购买。

同时,我已经下载了IPN listener from the Paypal Github 并根据需要更新了详细信息,还下载了cacert.pem 文件 from here.

我已经通过我的listener.php 文件运行了Paypal IPN simulator,它给了我正确的结果,每次我运行测试时都会从完整数据和VERIFIED 中给出正确的反馈。

问题

但是,当我使用上述详细信息运行沙盒购买时,购买运行正常,但我的 IPN 侦听器没有收到任何反馈,我的sandbox Transaction notifications 上也没有交易详细信息。但是我确实在沙盒 Paypal 帐户上获得了购买成功并且购买已正常完成的详细信息。

我尝试过的事情

我阅读了很多 Paypals 文档,发现他们的方法可以为通过 Paypal 设置任何内容提供清晰简洁的指南,这非常令人担忧。我已经阅读了大约 40 页他们的文档,包括从 Stack Overflow 中找到各种有用的帖子(他们 Paypal directly reference 寻求有用的解决方案,而不是提供自己的解决方案)。

尝试过但失败的解决方案:

This similar question 没有提供任何明确的解决方案。

This question gives some help 并确认交易应该是可接受的web_accept 类型。

This question (answer) 明确建议使用 data-notify_url 而不是 JavascriptButton github 上指定的 data-callback

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 系统来进行直接发送和接收数据的操作。


有解决此问题的有用示例吗?


最后说明: 上个月我在Stripe 上做了一个支付系统,它做的事情完全一样,花了四个小时,而且效果很好。

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

解决方案:

在下面 David Nguyens 回答的帮助下,我发现我的问题是我已经设置了 IPN 并启用了 IPN 并给出了正确的地址,但这是在 Live 帐户而不是 沙盒 帐户,尽管只是设置 在应用了实时帐户的所有详细信息后的沙盒帐户。

Paypals LiveSandbox 配置文件完全相互排斥 并且沙盒创建不会从真实账户导入任何数据 它是相关联的。

【问题讨论】:

【参考方案1】:

在 Paypal 上进一步解决问题

调查 Sandbox Paypal 上的 IPN 日志以查看数据发送到什么位置和位置,链接是 production URL 和 sandbox URL。 检查状态码,如果您收到 5xx 类型错误 - 调试您的脚本 这应该告诉你 IPN 被发送到哪里,如果它不是应该检查的: 按钮中的ipn URL 配置文件中的 ipn URL 被覆盖

【讨论】:

我的交易页面here 没有显示任何交易,但是登录到沙盒网站会显示交易,但只显示 JS 表单中给出的数据,没有 5xx 返回等. 侦听器脚本应该不会出错,因为 IPN 模拟器使用相同的脚本引用(在正版帐户控制面板中设置)。我在沙盒管理站点中找不到用于编辑任何交易目的地等的选项。 哦,看在他妈的份上,我使用了您提供的链接并将沙箱地址替换为其中,我告诉我它已“排队”,因为在我的沙箱配置文件中我没有创建 IPN目标文件(但我在现实生活中拥有)。天哪。 感谢您朝正确的方向轻推。虽然我很生气,似乎无法从沙盒配置文件中访问沙盒交易列表......所以非常 Paypal。 @Martin 应该能让你继续前进,是的,paypal 开发是愤怒的 :) 我将不得不等待他们重新发送交易以查看它们是否到达,但如果可行,那么我可以给你打勾。谢谢你指出我正确的方向,大卫。不胜感激。

以上是关于Paypal 不会将沙盒交易数据发送到 IPN的主要内容,如果未能解决你的问题,请参考以下文章

未收到来自 Paypal IPN 沙盒的响应

Paypal IPN 未在沙盒上发送/接收

未收到 Paypal 沙箱 IPN 消息

当 PayPal 发送付款通知 (IPN)

缺少 PayPal 沙盒 IPN 历史记录

如何将沙盒用于网站支付标准?