3DS支付验证
在信用卡支付中使用3DS支付验证
要使用3DS支付验证,你可能需要先集成供应商所提供的用于3DS的JavaScript库。 然后你需要在支付请求的card3dsInfo对象中,指定字段use3ds的值为true,并提供对应供应商所需的其他验证参数。
在收到3DS支付验证请求后,支付系统会返回一个带有验证信息的IN_PROGRESS状态的响应。 你需要根据这些验证信息,继续进行3DS的认证流程。当付款人完成认证后,支付成功,订单的状态将会转为SETTLED。
集成Openpay的3DS支付验证
1) 在请求的card3dsInfo对象中,指定当3DS支付验证完成时,Openpay重定向付款人所使用的redirectUrl。请求和响应的例子如下:
创建带3DS支付验证的请求
POST
/v1/payments/charges/card
Request Headers
{
"Content-Type": "application/json",
"Authorization": "Bearer {{access_token}}",
"x-api-key": "{{api_key}}"
}
Request Body
{
"idempotencyKey": "1ec983fa-1a37-679b-809b-067861d87ab0",
"amount": 1000,
"country": "MX",
"currency": "MXN",
"paymentMethod": "CREDIT_CARD",
... # other basic request fields
"card3dsInfo": {
"use3ds": true,
"redirectUrl": "https://www.liquido.com" // 认证完成后的重定向地址
},
"subMerchantId": "UUID",
... # other basic request fields
}
Response
{
"transferStatusCode": 200,
"idempotencyKey": "1ec983fa-1a37-679b-809b-067861d87ab0",
"referenceId": "1ec983fa-1a37-679b-809b-067861d87ab0",
"paymentMethod": "CREDIT_CARD",
"amount": 1000,
"currency": "MXN",
"finalAmount": 1000,
"finalCurrency": "MXN",
"country": "MX",
"createTime": "2022-03-01 17:53:18 GMT-08:00",
"scheduledTime": "2022-03-01 17:53:18 GMT-08:00",
... # other basic response fields
"transferDetails": {
"card": {
"cardInfo": {
"cardHolderName": "card_holder_name",
"expirationMonth": 9,
"expirationYear": 2024,
"brand": "VISA",
"bin": "458124",
"last4": "0000"
},
"cardId": "8736453a-dad0-4f26-85f0-95e8787d0237",
"card3dsInfo": {
"use3ds": true,
"redirectUrl": "https://www.liquido.com",
"authenticationUrl": "https://api.openpay.mx/v1/mdo1yf2/charges/trsa4og/redirect/"
}
}
},
"transferStatus": "IN_PROGRESS",
"description": "this is a test pay",
"subMerchantId": "UUID"
}
2) 从以上例子的响应中可以看到,当认证需要走3DS的挑战流程时,Openpay会返回一条重定向到发卡行认证页面的authenticationUrl。
3) 浏览器需要把付款人重定向到authenticationUrl的页面以完成认证。
4) 当付款人完成认证后,Openpay将会把付款人重定向到第1步所注册的redirectUrl。支付成功后,订单状态将会转为SETTLED。