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

Posted

技术标签:

【中文标题】Paypal IPN:如果我的听众在收到 IPN 后没有发回确认,会发生啥?【英文标题】:Paypal IPN: What happens if my listener doesn't send back acknowledgement upon receiving the IPN?Paypal IPN:如果我的听众在收到 IPN 后没有发回确认,会发生什么? 【发布时间】:2021-10-04 17:33:37 【问题描述】:

这可能不是最佳做法,但在我的一个简单项目中,一旦客户填写了我的 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 上读到这篇文章之前,它一直运行良好(已记录了数百笔交易而没有任何错误)

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

我进入Pay​​pal账户查看IPN历史,该笔交易的“重试次数”为“1”,如下图所示: 所以这就解释了为什么我的谷歌表格显示了两个相同的交易。它与 IPN 说明页面中描述的行为部分匹配,尽管只有 1 次重试,与“继续重试直到我的听众响应”形成对比。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

我更新了问题。在数百个成功记录的交易中,这是 Paypal 真正“重试”发送 IPN 消息的唯一一个,并且只重试了一次。这里有两个混淆:1)Paypal 没有为我的其他交易重试发送 IPN 消息 2)当 paypal 重试时,它只重试一次,而不是继续重试。 我不确定如何更清楚地解释这一点。 PayPal 仅在收到不是 HTTP 2xx 的状态时重试。一旦收到 HTTP 2xx 状态,它就会停止重试。完成了。 我也不确定如何更清楚地解释我的情况。我从未将 HTTP 2xx 状态发送回贝宝。为什么它会停止重试甚至从不重试? “我从未将 HTTP 2xx 状态发送回贝宝。”那么你不明白 HTTP 是如何工作的,因为实际上除了一种情况之外,你实际上是在发送该状态,这是正常状态 谢谢。我现在明白了。

以上是关于Paypal IPN:如果我的听众在收到 IPN 后没有发回确认,会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

2 年后,Paypal IPN 无法联系到听众请帮助

接收 PayPal IPN 时不获取任何参数

Paypal IPN 模拟器问题

无法接收 PayPal IPN - PayPal 总是收到 403 错误

收到 PayPal IPN 后如何更新数据库