Paypal IPN:如果我的听众在收到 IPN 后没有发回确认会怎样?

问题描述

这可能不是最佳实践,但在我的一个简单项目中,我一直在使用以下链接,在客户填写我的 Google 表单后发送给他们的电子邮件

https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&no_shipping=1&tax=0&amount=60&business=my@email.com&currency_code=USD&notify_url=https://example.com/myListener.php&item_name=dummy

在我的监听器中,我只是处理来自 IPN 的 POST 数据并将其发布到一个简单的谷歌表中,以便我知道我的客户是否已付款。

它一直工作正常(已记录数百笔交易,没有任何错误),直到最近我在 Paypal 的 IPN instruction page

enter image description here

虽然它说我的听众必须回复每条 IPN 消息,但我从未这样做过,我也认为我从未收到任何重新发送的消息。讽刺的是,今天刚写这篇文章的时候,我注意到最近的一笔交易在我的谷歌表中被报告了两次,这是唯一的异常记录。然后我发送了测试付款,但这次没有被报告两次。

我进入Pay​​pal账户查看IPN历史,该笔交易的“重试次数”为“1”,如下图:

enter image description here

所以这解释了为什么我的 Google Sheet 显示两个相同的交易。并且它部分匹配 IPN 说明页面中描述的行为,尽管只有 1 次重试,与“继续重试直到我的听众响应”相反。

有人知道为什么实际行为与他们在自己页面上所说的如此不同吗?

另外,由于我的听众实际上完美地工作,我现在不想碰它。但是,如果我保持原样,会不会导致潜在的问题?

解决方法

您的 IPN 侦听器必须在 PayPal 向其发送消息时回复 HTTP 2xx 成功状态,否则 PayPal 将不断重试(最多约 20 次),直到它这样做为止。

所以如果听众回复例如HTTP 4xx、5xx,或者根本不回复或无法连接 - PayPal 将继续重试。

我不确定这里的具体混淆是什么;行为如所述。您的屏幕截图显示最后一个状态为 200。