3DS 支付验证
3-Domain Secure™(3D 验证 或 3DS)是一种安全协议,它通过要求持卡人在付款时向发卡机构进行身份验证,为网上购物增加了额外的安全保障。 它帮助阻止未经授权的在线交易,降低欺诈风险,并可以在交易的身份验证成功时避免出现退单,为商家提供保护。 当持卡人在网上购物时,发卡机构使用访问控制服务器 (ACS) 来对持卡人的身份进行验证。
3DS 是安全协议的最新版本,在 Mastercard Gateway 中也称为 3DS2,旨在增强在线购物的安全性,同时为 ACS 认为低风险的付款人提供无障碍结账服务。 ACS 使用商家提供的信息、浏览器指纹以及与付款人的先前互动来确定风险。 仅当需要进行额外验证来对付款人进行身份验证时,ACS 才会对付款人进行质询(例如,输入 PIN),从而提高转化率。 支持的身份验证计划包括 Mastercard SecureCode™、Verified by Visa™、American Express SafeKey™、Diners Club/Discover ProtectBuy、JCB J/Secure、ITMX Local Switch EMVCo 和 mada secure。
术语
下表列出了 3DS 集成文档中引用的关键术语。
术语 | 说明 |
---|---|
3DS JavaScript API | 一个客户端 JavaScript API,允许您使用基于会话的身份验证从付款人的浏览器发起 3DS 身份验证。
此 API 与 Hosted Session 集成方法一起使用。 |
访问控制服务器 (ACS) | 在发卡机构域内运行的组件,验证身份验证是否可用于卡号和设备类型,并对特定交易进行身份验证。 |
ACS 方法调用 | 允许 ACS 收集其他数据来确定付款人的风险评分的调用。 当 3DS2 可用并且发起身份验证后响应中返回了 ACS 调用详细信息时,这些详细信息将被传送到付款人的浏览器,并在隐藏内嵌框架中作为表单发布提交,以便 ACS 可以收集其他数据。 |
身份验证通道 | 进行 3DS 身份验证的位置 – 付款人的浏览器、付款人移动设备上的应用,或没有付款人进行交互的系统。 |
身份验证目的 | 3DS 身份验证操作的目的。 通常,您需要对付款人进行身份验证来处理特定卡的付款,或者处理非支付身份验证,后者只需验证付款人希望存储在您的应用或网站内的新卡,以供将来付款时使用。 |
质询流 | 由于 ACS 没有足够的付款人信息来将付款人视为低风险,因此付款人被重定向到 ACS 并需要响应质询来证明自己身份的身份验证流。 |
无障碍流 | 由于 ACS 将付款人视为低风险,因此不需要付款人响应质询的身份验证流。 |
商家身份验证 | 一种机制,允许商家对网关收到的 API 请求进行身份验证,例如,密码/证书/会话/身份验证。 |
付款人身份验证 API | 一个服务器端 API,包含两个操作 Initiate Authentication 和 Authenticate Payer,必须从您的服务器提交到网关服务器。 它还可以用作使用基于会话的身份验证的客户端 API。 此 API 与 Direct Payment 集成方法一起使用。 |
付款会话 | 付款会话或简单会话是参考会话的操作的所有请求字段和值的暂时容器。 您可以在操作中使用它来引用请求字段和值,而不是在操作请求中直接提供这些信息。 当网关收到参考会话的操作时,它将会话中的请求字段与请求中直接提供的字段合并,来建立最终请求。 有关详细信息,请参阅会话基础知识。 |
会话身份验证 | 使用付款会话进行身份验证。 此身份验证方法允许付款人通过客户端与网关的交互(通过付款人的浏览器或付款人移动设备上的应用)直接向网关提供其付款详细信息。 它使用基本的 HTTP 身份验证机制(类似于密码身份验证),在这种机制中,您必须在用户 ID 部分提供 'merchant.<your gateway merchant ID>',在密码部分提供会话 ID。 要使用此身份验证类型,您必须首先通过从服务器向网关服务器提交会话请求(参见创建会话)来创建会话。 |
3DS 身份验证流
下图说明了使用 3DS 对付款人进行身份验证的付款的身份验证流。
成功的身份验证的身份验证流如下所示:
- 付款人浏览您的网站,选择一个或多个产品,进入付款页,选择使用支持 3DS 的卡支付。
- 发送 INITIATE AUTHENTICATION 请求,要求网关与卡组织确认卡是否已注册 3DS。
- 如果付款人的 3DS 身份验证可用,网关将在响应中返回支持的 ACS 方法调用的身份验证详细信息。
- 以表单发布的形式在隐藏的内嵌框架中提交 ACS 方法调用详细信息,让 ACS 可以发起身份验证并收集有关付款人的其他数据。
- 发送 AUTHENTICATE PAYER 请求,要求网关执行发起的身份验证。
- 网关根据身份验证流为您提供身份验证详细信息:
- 完成身份验证的无障碍流: 网关将付款人重定向到您的网站。
- 需要付款人交互来完成身份验证的质询流: 如果发卡机构要求付款人响应质询,您的应用将付款人的 Web 浏览器重定向到 ACS,这将显示身份验证 UI。 发卡机构将身份验证结果返回到网关。 网关将付款人直接重定向到您的网站。
- 使用 AUTHORIZE 或 PAY 请求提交付款以供处理,并在请求中包含 3DS 身份验证交易 ID。
- 向付款人显示订单确认页面。
authentication.redirect.html
。 这有助于最大限度地减少付款人收到“SERVER_BUSY”错误时的等待时间。 将 3DS 添加到您的集成中
先决条件
- 要使用网关的 3DS 身份验证服务:
- 您必须在收单行注册才能够使用 3DS。
- 您必须为支持的 3DS 版本的至少一个 3DS 计划启用您在网关上的商家配置文件。
- 您必须使用 API v57 或更高版本。
3DS 身份验证模式
- 网关支持以下 3DS 身份验证模式:
- 仅身份验证: 您使用网关执行 3DS 身份验证。 您可以选择稍后通过此网关或其他网关提交付款(使用身份验证详细信息)。
- 身份验证和付款交易: 您使用此网关执行 3DS 身份验证,然后通过此网关提交付款(使用身份验证详细信息)。
- 预身份验证付款交易: 您使用外部提供商执行 3DS 身份验证,并在通过此网关提交付款时提供身份验证详细信息。
3DS 集成选项
网关支持以下 3DS 集成选项。
集成方法 | 3DS 集成 | 何时使用 | 支持的身份验证模式 |
---|---|---|---|
Hosted Checkout | 使用 Hosted Checkout 进行 3DS | 这是最简单的集成选项。 如果您支持 3DS,则 3DS 身份验证将由您的 Hosted Payment Page 集成中的 Hosted Checkout 自动处理。 |
|
Hosted Session | 3DS JavaScript API | 这是一个 JavaScript 集成,您可以通过它从您网站的付款页发起 3DS 身份验证。 如果您希望允许付款人将其付款详细信息从浏览器直接提交到网关,请使用此选项。 要直接从付款人的浏览器发起 3DS 身份验证和其他 3DS 操作,您必须首先建立身份验证通道,您的商家服务器必须在该通道中与网关服务器进行通信以在网关上创建会话。 然后,网关生成的会话 ID 将作为密码字段包含在所有浏览器发起的身份验证请求中(参见身份验证选项)。 |
|
Direct Payment | 付款人身份验证 API | 这是一个服务器端集成选项,可让您完全控制集成,但集成工作量最大。 如果您需要自定义付款人的浏览器和网关之间的 API 交互,请使用此选项。 您必须执行管理直接从商家服务器到网关服务器的 3DS 集成流所需的操作。 付款人身份验证 API 还支持付款会话(参见会话基础知识)。 |
|
移动集成 | 嵌入在 SDK 中 | 如果您支持 3DS,您可以通过函数调用发起身份验证,其余流程部分由 SDK 自动处理。 |
|
常见问题
我如何在 Merchant Administration 中查看身份验证详细信息?
您可以在 Merchant Administration 中查看为继续处理付款所进行的各个身份验证和身份验证的身份验证详细信息。 请在搜索页面搜索订单或交易,然后查看身份验证详细信息。
我如何检索 3DS 身份验证结果?
如果您希望在任何阶段检索身份验证结果,请使用 RETRIEVE TRANSACTION 操作。 仅在身份验证期间使用的字段(例如,authentication.redirect.html
)不会保留在网关中,因此不会返回。
如何提交经过预身份验证的付款请求?
如果您使用了外部 3DS MPI(商家插件)对付款人进行身份验证,您必须在 AUTHORIZE 或 PAY 操作的身份验证对象中传递有关身份验证结果的信息。
由于交易的状态确定外部 3DS MPI 是否向您提供了特定字段,因此所有字段都是可选的。 但是,如果您有数据,请提供:
authentication.3ds.acsEci
在身份验证响应消息中返回给您的电子商务指示符。
-
authentication.3ds.authenticationToken
在身份验证响应消息中返回给您的发卡机构生成的 Base64 编码值。
通过表单发布发起的 ACS 方法调用的结果不会自动提供,您的应用必须发送 AUTHENTICATE PAYER 请求才能获得响应。 -
authentication.3ds.transactionId
网关为 3DS 身份验证生成的唯一交易标识符。 此字段对应于组织 Directory Server 分配的标识符。
-
authentication.3ds2.protocolVersion
用于执行 3DS 身份验证的 3DS 协议版本,采用 EMVCo 指定的格式。 例如,2.1.0。
-
authentication.3ds2.transactionStatus
付款人在发卡机构进行身份验证的结果。
-
authentication.3ds2.statusReasonCode
指示
authentication.3ds2.transactionStatus
中返回的交易状态原因的代码。 当authentication.3ds2.transactionStatus
返回N
、U
或R
时,必须提供此字段。 -
authentication.amount
身份验证金额。 您必须在身份验证金额与
order.amount
不同时,在此字段中提供值。 使用此字段之前,请与 Your payment service provider (PSP) 确认。 -
authentication.time
付款人身份验证的日期和时间。 使用此字段之前,请与您的 PSP 确认。
如果您是一家在沙特阿拉伯王国设置了 mada 收单行链接的电子商务商家,有在网关外完成完全 3DS 身份验证的付款人,您必须集成到 API v76 或更高版本,并在 AUTHORIZE 或 PAY 操作中提供以下身份验证详细信息,才能成功提交 mada 联名卡、mada 单标卡或国际卡交易:
-
authentication.3ds2.acsReference
EMVCo 在 ACS 批准后分配给发卡机构的 ACS 的参考号。 该字段对应 EMVCo
acsReferenceNumber
字段。 -
authentication.3ds2.dsReference
EMVCo 在 DS 批准后分配给 Directory Server (DS) 的参考号。 该字段与 EMVCo dsReferenceNumber 字段相对应。
-
authentication.3ds2.acsTransactionId
ACS 分配的用于识别 3DS 交易的唯一交易标识符。
-
authentication.time
付款人身份验证的日期和时间。 该字段与 EMVCo
purchaseDate
字段相对应。 -
authentication.3ds.acsEci
发卡机构的 ACS 提供的电子商务指示符 (ECI) 值,用于指示尝试对付款人进行身份验证的结果。
-
authentication.3ds.authenticationToken
发卡机构生成的 Base64 编码值。 此字段对应身份验证值。
-
authentication.3ds.transactionId
交易 ID。 此字段对应 DS 交易 ID。
-
authentication.3ds2.protocolVersion
用于执行 3DS 身份验证的 3DS 协议版本。 例如,2.1.0。
-
authentication.3ds2.transactionStatus
交易状态。 该字段与 EMVCo
transStatus
字段相对应。 -
authentication.3ds2.authenticationScheme
身份验证计划。 对于在外部进行身份验证的 mada 联名交易,您必须提供
MADA
、MASTERCARD
或VISA
,来指定用于对交易进行身份验证的 3DS DS。 对于在外部完成身份验证的 mada 单标交易,您可以提供MADA
,或不提交此字段。 对于其他卡,您可以提供相应的身份验证方案或不提交此字段。
如何提交非支付身份验证请求?
如果您执行身份验证只是为了验证付款人的身份,而不继续处理付款,您必须在 INITIATE AUTHENTICATION 请求中指明身份验证的目的。 例如,如果您想在付款人输入卡详细信息时对其进行身份验证,以便以后在您的网站上进行客户注册或创建账户时使用。 能够在非付款环境中完成身份验证过程可以增强付款人体验,降低付款人的放弃比率。
- 要执行非支付身份验证,在 INITIATE AUTHENTICATION 请求中提供以下字段:
order.currency
您的收单行链接支持的任何货币。authentication.purpose
- 请求付款人身份验证的上下文。 您可以指定以下其中一项:
- ADD_CARD: 在将付款人的卡存档之前直接由您或使用网关的 Tokenization 功能执行的身份验证。 付款未被处理。
- MAINTAIN_CARD: 在更新已存档的付款人的卡详细信息之前,直接由您或使用网关的 Tokenization 功能执行的身份验证。 付款未被处理。
如果身份验证计划不支持您请求的目的,网关将在 authenticationStatus 响应字段中返回 AUTHENTICATION_NOT_SUPPORTED。 默认情况下,网关将此字段设置为 PAYMENT_TRANSACTION,以允许在付款交易中使用身份验证。
整合方商家如何使用 3DS?
整合方商家可以支持他们的下级商家在网关上使用付款人身份验证 API。 下级商家不需要与收单行或网关之间有合同关系。 整合方商家可以通过 INITIATE AUTHENTICATION 操作提交发起身份验证所需的下级商家详细信息。 有关详细信息,请参阅整合方。
3DS 交互在网关上如何表示?
付款人身份验证 API 使用 3DS 作为订单的单独 AUTHENTICATION 交易记录付款人身份验证的详细信息。 有关 AUTHENTICATION 交易的详细信息,请参阅 AUTHENTICATE PAYER 操作的响应字段列表。
当您使用 RETRIEVE ORDER 操作检索订单或收到 Reporting API 响应时,它可能包含额外的 AUTHENTICATION 交易。 此外,当您使用 Webhook 通知时,也可能会收到额外的 AUTHENTICATION 交易通知。
我能否在付款人身份验证中使用网络令牌作为资金来源?
从 API v57 开始,您可以使用网络令牌进行付款人身份验证。 有关详细信息,请参见网络令牌化。
如果您的 PSP 已为您启用了网络 Tokenization,任何向网关请求网关令牌的请求还会尝试为启用的计划生成相应的网络令牌(如果发卡机构支持)。 网关还会尝试为已存储在网关令牌库中的任何适用卡使用网络 Tokenization。 如果可用,INITIATE AUTHENTICATION 请求将使用网络令牌。 否则,将使用对应网关令牌存储的资金提供 PAN (FPAN)。 此模式目前仅支持 MDES 令牌。
我能否在付款人身份验证中使用设备付款令牌作为资金来源?
从 API v55 开始,您可以使用设备付款令牌进行付款人身份验证。 仅支持从 Google Pay SDK 获取的付款令牌。 您可以提供加密付款令牌或从已解密付款令牌获取的 PAN 来进行付款人身份验证。 网关仅接受带有 FPAN 的身份验证请求,带有 DPAN 的请求会被拒绝。 要通过付款令牌提供卡详细信息,请提供以下字段:
-
order.walletProvider = GOOGLE_PAY
-
sourceOfFunds.provided.card.devicePayment.paymentToken
从 Google Pay SDK 获取的加密付款令牌。 仅当网关解密付款令牌时适用。
-
sourceOfFunds.provided.card.number
Google Pay JSON 密钥 PAN。 仅当您解密付款令牌时适用。
我如何实现高级付款会话集成?
如果您使用付款会话(会话 ID)来存储身份验证详细信息,在 AUTHENTICATE PAYER 请求完成后付款人的浏览器向您的网站提交的 POST 请求将以参数表示,以便确定身份验证结果。 单独的身份验证字段(例如,authentication.3ds2.transactionStatus.data
)在高级集成中很有用,或者如果您需要在通过另一个网关处理的付款中提供身份验证数据,也会很有用。 要实现此目的,您可以提交 RETRIEVE TRANSACTION 请求或选择解密加密的身份验证数据,如下所示:
- 使用 CREATE SESSION 操作创建会话。
- 使用 UPDATE SESSION 请求将相关数据添加到会话 ID(在 CREATE SESSION 响应中返回)。
- 在 INITIATE AUTHENTICATION 和 AUTHENTICATE PAYER 请求中使用此会话 ID。
- 付款人浏览器到您的网站的重定向在
encryptedData
字段中包含付款人身份验证详细信息。 它是一个加密的 JSON 对象,包含在身份验证流程中获取的身份验证数据。 它包含以下字段:encryptedData.ciphertext
authentication.3ds.acsEci
authentication.3ds.authenticationToken
authentication.3ds.transactionId
authentication.3ds1.veResEnrolled
authentication.3ds1.paResStatus
authentication.3ds2.transactionStatus
authentication.3ds2.dsTransactionId
transaction.authenticationStatus
authentication.3ds2.statusReasonCode
sourceOfFunds.provided.card.number
sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.year
sourceOfFunds.token
order.id
transaction.id
encryptedData.nonce
encryptedData.tag
- 要解密
encryptedData.ciphertext
字段中返回的内容,在 GCM 模式下使用session.aes256Key
字段值(在 CREATE SESSION 响应中返回)。 Base64 编码密钥为机密信息,您只能自己知道。
public final class SessionDataDecrypter { /** * The algorithm used for encryption/decryption */ private static final String SYMMETRIC_ALGORITHM = "AES/GCM/NoPadding"; /** * The algorithm to be associated with the secret key material */ private static final String SYMMETRIC_KEY_TYPE = "AES"; /** * The secret key associated with the session, as returned in the session.aes256Key in a Create Session response. */ private final byte[] key; /** * Constructs a new object with the given key. The key is Base64 encoded, as returned in the session.aes256Key * field in a Create Session response. This key must be kept secret, as it may be used to encrypt, decrypt and * authenticate data for that session. * * @param encodedKey Key to be used for decryption. */ public SessionDataDecrypter(String encodedKey) { key = Base64.getDecoder().decode(encodedKey); } /** * Performs decryption of the given ciphertext, using the key passed in the constructor and the associated nonce. * The tag is used to authenticate the ciphertext. * * @param ciphertext Encrypted and authenticated session data * @param nonce Nonce/Initialization vector associated with the ciphertext * @param tag Authentication tag * @return The decrypted session data * @throws AEADBadTagException if the data cannot be authenticated with the given tag * @throws InvalidKeyException if the key cannot be constructed properly. This may indicate that it has not been * correctly retrieved from the response field * @throws GeneralSecurityException other than {@link AEADBadTagException} and {@link InvalidKeyException}, should * not be thrown in a correctly set up environment */ public String decrypt(String ciphertext, String nonce, String tag) throws GeneralSecurityException { Key keySpec = new SecretKeySpec(key, SYMMETRIC_KEY_TYPE); // The Java crypto classes expect the ciphertext and tag to be a single input, so they need to be concatenated byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext); byte[] tagBytes = Base64.getDecoder().decode(tag); byte[] input = new byte[encryptedBytes.length + tagBytes.length]; System.arraycopy(encryptedBytes, 0, input, 0, encryptedBytes.length); System.arraycopy(tagBytes, 0, input, encryptedBytes.length, tagBytes.length); // Configure the cipher with AES, using GCM parameter specifying the nonce/initialization vector byte[] iv = Base64.getDecoder().decode(nonce); GCMParameterSpec parameterSpec = new GCMParameterSpec(tagBytes.length * Byte.SIZE, iv); final Cipher decrypter = Cipher.getInstance(SYMMETRIC_ALGORITHM); decrypter.init(Cipher.DECRYPT_MODE, keySpec, parameterSpec); // Perform the decryption and return the value. byte[] decryptedBytes = decrypter.doFinal(input); return new String(decryptedBytes, StandardCharsets.UTF_8); } }
我如何才能增加无障碍流的机会?
AUTHENTICATE PAYER 请求可以包含有关付款人和交易的大量信息。 例如,您可以使用 customer.account 对象中的字段在请求中提供以下数据,这可以帮助发卡机构对与活动相关的风险级别进行 ACS 评估。 在合法付款中,它可以帮助 ACS 确认付款人可能是实际持卡人。
- 付款人使用的是否是现有账户?
customer.account.history.creationDate
- 此账户存在了多长时间?
-
customer.account.history.lastUpdated
-
customer.account.history.passwordLastChanged
-
- 付款人在您这里多久购物一次?
-
customer.account.history.addCardAttempts
-
customer.account.history.annualActivity
-
customer.account.history.recentActivity
-
customer.account.history.shippingAddressDate
-
-
customer.account.history.issuerAuthentication.acsTransactionId
-
customer.account.history.issuerAuthentication.time
-
customer.account.history.issuerAuthentication.type
-
- 您是否发现此账户有可疑活动(例如,登录尝试失败)?
-
customer.account.history.suspiciousActivity
-
customer.account.authentication.method
-
customer.account.authentication.time
-
您还可以在 AUTHENTICATE PAYER 请求中为每个卡组织提供以下建议字段。 此列表并非最终列表,可能会发生变更。
AUTHENTICATE PAYER 中每个卡组织的建议字段
字段 | Mastercard | Visa | American Express | 注释 |
---|---|---|---|---|
shipping.contact.email | - | - | Y | 计算商家风险时需要 |
shipping.method | - | - | Y | 计算商家风险时需要 |
order.valueTransfer.amount | - | - | Y | 计算商家风险时需要。 仅适用于礼品卡 |
order.valueTransfer.numberOfCards | - | - | Y | 计算商家风险时需要。 仅适用于礼品卡。 |
order.valueTransfer.currency | - | - | Y | 计算商家风险时需要。 仅适用于礼品卡。 |
order.supply.preorderAvailabilityDate | - | - | Y | 计算商家风险时需要。 |
order.supply.preorder | - | - | Y | 计算商家风险时需要。 |
order.supply.reorder | - | - | Y | 计算商家风险时需要。 |
order.valueTransfer.accountType | - | Y | - | Visa 和某些市场(例如,巴西)的其他组织需要。 order.valueTransfer.accountType = NOT_A_TRANSFER 时不适用。 |
我如何确定身份验证状态?
网关在 transaction.authenticationStatus
字段中提供身份验证状态。 根据身份验证阶段,该字段可以返回以下值之一:
AUTHENTICATION_ATTEMPTED
尝试了付款人身份验证,并获得了身份验证尝试证明。
AUTHENTICATION_AVAILABLE
所提供的付款方式可以使用付款人身份验证。
AUTHENTICATION_FAILED
付款人尚未经过身份验证。 请勿继续此交易。
AUTHENTICATION_NOT_SUPPORTED
此付款方式不支持所请求的身份验证方法。
AUTHENTICATION_NOT_IN_EFFECT
没有与此交易关联的身份验证信息。
AUTHENTICATION_PENDING
付款人身份验证正在等待质询流程完成。
AUTHENTICATION_REJECTED
发卡机构拒绝了身份验证请求并要求您不要尝试授权付款。
AUTHENTICATION_REQUIRED
此付款需要进行付款人身份验证,但未提供。
AUTHENTICATION_SUCCESSFUL
付款人身份验证成功。
AUTHENTICATION_UNAVAILABLE
由于技术或其他问题,无法验证付款人的身份。
支付身份验证数据的有效时长可能取决于您的用例。 如果您需要说明,请联系您的 PSP。
要将重复交易与身份验证一起使用,请参见存档凭据交易。
如何在付款人身份验证中使用动态货币兑换?
在发起付款人身份验证之前,您可以通过提交 PAYMENT OPTIONS INQUIRY 请求来获取 DCC 提供商的动态货币兑换 (DCC) 费率报价。
如果 DCC 提供商已给出报价,并且您已将此报价提供给付款人,您必须在 INTIATE AUTHENTICATION 请求中提供付款人的反应:
- 如果付款人接受了报价,则使用:
- 在 PAYMENT OPTIONS INQUIRY 响应中返回的
currencyConversion.requestId
currencyConversion.uptake = ACCEPTED
- 在 PAYMENT OPTIONS INQUIRY 响应中返回的
- 如果付款人拒绝了报价,使用:
- 在 PAYMENT OPTIONS INQUIRY 响应中返回的
currencyConversion.requestId
currencyConversion.uptake = DECLINED
- 在 PAYMENT OPTIONS INQUIRY 响应中返回的
如果此交易不需要 DCC,提交 INITIATE AUTHENTICATION 请求,其中包含 currencyConversion.uptake = NOT_REQUIRED
。
如果您配置为使用 DCC,并且未在 INITIATE AUTHENTICATION 请求中提供 currencyConversion.uptake
,INITIATE AUTHENTICATION 响应会指示 currencyConversion.uptake = NOT_REQUIRED
。
如果付款人接受 DCC 出价,付款人身份验证过程将使用付款人的货币和付款人的金额。 在所有其他情况下,付款人身份验证过程使用订单金额和订单货币。
您可以通过引用身份验证交易 (authentication.transactionId
),在后续付款请求中使用 INITIATE AUTHENTICATION 请求中提供的 DCC 信息。 付款人身份验证期间提交的 DCC 信息适用于您的付款交易。
如果您愿意,您还可以在后续的付款交易中提交与身份验证中相同的 DCC 信息。 但是,如果后续付款交易既引用身份验证交易,又包含与身份验证不同的 DCC 信息,付款交易将被拒绝。
authentication.purpose = REFRESH_AUTHENTICATION
))不支持动态货币兑换。