# 签名验证

XPay 使用 HMAC-SHA256 结合商户公钥对API调用、回调信息进行签名。

以下为数据签名业务描述,以及验证签名的示例。

XPay 对API响应结果中的 data 使用商户公钥作为签名Secret 进行HMAC-SHA256签名

测试公钥:
02d82ba350d6f95e4a6005f9c17d5c0a7dc4c013ed09c4fd04971660f1d0d8c299

API响应内容示例:
{
    "code": 0,
    "data": {
        "symbol": "USDT",
        "buy": 7.2216,
        "sell": 7.10861,
        "timestamp": "1586487661938",
        "legal_currency_min_amount": "100.00",
        "legal_currency_max_amount": "50000.00"
    },
    "msg": "SUCCESS",
    "sign": "RXffyiy07UBkUg3gyb4qJIMmNz/zkPDVVEu3z+6uM2o="
}

//API响应签名,仅对data内容进行签名

签名内容:

buy=7.2216&legal_currency_max_amount=50000.00&legal_currency_min_amount=100.00&sell=7.10861&symbol=USDT&timestamp=1586487661938

签名结果:

RXffyiy07UBkUg3gyb4qJIMmNz/zkPDVVEu3z+6uM2o=

回调内容示例:
{
    "count":96.02194813,
    "created_time":"2020-04-10 10:29:58",
    "currency":"USDT",
    "mobile":"13355558888",
    "merchant_order_no":"51116897781651",
    "merchant_profit":"0.00000000",
    "platform_fee":"0.28806584",
    "side":"BUY",
    "status":"CANCEL",
    "nonce":"1586488141021",
    "sign":"KIovSkDaMlsTsBpt23gXR5YsJuOEYT+clQwKqqZM4fE="
}

//回调结果签名,针对回调内容中所有内容进行签名

签名内容:

count=96.02194813&created_time=2020-04-10%2010%3A29%3A58&currency=USDT&merchant_order_no=51116897781651&merchant_profit=0.00000000&nonce=1586488141021&order_no=undefined&platform_fee=0.28806584&side=BUY&status=CANCEL

签名结果:

KIovSkDaMlsTsBpt23gXR5YsJuOEYT+clQwKqqZM4fE=

!注意:

1,签名的内容,需要按照Key进行排序
2,签名内容中的Value,需要进行Url编码
3,有一些语言中空格会被Url编码成“+”,签名内容中的“+”通过URL编码,需要被转为“%20”