我正在改进PayPal IPN监听器。我已阅读规范,仍有一些未解决的问题。众所周知,如果您收到通知,则必须在第二个频道上连接到PayPal,向他们发送收到的数据,PayPal将以VERIFIED或INVALID回答。在某些情况下,PayPal会重新发送通知,直到收到我们的回复。 PayPal有一个名为“IPN History”的调试页面。
我至少有一次收到INVALID,“IPN历史记录”显示正常状态为“已发送”。
问题1:PayPal是否正确检查我是否在第二个频道上连接它们以确定是否正确发送了消息?
Q2:我认为PayPal只关注它从我们收到的http状态标题(例如“200 OK”),以决定在“IPN历史记录”中显示的状态。这是对的吗?
问题3:我还假设PayPal仅查看http状态标头以决定是否必须重新发送消息。这是对的吗?
我收到INVALID的PayPal付款现在显示在PayPal中作为正常付款。但是以后没有其他通知。
问题4:我认为这种行为是内部的PayPal问题,正确的做法是告诉PayPal发生错误,以便5分钟后发送另一个通知。这是对的吗?问题5:如果是这样,如果收到INVALID以确保PayPal稍后重新发送通知,我必须将什么http状态标头发送回PayPal?
谢谢!
答案 0 :(得分:4)
A1)正确。他们只是将数据发布到您的脚本中,如果他们从您的服务器获得200 OK,他们认为这是一个完成的交易,无论您是否回复验证。
A2)正确。
A3)正确。如果付款确实是合法的PayPal付款,那么将其发回给他们进行验证的方式肯定有问题。它的格式必须与它们最初发送给您的格式完全相同。
A4)只要你的POST后备数据格式化的方式相同,它就不会无效。通过放置一个可靠的脚本,您不必将任何特定的非200消息发送回PayPal以再次尝试。如果您已正确配置所有内容,它将验证并且您的脚本将以200 OK完成。如果您的脚本出现问题,它可能最终无效(但仍然返回200 OK,因此您不会再获得另一个)或者它将返回200以外的内容,在这种情况下,它会在以后重新发布数据。
A5)如果你发回200以外的任何东西,它会重新尝试,但如果你最终遇到一堆重新尝试的失败,他们会把你放在延迟的阙上,你就不会得到你的IPN和平常一样快,所以我不推荐它。您希望避免使用IPN脚本以外的200个结果。