贝宝赢了';t将沙箱事务数据发送到IPN


Paypal won't send sandbox transaction data to IPN

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

同时,我已经从Paypal Github下载了IPN监听器,并根据需要更新了详细信息,还下载了cacert.pem文件从这里。

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

问题

但是,当我使用上述详细信息运行沙盒购买时,购买运行正常,但我没有收到IPN侦听器的反馈,我的沙盒交易通知也没有收到交易详细信息。但我DO在沙盒Paypal帐户上获得购买成功和购买完成的详细信息。

我尝试过的东西

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

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

  • 这个类似的问题没有提供任何明确的解决办法。

  • 这个问题提供了一些帮助,并确认事务应该是可接受的web_accept类型。

  • 这个问题(答案)给出了使用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 Button生成器的Paypal文档接受帐户电子邮件或帐户代码,但提供帐户代码会导致严重错误,并阻止处理付款(真实或沙盒)。

再加上这一点,在文档中只发现了零碎的指导信息和"循环",所以我只关注一个主题,上面写着"哦,如果你想知道如何做到这一点的话,请点击这个链接",然后在链接后面是为非开发人员编写的更详细的文本(在开发人员门户网站上),然后是指向另一个文本块的链接,然后是返回到要开始的文本的链接。

很抱歉,这已经变成了Paypal的抱怨,但我希望尽可能避免使用庞大的SDK系统来进行直接的发送和接收数据操作。


有没有解决这个问题的有用例子


最后一点:上个月,我在Stripe上制作了一个支付系统,它做了完全相同的事情,花了四个小时,效果非常好。

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

解决方案:

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

PaypalsLive沙盒个人资料完全相互排斥并且沙箱创建不会从实时帐户导入任何数据它与关联。

在Paypal 上进一步解决问题

  • 调查SandboxPaypal上的IPN日志,看看数据被发送到什么地方,链接的是生产URL和沙箱URL
  • 如果出现5xx类型错误,请检查状态代码-调试脚本
  • 这应该告诉你IPN被发送到哪里,如果它不是应该检查的:
    • 按钮中的ipn URL
    • 配置文件中的ipn URL正在重写