我的PayPal IPN正在验证,除了那些有txn_type of recurring_payment的。当我将消息传递给验证端点时,我使用以下方法将主体转换为查询字符串
var verificationString = '?cmd=_notify-validate';
Object.keys(body).map((key) => {
verificationString = verificationString + '&' + key + '=' + body[key];
return key;
});我最好的猜测是,这扰乱了属性的顺序。PayPal的文件说:
您的侦听器HTTPS将完整、未更改的消息发回给PayPal;消息必须包含与原始消息相同的字段(按相同的顺序),并以与原始消息相同的方式进行编码。
但我不认为Object.keys(body).map会在Nodejs中重新排列任何东西。有什么建议吗?
发布于 2020-12-23 18:14:08
找到了解决办法。原来,PayPal允许用户字段包含反斜杠、换行符等内容。这个特定的IPN有一个地址字段,在街道和公寓号之间有一个\r\n换行符。使用我的原始代码,这在某种程度上被编码不同。
现在,我不再像在原来的问题中那样组装查询字符串,而是像这样组装它,因为它保留了所有字符和编码:
var verificationString = '?cmd=_notify-validate&' + request.rawBody.toString();
这就解决了问题!
https://stackoverflow.com/questions/65418026
复制相似问题