请求的结构:
POST和DELETE请求方式的header:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
timestamp | 是 | string | 当前的时间戳(毫秒级时间戳,不能与服务器时间相差超过1分钟) |
Content-Type | 否 | string | POST请求时必须为application/json |
token | 是 | string | 用户登录返回的token(用的是旧的登录接口,但是会增加返回一个token,与原先的token需要做区分) |
Authorization | 否 | string | 签名,POST请求时必须。签名规则见下文 |
GET请求方式的header
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
timestamp | 是 | string | 当前的时间戳(毫秒级时间戳,不能与服务器时间相差超过1分钟) |
token | 是 | string | 用户登录返回的token(用的是旧的登录接口,但是会增加返回一个token,与原先的token需要做区分) |
body:
POST请求时,body应为json格式数据
签名认证算法:
签名生成规则如下:参与签名的字段包括请求的所有参数。对所有待签名参数(务必先全部小写)按照字段名的ASCII 码从小到大排序(字典序)后,使用键值对的格式(即key1=value1&key2=value2…)拼接成字符串string。这里需要注意的是所有参数名均为小写字符。对string作HMAC-SHA1签名得到string1,然后使用base64编码,最后把它当成Authorization头的值放在header进行传输。(参考阿里云的oss签名方式).
示例: 请求下单接口,自有的API对有: secretkey = “13b8e42848cbd317520bb889086c8978f0ee3358” 那么: 请求的下单参数如下:
"market": "btc_usdt","price": 6800,"number": 100,"types": 1,"multiple": 10
步骤1. 对所有待签名参数先转成全部小写再按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string:
market=btc_usdt&multiple=10&number=100&price=6800&types=1 步骤2. 对string用secretkey进行HMAC-SHA1签名(使用secretkey做密钥),得到字节数组:
步骤3. 对字节数组(不是上面的16进制小写字符串,如果传入是16进制的小写字符串,务必先转成字节数组)进行base64编码等到signature:
/L6HjINoxut/LoN8Tb/uOgsyBfI= 步骤4. 把Authorization的键值对放在header传输: Authorization = signature
最终效果是长这样:
POST /api/open/v1/entrusts HTTP/1.1 timestamp:1577177092465 Authorization: /L6HjINoxut/LoN8Tb/uOgsyBfI= Content-Type: application/json token:7e3f841a77144acfbbf7d13a1d3eb5ab
{ “market”: “btc_usdt”, “price”: 6800, “number”: 100, “types”: 1, “multiple”: 10 } 注意事项
1.timestamp为毫秒级时间戳,而且不能与服务器时间相差超过1分钟。 2.参与签名的字段,务必先转成小写,再进行字典排序。 3.签名的字符串必须为UTF-8编码格式。含有中文字符的签名字符串必须先进行UTF-8编码,再与 accesskey计算最终签名。 4.POST提交数据的编码方式为:application/json(即是Content—Type: application/json)。 5.客户端可以随机加上一些键值对,有助于防止泄露SecretKey的概率,但是参与的话,都需要验签,同时,不能超过20个键值对。
- 备注: 验证工具 https://1024tools.com/hmac