# 签名验证

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

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

测试公钥:
02ad904d8600b1f7d33823ba54b2f533983659c68c55da075f6d0948e4931625e9

API响应内容示例:
{
    "code": 0,
    "data": {
        "symbol": "USDT",
        "buy": "7.3932",
        "sell": "7.28",
        "timestamp": "1719977971097",
        "legal_currency_min_amount": "99.00",
        "legal_currency_max_amount": "50000.01"
    },
    "msg": "SUCCESS",
    "sign": "lv1G/XTRIXlOpoKb8Ga4FOZOPqTP2i97vRPPe9CwBLk="
}

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

签名内容:

buy=7.3932&legal_currency_max_amount=50000.01&legal_currency_min_amount=99.00&sell=7.28&symbol=USDT&timestamp=1719977971097

签名结果:

lv1G/XTRIXlOpoKb8Ga4FOZOPqTP2i97vRPPe9CwBLk=

回调内容示例:
{
    "count": 685,
    "created_time": "2023-01-13 16:59:21",
    "pass_time": "2023-01-13 17:00:57",
    "currency": "USDT",
    "legal_currency": "CNY",
    "legal_amount": "4818.90000000",
    "merchant_order_no": "61671276113",
    "merchant_profit": "25.75600000",
    "platform_fee": "4.11000000",
    "mobile": "0416878222",
    "side": "BUY",
    "status": "COMPLETE",
    "nonce": "1673604180111",
    "sign": "6ViP5+++dKXRiz9vscnlizgVGMMf33FKgm8kcpw7PnY="
}

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

签名内容:

count=685&created_time=2023-01-13%2016%3A59%3A21&currency=USDT&legal_amount=4818.90000000&legal_currency=CNY&merchant_order_no=61671276113&merchant_profit=25.75600000&mobile=0416878222&nonce=1673604180111&pass_time=2023-01-13%2017%3A00%3A57&platform_fee=4.11000000&side=BUY&status=COMPLETE

签名结果:

6ViP5+++dKXRiz9vscnlizgVGMMf33FKgm8kcpw7PnY=

!注意:

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