如何解决PayPal IPN 验证仅适用于 recurring_payment txn_type
我的 PayPal IPN 验证良好,但 txn_type 为 recurring_payment 的 IPN 除外。当我将消息传递到验证端点时,我使用
将正文转换为查询字符串var verificationString = '?cmd=_notify-validate';
Object.keys(body).map((key) => {
verificationString = verificationString + '&' + key + '=' + body[key];
return key;
});
我最好的猜测是这扰乱了属性的顺序。 PayPal 的文档指出:
您的侦听器 HTTPS 将完整的、未更改的消息 POST 回 PayPal;消息必须包含与原始消息相同的字段(以相同的顺序),并以与原始消息相同的方式进行编码。
但我不认为 Object.keys(body).map 会在 Nodejs 中重新排列任何东西。有什么建议吗?
解决方法
找到了解决方案。事实证明,PayPal 允许用户字段包含反斜杠、换行符等内容。这个特定的 IPN 有一个地址字段,在街道和公寓号码之间有一个 \r\n 换行符。使用我的原始代码,这在某种程度上被编码不同。
我现在没有像我原来的问题那样组装查询字符串,而是像这样组装它,因为它保留了所有字符和编码:
var verificationString = '?cmd=_notify-validate&' + request.rawBody.toString();
这就解决了问题!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。