MPGS Direct Payment 3DS支付无法完成问题求助
关于MPGS Direct Payment 3DS支付功能执行支付失败的问题
问题背景
我正尝试实现MPGS Direct Payment 3DS支付功能,已遵循MPGS官方的三步集成指南。
操作流程
- 创建Session(成功),请求地址:
POST "https://cibpaynow.gateway.mastercard.com/api/rest/version/71/merchant/TEST123456/session/" - 更新Session并填入卡片信息(成功)
- 发起认证(成功),请求地址:
PUT "https://cibpaynow.gateway.mastercard.com/api/rest/version/71/merchant/TEST123456/order/1/transaction/2" - 验证付款人(成功)
- 执行支付(失败)
支付请求及错误响应
最后一步执行支付时,我传入了order.id和authentication.transactionId,请求内容如下:
{ "authentication" : { "transactionId": "2" }, "session": { "id": "SESSION0002873236543L1392791G59" }, "order":{ "amount":"1", "currency":"EGP", "reference" : "1" }, "apiOperation": "PAY", "transaction":{ "reference":"1" } }
收到的错误响应:
{ "error": { "cause": "INVALID_REQUEST", "explanation": "A transaction with this transaction ID has already been processed but the request parameters do not match. To process a new transaction for this order, the transaction.id must be unique for the order." }, "result": "ERROR" }
这里的transactionId: "2"是我之前用于认证的ID,这个错误让我困惑。
补充猜测
我猜测问题可能是我发起的是PAYER_WEBSITE类型的认证,但通过API PUT请求执行支付。如果确实是这个问题,我该如何发起无需通过网站即可完成的认证?
问题分析及解决方案
直接问题:重复使用transaction ID
你在支付请求里未指定新的transaction.id,系统默认尝试复用已完成的认证交易ID("2")执行支付,但认证交易的参数和支付请求不匹配,因此触发报错。
正确处理方式:
- 支付请求需指定全新且唯一的transaction ID(例如"3"),放在
transaction.id字段中 authentication.transactionId保留之前认证成功的ID("2"),用于关联认证与支付交易
修改后的支付请求示例:
{ "authentication" : { "transactionId": "2" }, "session": { "id": "SESSION0002873236543L1392791G59" }, "order":{ "amount":"1", "currency":"EGP", "reference" : "1" }, "apiOperation": "PAY", "transaction":{ "id": "3", // 新增唯一的transaction ID "reference":"1" } }
关于无跳转认证的实现
若你的场景不需要跳转付款人网站,应使用PAYER_AUTHENTICATION类型的纯API认证流程,发起认证请求时需添加以下配置:
"authentication": { "channel": "API", "type": "PAYER_AUTHENTICATION" }
同时需确认你的商户账号已开通该认证类型权限,具体可联系MPGS商户支持核实。
内容的提问来源于stack exchange,提问作者Steve Roseik
相关产品推荐
相关产品推荐

