我们已经与PayPal进行了5年的简单付款集成,直到今天仍然没有问题.在IPN URL(notify_url)中,我们在查询字符串中传递3个值,例如
https://www.example.com/callback/ipn?pspId=A&secCode=MnBP%2fxOwbQhXLd%2arD5xd6g%3d%3d&isPur=false
Run Code Online (Sandbox Code Playgroud)
从今天开始,PayPal会删除最后2个值并仅使用第一个查询字符串值进行调用,例如
https://www.example.com/callback/ipn?pspId=A
Run Code Online (Sandbox Code Playgroud)
我们使用该secCode值作为我们在回调上验证的签名,以防止对表单进行任何修改.为什么PayPal会突然开始从查询字符串中删除值?我怀疑他们应该在POST,但我不知道为什么突然改变?
好的,我们现在已经意识到PayPal 的一些服务器在第一个 & 符号处终止。这解释了为什么我们得到第一个查询字符串值而不是其他值。
看来这种行为不仅限于notify_url价值,而且正如迈克在评论中所建议的那样,这种情况也发生在该CUSTOM领域。如果您要推送一系列带有 & 分隔符的名称值对,您需要切换到其他分隔符或对整个值进行 URL 编码。
我们现在正在测试,看看对整个回调 URL 进行 URL 编码是否仍然会导致进行实际的回调。
编辑:
是的 URL 对整个notify_url值进行编码解决了问题并保留了查询字符串。
编辑2:
似乎对整个值进行 URL 编码不再有效,因此我假设 PayPal 已恢复到我们遇到这些问题之前的原始行为。希望这在所有入站服务器上都是一致的,并且现在将保持不变。