SagePay VPS协议4.00服务端集成:VPSSignature不匹配问题
排查SagePay VPS Protocol 4.00签名不匹配问题
针对你遇到的VPSSignature不匹配问题,从签名规则和提供的请求/响应数据出发,以下是具体排查方向和验证步骤:
核心排查点
签名不匹配的绝大多数原因是拼接字符串不符合规则,需逐一核对以下细节:
1. 严格遵循字段拼接顺序
必须完全按照给定的顺序拼接字段,MD5对字符顺序极度敏感。正确的字段顺序及对应响应值如下:
1. VPSTxId: {8652345E-5B25-49F1-DD23-1B9CCC2B6545} 2. VendorTxCode: 324234906133500 3. Status: OK 4. TxAuthNo: 34234532 5. VendorName: Vendorname(与请求中Vendor字段完全一致,注意大小写) 6. AVSCV2: SECURITY CODE MATCH ONLY 7. SecurityKey: AZFE2KOSDS 8. AddressResult: NOTMATCHED 9. PostCodeResult: NOTMATCHED 10. CV2Result: MATCHED 11. GiftAid: 0 12. 3DSecureStatus: OK 13. CAVV: Y2c2ZVVBeTRvTUVwVGtpaGVMdzk= 14. AddressStatus: (空值,直接留空) 15. PayerStatus: (空值,直接留空) 16. CardType: VISA 17. Last4Digits: 0006 18. DeclineCode: 00 19. ExpiryDate: 0123 20. FraudResponse: (空值,直接留空) 21. BankAuthCode: 999777 22. ACSTransID: 490ead88-8dc8-4ac4-b40a-fbe1f8a95182 23. DSTransID: 3f06865c-33c1-462c-956d-01f4c55114b5 24. SchemeTraceID: Wkv0Jq8QEYu4DupyW0gG}s2~}N2K~U+7LAMYCVU0vXt2uH0prPJCpY6
2. 空字段处理不能省略
响应中AddressStatus、PayerStatus、FraudResponse为空,拼接时必须保留这些空位置(直接留空字符串),不能跳过字段。例如CAVV后直接接空,再接PayerStatus的空,之后才是CardType。
3. 避免多余空格/特殊字符丢失
- 拼接时字段之间不能添加任何空格、换行符或分隔符,必须直接连在一起。
- 确保所有特殊字符(如VPSTxId的大括号、SchemeTraceID中的
}、~、+)完整保留,未被转义或截断。
4. MD5编码格式匹配
- 计算MD5时需使用UTF-8编码(SagePay默认要求)。
- 最终结果必须转换为大写十六进制字符串,与返回的VPSSignature格式一致。
验证拼接字符串
正确的拼接字符串应为:
{8652345E-5B25-49F1-DD23-1B9CCC2B6545}324234906133500OK34234532VendornameSECURITY CODE MATCH ONLYAZFE2KOSDSNOTMATCHEDNOTMATCHEDMATCHED0OKY2c2ZVVBeTRvTUVwVGtpaGVMdzk==VIS0006000123999777490ead88-8dc8-4ac4-b40a-fbe1f8a951823f06865c-33c1-462c-956d-01f4c55114b5Wkv0Jq8QEYu4DupyW0gG}s2~}N2K~U+7LAMYCVU0vXt2uH0prPJCpY6
将该字符串输入MD5计算器,得到的结果应与返回的N135C007EF1643ABE44CAC12EBD9ED43完全一致。
内容的提问来源于stack exchange,提问作者Jinson John
相关产品推荐
相关产品推荐

