Payment)或者绑卡(PaymentMethod)流程中加入 3DS 认证。| 集成模式 | authentication.authenticationType | 优缺点 |
|---|---|---|
| Redirect for 3D Secure 2 | threeDSPage | 优点:集成过程简单 缺点:跳转次数多用户体验一般 |
| Native for 3D Secure 2 | threeDS | 优点:用户体验好,平滑模式下用户无感 缺点:集成过程复杂 |
POST Payment 接口或 POST PaymentMethod 接口时均 可以添加额外的参数在原始流程中触发 3DS 认证流程。Payment 接口或 PaymentMethod 接口时额外添加以下参数,字段详情参考 API 文档:authentication.authenticationOnly:用来表明是否仅进行 3DS 认证,当前场景默认填 false,如果填 true EVO Cloud 将只会进行 3DS 认证,不会发起后续的授权,并将 3DS 结果返回给您(本字段仅适用于 Payment 接口)。authentication.authenticationMethod:表明方式方式的字段,固定值 CILAuth。authentication.authenticationType:表明认证模式的字段,固定值 threeDSPage。authentication.returnUrl:认证结束后回调地址,根据您的业务需求设定。authentication.threeDS.deviceType:表明消费者设备类型的字段。payment.status 或 paymentMethod.status 字段内容。如果字段的值为 Verifying 则表示交易创建成功,等待对消费者进行 3DS 认证。然后您需要查看 result.action 字段内容,然后根据 result.action 字段进行后续处理。result.action 的处理说明:| result.action | 解释 |
|---|---|
RedirectShopper | 需要商户将前端页面重定向至 authentication.threeDS.redirectUrl 字段返回的地址 |
result.action 字段内容将会是 RedirectShopper。此时您需要使用 GET 的方式将您的消费者重定向到 authentication.threeDS.redirectUrl 字段返回的地址。authentication.returnUrl。GET 的方式重定向到您的 authentication.returnUrl,同时 EVO Cloud 将会在您的重定向地址后以参数的形式添加以下两个字段。merchantTransID 可以用来匹配您的初始请求status 可以用来判断 3DS 流程是否结束https://www.yourwebsite.com?merchantTransID=T12345678&status=finishedstatus 的值为 finished,需要您调用 GET Payment 或 GET PaymentMethod 来查询交易结果。status 的值不是 finished,您可以认为 3DS 认证失败,您调同样可以调用 GET Payment 或 GET PaymentMethod 接口来查询失败详情。status = finished 不能表示最终的交易结果, status 的作用仅供您处理前端流程时使用,最终的交易状态需要您通过查询或者异步通知获取。POST Payment 接口或 POST PaymentMethod 接口时均可以添加额外的参数在原始流程中触发 3DS 认证流程。browserInfo 结构体,您需要收集的浏览器信息如下,字段详情参考 API 文档:acceptHeadercolorDepthjavaEnabledjavaScriptEnabledlanguagescreenHeightscreenWidthtimeZoneOffsetuserAgentPOST Payment 接口或 POST PaymentMethod 接口时额外添加以下参数,字段详情参考 API 文档:authentication.authenticationOnly:用来表明是否仅进行 3DS 认证,当前场景默认填 false,如果填 true EVO Cloud 将只会进行 3DS 认证,不会发起后续的授权,并将 3DS 结果返回给您(本字段仅适用于 Payment 接口)。authentication.authenticationMethod:表明方式方式的字段,固定值 CILAuth。authentication.authenticationType:表明认证模式的字段,固定值 threeDS。authentication.returnUrl:接收发卡行返回的认证结果。authentication.threeDS.deviceType:表明消费者设备类型的字段。browserInfo:您在第一步中收集到的消费者浏览器信息。payment.status 或 paymentMethod.status 字段内容。如果字段的值为 Verifying 则表示交易创建成功,等待对消费者进行 3DS 认证。然后您需要查看 result.action 字段内容,然后根据 result.action 字段进行后续处理。result.action 的处理说明:| result.action | 解释 |
|---|---|
IdentifyShopper | 需要商户将前端页面重定向至 authentication.threeDS.redirectUrl 字段返回的地址 |
ChallengeShopper | 需要商户在前端页面通过POST的方式,将 authentication.threeDS.redirectData.creq 参数发送至 authentication.threeDS.redirectUrl 字段返回的地址 |
result.action 字段内容是 IdentifyShopper,此时您需要执行 3D Secure 2 设备指纹识别。result.action 字段内容是 ChallengeShopper,请直接跳到第5步。POST 的方式访问 authentication.threeDS.redirectUrl,同时在请求参数中添加 authentication.threeDS.redirectData.threeDSMethodData。authentication.threeDS.redirectData 结构体中的参数名称一致。authentication.threeDS.redirectUrl 发送的threeDSMethodDataauthentication.returnUrlauthentication.returnUrl 中添加 merchantTransID 来匹配原始请求,然后将在后续的 PUT 请求中将 threeDSComplnd 设置为 Y,然后进行后续处理。authentication.returnUrl中未指定merchantTransID,那么您也可以对 base64 编码的threeDSMethodData进行解码,获取并存储 threeDSServerTransID 以用于对发卡行应答的匹配。因为发卡行会在应答中添加threeDSMethodData,其中threeDSServerTransID与请求时一致。threeDSComplnd 设置为 N,然后准备进行后续处理。authentication.returnUrl 发送的threeDSMethodDataPUT Payment 接口或 PUT PaymentMethod 接口,然后在接口中添加以下字段authentication.threeDS.redirectData.threeDSComplnd:指纹验证的结果标识。result.action 字段,那么需要您根据 payment.status 或 paymentMethod.status 字段的值来判断最终的交易结果。否则您将需要继续执行 result.action 中的内容来继续完成 3DS 认证。result.action 字段内容是 ChallengeShopper,此时您需要将消费者重定向到发卡行的页面进行进一步的身份验证 。POST 的方式访问 authentication.threeDS.redirectUrl,同时在请求参数中添加 authentication.threeDS.redirectData.creq。authentication.threeDS.redirectUrl 发送的 CReq 请求authentication.threeDS.redirectData结构体中的参数名称一致。threeDSSessionData字段,如果您上送了本字段,发卡行在 Cres 中将原样返回。| 字段名称 | 长度/格式 |
|---|---|
| threeDSSessionData | 长度:最大 1024 字节 格式:字母数字 Base64url 编码。 |
authentication.returnUrlauthentication.returnUrl 中的 merchantTransID 来匹配原始请求,然后将 threeDSFinished 设置为 Y,同时记录响应中的 cres 字段的值,然后准备进行后续处理。authentication.returnUrl 中未指定merchantTransID,您也可以在 Creq 请求中添加threeDSSessionData用于对 Cres 应答的比配cres 字段,则可以将threeDSFinished 设置为 N,然后准备进行后续处理。PUT Payment 接口或 PUT PaymentMethod 接口,然后在接口中添加以下字段authentication.threeDS.redirectData.threeDSFinished:Cres 验证的结果标识。authentication.threeDS.redirectData.cres:Cres 验证的结果参数。result.action 字段,那么需要您根据 payment.status 或 paymentMethod.status 字段的值来判断最终的交易结果。否则您将需要继续执行 result.action 中的内容来继续完成 3DS 认证。GET Payment 或 GET PaymentMethod 来查询交易结果。当收到查询应答时,您同样也需要通过 payment.status 或 paymentMethod.status 字段内容来判断交易结果。如果交易失败,您需要通过 payment.failureCode 以及 payment.failureReason 来查看交易失败原因。POST Payment 请求中额外添加以下参数:authentication.authenticationOnly:固定值 false。authentication.authenticationMethod:固定值 SelfAuth。authentication.threeDS.mpiData:包含了 3DS 结果的结构体。POST Payment )中请求中额外添加以下参数:authentication.authenticationOnly:固定值 true。authentication.authenticationMethod:固定值 CILAuth。authentication:包含 3DS 认证相关信息的结构体,详情参考 3DS 章节。result.action 字段,则表示该笔交易需要继续进行 3DS 认证(请参考 3DS 章节)。result.action 字段,则需要根据 payment.status 字段内容判断 3DS 认证是否结束。如果字段的值为 Verified 则表示 3DS 验证结束,同时您可以从应答中的 authentication.threeDS.mpiData 结构体中找到 3DS 认证结果信息,否则就需要查看 result.code 以及 result.message 来查看交易失败原因。| Card Scheme | ECI | Authentication status | Description |
|---|---|---|---|
| Mastercard | 02 | Y | 3DS 认证通过 |
| 01 | A | 已尝试认证。没有通过身份认证,但提供了尝试身份认证的证明。 | |
| 00 | N / U / R / C | N:未认证/帐户认证失败。交易应当被拒绝。 U:无法进行身份认证/帐户认证。技术或其他问题导致。 R:身份认证/帐户认证被拒绝。 发卡行拒绝身份认证,交易应当被拒绝。 C:需要挑战。如果您在上送 CRes 后收到此状态,则表示身份认证被拒绝。 | |
| Visa, JCB, AMEX, Diners/Discover, UPI | 05 | Y | 3DS 认证通过 |
| 06 | A | 已尝试认证。没有通过身份认证,但提供了尝试身份认证的证明。 | |
| 07 | N / U / R / C | N:未认证/帐户认证失败。交易应当被拒绝。 U:无法进行身份认证/帐户认证。技术或其他问题导致。 R:身份认证/帐户认证被拒绝。 发卡行拒绝身份认证,交易应当被拒绝。 C:需要挑战。如果您在上送 CRes 后收到此状态,则表示身份认证被拒绝。 |
GET Payment 来查询 3DS 认证是否结束。当收到查询应答时,您同样也需要通过 payment.status 字段内容来判断 3DS 认证是否结束,判断方式与第2步一致。如果 3DS 认证终止,您需要通过 payment.failureCode 以及 payment.failureReason 来查看 3DS 认证终止原因。