# API 签名认证

XPay 使用 ECDSA 签名进行验证,您在 XPay 开通账户以后,可以在您本地生成公私钥对(参考上方 XPay 提供的例程),如有任何疑问,也可以联系我们的工作人员协助您。XPay 也可以为您提供随机公私钥,本地验证用(但不可用于正式环境)

您可以通过 Web 管理界面录入您的公钥 API Key (可选择类型:仅查询;查询&提现)。 API Secret 请您自己妥善保管,不要透露给任何人,避免资产损失! XPay 强烈建议您绑定您的IP地址白名单以及启用“API回调”中的提现确认

XPay 的 API 请求,除公开的 API 外都需要携带 API key 以及签名

签名前准备的数据如下: HTTP_METHOD + | + HTTP_REQUEST_PATH + | + TIMESTAMP + | + PARAMS 连接完成后,对数据进行 ECDSA 签名,签名后的 bytes进行 Hex 编码,各部分解释如下:

# HTTP HOST

  • Sandbox : https://api-sandbox.xpay.pro
  • Production : https://api.xpay.pro

# HTTP_METHOD

GET, POST 需要大写


# HTTP_REQUEST_PATH

请求URL的PATH部分, 例如https://api-sandbox.xpay.pro/v1/test/ 为 /v1/test/


# NONCE

访问 API 时的 UNIX EPOCH 时间戳 (精确到毫秒)


# PARAMS

如果请求数据为: { "username": "username", "password": "password" }

则先将 key 按照字母排序,然后进行 url 参数化,即: password=password username=username

因为 p 在字母表中的排序在 u 之前,所以 password 要放在 username 之前,然后使用 & 进行连接,即: password=password&username=username

请求参数,POST, GET 都一样,需要把所有参数都拿出来,签名规则如下: 所有请求的 key 按照字母顺序排序,然后进行 url 参数化,并使用 & 连接。


# 完整示例

对于如下的请求:

Method URL Nonce
POST https://api-sandbox.xpay.pro/v1/test/ 1537498830736

参数

Parameter Value
type limit
side buy
amount 100.0
price 100.0
symbol btcusdt

签名前的准备数据如下: POST|/v1/test/|1537498830736|amount=100.0&price=100.0&side=buy&symbol=btcusdt&type=limit

使用您本地生成的 API Key 私钥(API SECRET),对数据使用私钥进行 ECDSA 签名,并对二进制结果进行 Hex 编码, 即生成了用于向 API 服务器进行验证的最终签名

  • BIZ-API-KEY
  • BIZ-API-SIGNATURE
  • BIZ-API-NONCE

将 Api key, nonce和右边生成的 signature 按上面的名称放入Header中, 即可通过签名验证

XPay 验签公钥可以在 “Web 管理界面 - 钱包 - API 回调” 页面获取 (* Sandbox 和 Prod 环境不同)