PayPal IPN - 如果响应无效,要发回啥 http 状态标头?
Posted
技术标签:
【中文标题】PayPal IPN - 如果响应无效,要发回啥 http 状态标头?【英文标题】:PayPal IPN - what http status header to send back if response is INVALID?PayPal IPN - 如果响应无效,要发回什么 http 状态标头? 【发布时间】:2013-01-04 12:13:40 【问题描述】:我正在改进 PayPal IPN 侦听器。我已经阅读了规范,但仍有一些悬而未决的问题。众所周知,如果您收到通知,您必须在第二个通道上连接到 PayPal,将接收到的数据发送给他们,然后 PayPal 将回答 VERIFIED 或 INVALID。在某些情况下,PayPal 会重新发送通知,直到收到我们的答复。并且 PayPal 有一个名为“IPN History”的调试页面。
我至少有一次收到 INVALID,并且“IPN 历史记录”显示正常状态“已发送”。
问题1:PayPal不检查我是否在第二个通道上连接到他们以确定消息是否正确发送是否正确?
Q2:我假设 PayPal 只查看它从我们那里收到的 http 状态标头(例如“200 OK”)来决定在“IPN 历史记录”中显示什么状态。这是正确的吗?
Q3:我还假设 PayPal 仅查看 http 状态标头来决定是否必须重新发送消息。对吗?
我收到 INVALID 的 PayPal 付款现在在 PayPal 中显示为正常付款。但稍后没有其他通知。
Q4:我认为这种行为是 PayPal 的内部问题,正确的做法是告诉 PayPal 出现错误,以便 5 分钟后发送另一个通知。对吗?
Q5:如果是这样,如果我收到 INVALID,我必须将什么 http 状态标头发送回 PayPal,以确保 PayPal 稍后重新发送通知?
谢谢!
【问题讨论】:
一些澄清:我们做了很多 PayPal 付款。通常他们工作正常。当它应该真正“验证”时,我们会收到“无效”,可能千分之一。我已经编写了一个测试脚本,再次进行第二次通道验证,与以前完全相同,现在 PayPal 对以前“无效”的情况响应“已验证”。我认为 PayPal 发送错误的状态是因为他们的一些内部时间问题。所以这是一个边缘案例,以及如何告诉 PayPal 再次重新发送他们的信息。谢谢! 【参考方案1】:A1) 正确。他们只需将数据 POST 到您的脚本,如果他们从您的服务器返回 200 OK,他们认为这是完成的交易,无论您是否 POST 回来进行验证。
A2) 正确。
A3) 正确。如果付款确实是合法的 PayPal 付款,那么您将其邮寄给他们进行验证的方式一定有问题。它的格式必须与他们最初发送给您的格式完全相同。
A4) 只要您的 POST 回传数据的格式相同,它就不会无效。通过将可靠的脚本放在一起,您不必将任何特定的非 200 消息发送回 PayPal 再试一次。如果您正确配置了所有内容,它将验证并且您的脚本将以 200 OK 完成。如果您的脚本有问题,它可能最终无效(但仍然返回 200 OK,因此您不会得到另一个),或者它会返回 200 以外的其他内容,在这种情况下,它会稍后将数据重新发布给您。
A5) 如果您返回 200 以外的任何内容,它将重试,但如果您最终遇到一堆正在重试的失败,他们会将您置于延迟队列中,您将无法收到您的IPN 和你平常一样快,所以我不推荐它。您希望避免 IPN 脚本中出现 200 个结果以外的任何结果。
【讨论】:
当然,如果它真的是无效的,即来自其他地方的伪造品,你不想告诉他们你知道的,所以你应该发送 200 并让他们稍后摔倒他们没有得到服务或产品。 是的,重申这一点,没有理由让脚本仅仅因为它无效而返回失败的代码。将 IPN 记录为无效,但在您的系统中进行相应处理。脚本本身可以成功地将订单保存为无效,这将返回 200 OK 返回给它的任何 POST。 感谢安德鲁和 EJP!我得到了关于“向伪造者告密”和“延迟 IPN 治疗”的论点。因此,我得出的结论是,没有设想和安全的方式告诉 PayPal 他们应该通过 IPN 重新发送他们的数据。为了获得我们 PayPal 帐户的完美副本,因此我们必须添加一些与 PayPal 的替代同步机制。谢谢。 TransactionSearch 和 GetTransactionDetails API以上是关于PayPal IPN - 如果响应无效,要发回啥 http 状态标头?的主要内容,如果未能解决你的问题,请参考以下文章