# 签名认证

# 创建API

在对任何请求进行签名之前,您必须通过 BingX 网站【用户中心】-【API管理(专业合约)】创建一个API key。 创建key后,您将获得2个必须记住的信息:

  • API Key
  • Secret Key

API Key 和 Secret Key将由随机生成和提供。

# 请求内容

所有REST请求都必须包含以下参数:

  • API Key作为一个字符串。
  • sign 使用一定算法得出的签名(请参阅签名信息)。
  • timestamp 作为您的请求的时间戳。
  • 所有请求都应该含有application/json类型内容,并且是有效的JSON。

# 签名说明

sign 是对http method,url path,请求参数等按字符串连接之后使用 HMAC SHA256 方法加密而得到的。

  • path 为URL的请求路径,例如: /api/v1/user/getBalance
  • method 是请求方法(POST/GET/PUT/DELETE),字母全部大写。
  • 参数是对 所有参数(含timestamp)按照字典排序之后,按照key1=value1 + key2=value2 ... + Secret Key 字符串(+表示字符串连接)。

originString = method + path + params sign = HmacSHA256(originString)

例如:对于如下的请求参数进行签名

curl "https://api-swap-rest.bingbon.pro/api/v1/user/getBalance"
      
  • 通过POST方式获取获取用户某资产余额信息,以 apiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU, secretKey=UuGuyEGt6ZEkpUObCYCmIfh0elYsZVh80jlYwpJuRZEw70t6vomMH7Sjmf94ztSI 为例
timestamp = 1615272721001
apiKey = Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU
currency = USDT

请求参数按字典排序之后,为

apiKey = Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU
currency = USDT
timestamp = 1615272721001

mothod为POST,path为/api/v1/user/getBalance,生成待签名的参数字符串如下:

paramString = 'apiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU&currency=USDT&timestamp=1615272721001'

按算法生成待签名的字符串

originString = 'POST/api/v1/user/getBalanceapiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU&currency=USDT&timestamp=1615272721001'
  

然后,将待签名字符串添加私钥参数生成最终待签名字符串。

例如:

Signature = HmacSHA256(secretkey, originString)
Signature = Base64Encode(Signature)
Signature = UrlEncode(Signature)

即:
Signature = HmacSHA256("UuGuyEGt6ZEkpUObCYCmIfh0elYsZVh80jlYwpJuRZEw70t6vomMH7Sjmf94ztSI", "POST/api/v1/user/getBalanceapiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU&currency=USDT&timestamp=1616488398013")

echo -n "POST/api/v1/user/getBalanceapiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU&currency=USDT&timestamp=1616488398013" | openssl dgst -sha256 -hmac "UuGuyEGt6ZEkpUObCYCmIfh0elYsZVh80jlYwpJuRZEw70t6vomMH7Sjmf94ztSI" -binary | base64 | xargs python2.7 -c 'import sys, urllib;print(urllib.quote(sys.argv[1]))'

Signature的结果为S7Ok3L5ROXSbYfXj9ryeBbKfRosh9tmH%2FAKiwj7eAoc%3D,则签名之后的url query参数为

apiKey = Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU
currency = USDT
timestamp = 1616488398013
sign = S7Ok3L5ROXSbYfXj9ryeBbKfRosh9tmH%2FAKiwj7eAoc%3D

即最终发送给服务器的API请求应该为:
"https://api-swap-rest.bingbon.pro/api/v1/user/getBalance?apiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU&currency=USDT&timestamp=1616488398013&sign=S7Ok3L5ROXSbYfXj9ryeBbKfRosh9tmH%2FAKiwj7eAoc%3D"

# 请求交互

REST访问的根URL:https://api-swap-rest.bingbon.pro

所有请求基于Https协议,请求头信息中Content-Type 需要统一设置为:'application/json’。

请求交互说明

1、请求参数:根据接口请求参数规定进行参数封装。

2、提交请求参数:将封装好的请求参数通过POST/GET/DELETE等方式提交至服务器。

3、服务器响应:服务器首先对用户请求数据进行参数安全校验,通过校验后根据业务逻辑将响应数据以JSON格式返回给用户。

4、数据处理:对服务器响应数据进行处理。

成功

HTTP状态码200表示成功响应,并可能包含内容。如果响应含有内容,则将显示在相应的返回内容里面。

Last Updated: 2021/12/2 下午2:36:56