DCC
DCC
动态货币转换 (DCC) 使国外消费者可以选择以当地货币或本国货币进行支付。 您可以使用外汇查询接口获取交易货币与结算货币之间的汇率。
主要流程如下:
- 首先您需要调用
POST FXRateInquiry
接口查询消费者使用的卡片是否支持 DCC 功能,在您的请求中需要包含但不限于以下参数,字段详情参考 API 文档:paymentMethod.type
:表明支付方式的字段,如果是卡交易则使用card
。paymentMethod.card
:包含消费者卡信息以及终端信息的结构体。当paymentMethod.type
为card
时必填。transAmount
:以本地币种标价包含交易金额和交易币种的结构体。merchantTransInfo
:包含商户商户订单号的结构体。
DCC 汇率查询请求报文样例
js
curl 'https://bkk-online-uat.everonet.com/g2/v0/payment/acq/10130014/evo.offline.FXRateInquiry' \
-H 'Authorization: 7128d742d70768f76d7ece970cf34e005ca5432425d86e92421778b2646d0fad' \
-H 'DateTime: 20240306120038+0800' \
-H 'SignType: SHA256' \
-H 'Content-Type: application/json' \
-H 'MsgID: M20240306120038749' \
-d '{
"merchantTransInfo": {
"merchantTransID": "T20240306120038749",
"merchantTransTime": "2024-03-06T12:00:38+08:00"
},
"paymentMethod": {
"type": "card",
"card": {
"cardInfo": {
"cardNumber": "4012001037141112"
}
}
},
"transAmount": {
"currency":"HKD",
"value":"1.00"
}
}'
检查 EVO Cloud 应答中的
FXRateInquiry.status
字段内容。如果字段的值为Success
则表示消费者使用的卡片支持 DCC 功能,同时您将收到但不限于以下字段,字段详情参考 API 文档:FXRateInquiry.DCCBillingAmount
:包含以卡片扣账币种标价的交易金额和交易币种的结构体。FXRateInquiry.DCCBillingFXRate
:包含将交易币种转换为扣账币种是用到的汇率信息,其中包含了 Markup。
然后您需要在调用
POST Payment
接口发起支付时额外添加以下字段来表明这是一笔 DCC Payment:origMerchantTransInfo.merchantTransID
:原始汇率查询请求的订单号,需要与您在第 1 步中上送的merchantTransInfo.merchantTransID
字段一致。DCCBillingAmount
:以卡片扣账币种标价的交易金额和交易币种的结构体。金额和币种需要与您在第 2 步中收到的FXRateInquiry.DCCBillingAmount
结构体中的值一致。transAmount
:以本地币种标价包含交易金额和交易币种的结构体。需要与您在第 1 步中上送的transAmount
结构体中的值一致。
Note
消费与预授权交易均支持 DCC 功能。
DCC 消费交易请求报文样例
js
curl 'https://hkg-online-uat.everonet.com/g2/v0/payment/acq/10130014/evo.offline.payment' \
-H 'Authorization: 3e1302773cfac47d4ed6fed4778ca5599e3632718a0a42ddeaeb7018b381fb40' \
-H 'DateTime: 20240306141103+0800' \
-H 'SignType: SHA256' \
-H 'Content-Type: application/json' \
-H 'MsgID: M20240306141103794' \
-d '{
"origMerchantTransInfo":{
"merchantTransID":"T20240306141044528"
},
"DCCBillingAmount":{
"currency":"USD",
"value":"0.12"
},
"merchantTransInfo": {
"merchantTransID": "T20240306141103794",
"merchantTransTime": "2024-03-06T14:11:03+08:00"
},
"paymentMethod": {
"type": "card",
"card": {
"posEntryMode":"manual",
"pinFlag":false,
"termReadability":"5",
"cardInfo": {
"cardNumber": "4012001037141112"
}
}
},
"transAmount": {
"currency":"HKD",
"value":"1.00"
},
"autoCapture": true,
"pspInfo": {
"mcc": "5499",
"sponsorCode": "441378",
"merchantID": "202106305812001",
"terminalID":"00000001",
"merchantName": "Test",
"storeID": "202106305812001",
"storeName": "Test Store",
"street": "Test street",
"city": "MYS",
"postCode": "202000",
"nation": "MYS"
}
}'
- 检查 EVO Cloud 应答中的
payment.status
字段内容。如果字段的值为Captured
则表示交易成功,否则就需要查看result.code
以及result.message
来查看交易失败原因。 - 如果您没有收到来自 EVO Cloud 的应答报文,则需要您调用
GET Payment
来查询交易结果。当收到查询应答时,您同样也需要通过payment.status
字段内容来判断交易结果,判断方式与第 2 步一致。如果交易失败,您需要通过payment.failureCode
以及payment.failureReason
来查看交易失败原因。 - 如果您在请求中上送了
webhook
,您也可以通过异步通知来获取交易结果。同样也需要通过payment.status
字段内容来判断交易结果,判断方式与第 2 步一致。 - 向消费者展示付款结果。