3DS 支付验证
3-Domain Secure™(3D 验证或 3DS)允许您在提交 Authorization 或 Pay 交易前对付款人进行身份验证,从而保护在线购买、防范信用卡欺诈。3DS 验证的工作原理是将付款人重定向到其输入之前注册的密码的发卡机构。
QNB ALAHLI 使用 Mastercard SecureCode™、Verified by Visa™、J/Secure™、American Express SafeKey™ 和 Diners Club ProtectBuy™ 支持 3DS 身份验证。
先决条件
- 您必须在收单行注册才能够使用 3DS。
- 您必须通过 QNB ALAHLI 在商家配置文件中启用 3DS 计划。
3DS 付款人体验
此部分介绍使用 3DS 对付款人进行身份验证的购物网站的示例结账流。
成功身份验证的结账流如下所示:
- 付款人浏览您的购物网站,选择一个或多个产品,进入付款页,并选择使用支持 3DS 的卡支付。
- 检查 3DS 注册: 您要求 QNB ALAHLI 通过卡组织检查卡是否注册了 3DS
- 对付款人进行身份验证: 确认卡已注册后,您将付款人的浏览器重定向到其发卡机构的 3DS 身份验证页面。 付款人输入其 3DS 密码并提交信息。 发卡机构将认证结果返回给您。
- 处理 ACS 结果: 您要求 QNB ALAHLI 处理身份验证结果。QNB ALAHLI 向您提供从发卡机构接收的身份验证响应的详细信息。
- 在付款操作中使用 3DS 结果: 您提交付款进行处理。
- 您向付款人显示订单确认页。
集成以使用 3DS 身份验证
此部分介绍如何集成到 QNB ALAHLI 以使用 3DS。
您可以通过在 Check 3DS Enrollment 请求中提供以下字段来检查卡是否已注册:
3DSecureId
: 此身份验证的唯一识别码。您应该在所有后续操作中包括同一个识别码。3DSecure.authenticationRedirect.responseUrl
: 您希望在完成 3DS 身份验证流程后将付款人重定向到的 URLorder.amount
: 订单总额order.currency
: 订单货币sourceOfFunds.provided.card.*
、session.id
或sourceOfFunds.token
: 用于付款的卡的详细信息。网络令牌
网关可以在 Check 3DS Enrollment 请求中处理网络令牌。 当前支持从 Mastercard Digital Enablement Service (MDES) 和 Visa Token Service (VTS) 令牌化服务提供商处获取的网络令牌。
如果您是通过直接集成到网络令牌化服务获得的网络令牌,则必须使用以下字段(<<webServicesIntegration>> v54 及更高版本支持的 MDES 令牌,以及 <<webServicesIntegration>> v55 及更高版本支持的 VTS 令牌)提供令牌详细信息:
sourceOfFunds.type=SCHEME_TOKEN
: 让网关能够识别在请求中作为网络令牌提供的资金来源。sourceOfFunds.provided.card.number
: 网络令牌。 为 MDES“令牌 PAN”或 VTS“令牌”提供值。sourceOfFunds.provided.card.expiry
: (可选)网络令牌过期。
如果 your payment service provider 已为您启用了网络令牌化,任何向网关请求网关令牌的请求还会尝试生成相应的网络令牌。 网关还将尝试对已经存储在网关令牌库中的所有适用卡进行网络令牌化。 Check 3DS Enrollment 请求将使用网络令牌(如果可用),否则将使用根据网关令牌存储的资金提供 PAN (FPAN)(<<webServicesIntegration>> v55 及更高版本支持的 MDES 令牌,以及 <<webServicesIntegration>> v56 及更高版本支持的 VTS 令牌)。
- (可选)
3DSecure.goodsDescription:
您可以提供要购买的商品的简要描述。 如果发卡机构的访问控制服务器 (ACS) 支持,此描述将显示在向付款人呈现的身份验证页面。
网关在响应中返回注册检查结果:
3DSecure.xid
: QNB ALAHLI 为 3DS 身份验证生成的唯一交易识别码。3DSecure.veResEnrolled
: 指示付款人身份验证对此卡号是否可用。
网关还将返回 response.gatewayRecommendation
,您可以用它来确定下一个步骤。 此建议基于您或 your payment service provider 配置的 3DS 交易筛选规则。
response.gatewayRecommendation |
下一步 |
---|---|
PROCEED | 您可以继续对付款人进行身份验证。 |
DO_NOT_PROCEED | 不继续对此卡进行 3DS 身份验证。 您可以为付款人提供尝试其他付款方式的选项。 |
对于高级集成,您可以使用 3DSecure.veResEnrolled
字段中返回的值确定下一个步骤。 下表提供了汇总。 请参考卡组织文档来解释验证注册响应 (VERes) 消息中的“注册”字段。
3DSecure.veResEnrolled |
下一步 |
---|---|
卡已注册 | 卡已注册 3DS。 继续对付款人进行身份验证。 |
卡未注册 | 卡未注册 3DS。 通过在请求中提供 3DSecureId 继续付款操作。 |
卡不支持 3DS | 卡不支持 3DS,您不能继续进行 3DS 身份验证。 |
无法进行身份验证 | 存在错误。 通过在请求中提供 3DSecureId 继续付款操作。 |
如果卡已注册(例如,3DSecure.veResEnrolled = Y)
),那么您应该将付款人浏览器重定向到发卡机构的网站进行身份验证。 只需将 3DSecure.authenticationRedirect.simple.htmlBodyContent
中提供的内容返回给付款人的浏览器即可。
当身份验证流程在发卡机构网站完成后,发卡机构的访问控制服务器 (ACS) 将以发布到您在 Check 3DS Enrollment 请求中指定的响应 URL (3DSecure.authenticationRedirect.responseUrl
) 的 HTTP 发布形式,将身份验证响应返回给您。
返回给您的支付身份验证响应 (PARes) 以 base64 编码值形式提供。 若要解码此值,将 PARes 传输到 Process ACS Result 操作中的 3DSecure.paRes
字段并提交该操作。 网关将在响应中提供身份验证结果:
3DSecure.veResEnrolled
: 指示付款人身份验证对此卡号是否可用。3DSecure.paResStatus
: 指示发卡机构执行的付款人身份验证结果。 如果 PaRes 无效,则不返回此字段。 请参考相关的卡组织文档来确定下一个步骤。
网关还将返回 response.gatewayRecommendation
,您可以用它来确定下一个步骤。 请注意,具体建议仅基于您或 your payment service provider 配置的 3DS 交易筛选规则。
response.gatewayRecommendation |
下一步 |
---|---|
PROCEED | 通过在请求中提供 3DSecureId 继续付款操作。 |
DO_NOT_PROCEED | 不继续提交付款操作。 您可以为付款人提供尝试其他付款方式的选项。 |
对于高级集成,您可以使用 3DSecure.paResStatus
字段中返回的值确定下一个步骤。 下表提供了汇总。 请参考卡计划文档来解释 PARes 消息中的“状态”字段。
3DSecure.paResStatus |
下一步 |
---|---|
身份验证成功 | 付款人成功通过身份验证。 通过在请求中提供 3DSecureId 继续付款操作。 |
身份验证失败 | 付款人未通过身份验证。 您不能继续付款操作。 此结果由组织规则决定。 |
已尝试进行身份验证 | 已尝试对付款人进行身份验证,但无法完成。 通过在请求中提供 3DSecureId 继续付款操作。 |
无法进行身份验证 | 存在错误。 通过在请求中提供 3DSecureId 继续付款操作。 |
当 Check 3DS Enrollment 或 Process ACS 操作结果指示您可以继续付款时,您可以开始 Authorize 或 Pay 操作。 在请求中包括您在 Check 3DS Enrollment 操作中提供的 3DSecureId
。 您无需在 3DSecure 参数组中包括任何参数,因为当您要求处理身份验证结果时,网关将使用 3DSecureId
查找存储的身份验证结果。 网关将需要的信息传送到收单行。
result = ERROR
。 您可以为付款人提供尝试其他付款方式的选项。其他选项
在检查 3DS 前,您可以为动态货币兑换 (DCC) 提交费率报价请求来检索付款人货币以及使用该货币的订单金额。 如果付款人接受 DCC 出价,那么您必须在 Check 3DS Enrollment 请求中包括 DCC 信息。
用于重定向付款人以进行身份验证的表单所需的 HTML 可以使用两种页面生成方法之一生成:
Simple
: QNB ALAHLI 生成 HTML 表单。 完整表单在 Check 3DS Enrollment 响应中返回。 这是默认选项。Customized
: 您将使用 Check 3DS Enrollment 响应中提供的参数生成您自己的自定义 HTML 表单。
检查 3DS 注册操作的响应将包括所选选项所需的信息。
(可选)自定义简单表单
您可以通过在检查 3DS 注册请求中设置 3DSecure.authenticationRedirect.pageGenerationMode = SIMPLE
来定制生成的简单表单,然后指定一个或多个参数的值:
3DSecure.authenticationRedirect.simple.expectedHtmlEncoding
3DSecure.authenticationRedirect.simple.redirectDisplayBackgroundColor
3DSecure.authenticationRedirect.simple.redirectDisplayContinueButtonText
3DSecure.authenticationRedirect.simple.redirectDisplayTitle
(可选)生成您自己的自定义表单
您可以通过在 Check 3DS Enrollment 请求中设置 3DSecure.authenticationRedirect.pageGenerationMode = CUSTOMIZED
来指定您将生成自己的表单。响应将包括以下参数:
3DSecure.authenticationRedirect.customized.acsUrl
: 付款人可进行身份验证的发卡机构的访问控制服务器 (ACS) 的 URL。3DSecure.authenticationRedirect.customized.paReq
: 发送给 ACS 以发起付款人身份验证的付款人身份验证请求 (PAReq) 消息。
在您的表单中包括这些值,以及身份验证完成后付款人将返回到的 URL。
下方显示了示例自定义表单:
<!-- Populate the form action attribute with the value returned in the 3DSecure.authenticationRedirect.customized.acsUrl response parameter -->
<form name="3dsRedirect" action="[3DSecure.authenticationRedirect.customized.acsUrl]" method="POST" accept-charset="UTF-8">
<!-- Populate the mandatory PaReq parameter with the value returned in the 3DSecure.authenticationRedirect.customized.paReq response parameter. -->
<input type="hidden" name="PaReq" value="[3DSecure.authenticationRedirect.customized.paReq]"/>
<!-- Populate the mandatory TermUrl value with the URL to which you want the payer returned when the authentication process has completed. This should be the same value as supplied in the 3DSecure.authenticationRedirect.responseUrl parameter to the CHECK_ENROLLMENT request. -->
<input type="hidden" name="TermUrl" value="https://merchant.com/3ds/return"/>
<!-- The ACS will echo the contents of the mandatory MD parameter when the payer is returned to the URL specified in the TermUrl parameter. You can use this parameter to establish a link between the ACS request and response. -->
<input type="hidden" name="MD" value="[mdvalue]"/>
<input type="submit" value="Click here to continue" class="button">
</form>
如果您已使用外部 3DS MPI 对付款人进行身份验证,那么您必须将有关身份验证的信息传入 Pay 或 Authorize 操作的身份验证参数组中。
所有字段为可选字段,因为是否由外部 3DS MPI 向您提供这些字段取决于交易的身份验证状态。 不过,如果您有数据,建议您提供数据。
authentication.3ds.acsEci
: 可能在身份验证响应消息中返回给您的电子商务指示符。authentication.3ds.authenticationToken
: 发卡机构生成的可能在身份验证响应消息中返回给您的 base64 编码值。authentication.3ds.transactionId
: 网关为 3DS 身份验证生成的唯一交易识别码。 此字段与 XID 对应,是网关代表商家生成的标识符。 在此字段中提交的 XID 必须是 base64 格式。authentication.3ds1.paResStatus:
指示发卡机构执行的付款人身份验证结果。authentication.3ds1.veResEnrolled:
指示付款人身份验证对您提供的卡号是否可用。
authentication.3ds.authenticationToken
。常见问题
网关将在 3DSecure.veResEnrolled
和 3DSecure.paResStatus
字段中分别提供注册状态和身份验证状态。
VERes 是卡计划在响应检查 3DS 注册请求时返回到网关的消息。 PARes 是响应付款人身份验证请求时返回到网关的响应消息。
请参考卡组织文档来解释 3DSecure.veResEnrolled
和 3DSecure.paResStatus
字段中返回的值。
如果您在交易中提交了 3DS 详细信息,请在 Merchant Administration 中搜索订单或交易。 查看订单详细信息,然后选择查看身份验证详细信息的链接。
如果您想要查看未继续付款的身份验证的详细信息(例如,身份验证失败),请使用 Merchant Administration 中的身份验证搜索选项。
可以,您可以在外部风险提供商认定为低风险的付款中绕过对付款人的 3DS 身份验证。 有关详细信息,请参见 Dynamic 3DS。
您可以通过使用 ACS 模拟器来测试您的集成以通过 QNB ALAHLI 执行 3DS 身份验证。 这允许您选择特定的 3DS 身份验证结果(在 3DSecure.paResStatus
的交易响应中返回)。