跳转到内容

DCC

DCC

动态货币转换 (DCC) 使国外消费者可以选择以当地货币或本国货币进行支付。 您可以使用外汇查询接口获取交易货币与结算货币之间的汇率。

主要流程如下:

  1. 首先您需要调用 POST FXRateInquiry 接口查询消费者使用的卡片是否支持 DCC 功能,在您的请求中需要包含但不限于以下参数,字段详情参考 API 文档:
    • paymentMethod.type:表明支付方式的字段,如果是卡交易则使用 card
    • paymentMethod.card:包含消费者卡信息以及终端信息的结构体。当 paymentMethod.typecard 时必填。
    • 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"
    }
}'
  1. 检查 EVO Cloud 应答中的 FXRateInquiry.status 字段内容。如果字段的值为 Success 则表示消费者使用的卡片支持 DCC 功能,同时您将收到但不限于以下字段,字段详情参考 API 文档:

    • FXRateInquiry.DCCBillingAmount:包含以卡片扣账币种标价的交易金额和交易币种的结构体。
    • FXRateInquiry.DCCBillingFXRate:包含将交易币种转换为扣账币种是用到的汇率信息,其中包含了 Markup。
  2. 然后您需要在调用 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"
    }
}'
  1. 检查 EVO Cloud 应答中的 payment.status 字段内容。如果字段的值为 Captured 则表示交易成功,否则就需要查看 result.code 以及 result.message 来查看交易失败原因。
  2. 如果您没有收到来自 EVO Cloud 的应答报文,则需要您调用 GET Payment 来查询交易结果。当收到查询应答时,您同样也需要通过 payment.status 字段内容来判断交易结果,判断方式与第 2 步一致。如果交易失败,您需要通过 payment.failureCode 以及 payment.failureReason 来查看交易失败原因。
  3. 如果您在请求中上送了 webhook,您也可以通过异步通知来获取交易结果。同样也需要通过 payment.status 字段内容来判断交易结果,判断方式与第 2 步一致。
  4. 向消费者展示付款结果。