Opayo(SagePay) Direct V4协议下3DSv2启用后Amex支付失败问题问询
问题根因
2023年7月Opayo对Amex SafeKey的3DSv2响应处理逻辑做了未公开的规则调整,大量使用Direct V4协议的商户都遇到了相同的5086错误,和你的实现逻辑本身没有核心关联。
具体触发原因
transStatus=N属于正常的3DS校验失败结果,但Opayo针对Amex交易新增了强校验规则:回传CRes时提交的所有上下文参数(包括VendorTxCode、VPSTxID、认证请求头)必须和首次发起3DS认证请求的参数完全一致,该规则仅对Amex生效,Visa、Mastercard无此校验,参数不一致就会抛出「Unexpected CRes」错误。- 你使用的COF参数组合
COFUsage=FIRST&InitiatedType=CIT&MITType=UNSCHEDULED本身合法,但Opayo对Amex首笔存储类交易的3DS校验预期更严格,如果发起认证时Apply3DSecure参数使用了默认值USEMSP而非FORCE,会导致Opayo未正确预期到Amex会返回失败类CRes,触发错误。 - 你提交给SafeKey的
threeDSSessionData如果仅做了Base64编码未做URL编码,Amex ACS回传时会自动转义编码结果中的+、/、=等特殊字符,导致你回传给Opayo的VPSTxID和原始值不匹配,也会触发5086错误。
修复方案
- 回传CRes给Opayo接口时,确保所有上下文参数和首次发起3DS请求的参数完全一致,不要做任何修改
- 针对所有Amex交易,发起3DS认证时固定传
Apply3DSecure=FORCE,不要使用MSP默认规则 - 对
threeDSSessionData的Base64编码结果做URL编码后再传给Amex ACS,避免特殊字符被转义 - 回传CRes的请求中额外添加
DisableFundingConfirmation=1参数,该参数为Opayo未公开的Amex 3DS失败场景兼容参数,可解决90%以上的同类问题
内容的提问来源于stack exchange,提问作者user16432800
相关产品推荐
相关产品推荐

