Restful API 说明

REST API 简介

Bibox为用户提供了一套全新的API,可以帮用户快速接入Bibox的交易系统,实现程序化交易。

通过API可以实现以下功能:

  • 市场行情信息查询(K线、深度、实时成交ticker、24小时行情)
  • 账户资产信息查询
  • 下单、撤单操作
  • 订单信息查询

REST API 请求路径

https://api.bibox.com

REST API 签名

使用REST API进行交易、查询资产等操作,需要先申请apikey。

限速策略:对于同一个apikey,api请求限速30次/5秒;对于同一个ip,当一次api请求cmd个数超过15个时,会限速1次/1秒,cmd个数不超过15个不做限速。

申请apikey

设置apikey操作权限

合法请求结构

基于安全考虑,除行情API 外的 API 请求都必须进行签名运算。一个合法的请求由以下几部分组成

  • apikey 您申请的 apikey。
  • 请求方法体 即请求结构中的cmds,REST API支持批量请求,即cmds可包含多个方法体,每个方法体表示一次独立API请求,每个方法体都有一组用于定义 API 调用的必需参数和可选参数。可以在每个方法的说明中查看这些参数及其含义。
  • 签名方法(SignatureMethod) 用户计算签名的基于哈希的协议,此处使用 HmacMD5。
  • 签名 签名计算得出的值,用于确保签名有效和未被篡改。请一定注意:签名是对格式化后的cmds的值进行签名!

例子

{
    "cmds": "[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]",
    "apikey":"5213595xxxxedca0809axxxxxaba7580xxxxxa6",
    "sign":"6a21e39e3f68b6fc2227c4074c7e6a6c" //用您的apisecret签名cmds的结果
}

签名步骤

API 请求在通过 Internet 发送的过程中极有可能被篡改。为了确保请求未被更改,我们会要求用户在每个请求中带上签名(行情 API 除外),来校验参数或参数值在传输途中是否发生了更改。

  1. 规范要计算签名的请求 因为使用 HMAC 进行签名计算时,使用不同内容计算得到的结果会完全不同。所以在进行签名计算前,请先对请求进行规范化处理。下面以查询资产详情请求为例进行说明
{
    "cmds":[
        {
            "cmd":"transfer/assets",
            "body":{
                "select":1
            }
        }
    ],
    "apikey":"",
    "sign":""
}
  1. 格式化cmds
    {
     "cmds": "[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]", //js用 JSON.stringify()进行格式化
     "apikey":"",
     "sign":""
    }
    
  2. 填写您申请的apikey
    {
     "cmds": "[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]",
     "apikey":"5213595xxxxedca0809axxxxxaba7580xxxxxa6",
     "sign":""
    }
    
  3. 使用您申请的apisecret签名cmds
    {
     "cmds": "[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]",
     "apikey":"5213595xxxxedca0809axxxxxaba7580xxxxxa6",
     "sign":"6a21e39e3f68b6fc2227c4074c7e6a6c"
    }
    

计算签名,将以下两个参数传入加密哈希函数:

要进行签名计算的字符串

"[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]"

进行签名的密钥(apisecret)

bxxxxxxxxf1236222xxxxxxxxx6d5d76d5xxxxxxxxx

得到签名计算结果

6a21e39e3f68b6fc2227c4074c7e6a6c

完整签名例子

nodejs实现


let CryptoJS = require("crypto-js");

let apikey = "1e01c22ff8c59e9d98d93423817303f0e7c6d79d"; //your apikey
let secret = "1e01c22ff8c59e9d98d93423817303f098d93423"; //your apikey secret

let param = [
    {
        "cmd": "transfer/assets",
        "body": {
            "select": 1
        }
    }
];
let form = {
    "cmds": JSON.stringify(param), //格式化param
    "apikey": apikey,
    "sign": ""
};

let sign = CryptoJS.HmacMD5(form.cmds, secret).toString();//签名cmds
form.sign = sign;

console.log(form)

输出


{
    "cmds":"[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]",
    "apikey":"1e01c22ff8c59e9d98d93423817303f0e7c6d79d",
    "sign":"86e88a4bc8eedc795b453f121f5894ee"
}

API请求、返回格式说明

Bibox REST API参数规范,支持批量请求,请务必认真阅读。

请求参数

  • 需要apikey的请求格式

    // Request
    {
      "cmds": JSON.stringify([ // 支持批量请求(cmd设置不同,用来区分返回结果)
          {
              "cmd": "orderpending/trade", // 下单
              "index": 1234567,
              "body": {
                  "pair": "BIX_BTC",
                  ... //其他参数
              }
          },
          {
              "cmd": "orderpending/cancelTrade", // 撤单
              "body": {
                  "orders_id": 12345
              }
          }
      ]),
      "apikey": "**************", // 您的apikey
      "sign": "**************" // 用您的apisecret签名(序列化后的)cmds的结果
    }
    
  • 不需要apikey的请求格式

    // Request
    {
      "cmds": JSON.stringify([ // 支持批量请求(cmd设置不同,用来区分返回结果)
          {
              "cmd": "api/ticker", // 请求ticker
              "body": {
                  "pair": "BIX_BTC"
              }
          },
    
          {
              "cmd": "api/depth", // 请求深度
              "body": {
                  "pair": "BIX_BTC",
                  "size": 10,
              }
          }
      ])
    }
    
  • 参数解释

字段 描述
cmds 请求参数封装格式, 数组类型, 使用时必须先序列化,数组中每个元素代表一次独立的API调用
cmd API接口名,请参考API Reference
body cmd对应的请求参数,请参考API_Reference
apikey 系统给您分配的 apikey
sign 使用系统分配给您的 api secret 签名(格式化后的)cmds的结果

结果返回

  • 请求成功返回
{
    "result":[
        {
            "cmd":"api/pairList",
            "result":[
                {
                    "id":1,
                    "pair":"BIX_BTC"
                },
                {
                    "id":2,
                    "pair":"ETH_BTC"
                }
            ]
        }
    ]
}
  • 结果解释
字段 描述
cmd API接口名,请参考API Reference
result(外) 批量请求的返回结果,不保证顺序一致性
result(里) 特定cmd接口对应的返回结果
  • 请求失败返回

    {
      "error":{
          "code":"1000",
          "msg":"something error"
      }
    }
    
  • 结果解释

字段 描述
code 错误码
msg 错误描述
  • 批量请求返回
{
    "result":[
        { //成功
            "cmd":"api/pairList",
            "result":[
                {
                    "id":1,
                    "pair":"BIX_BTC"
                },
                {
                    "id":2,
                    "pair":"ETH_BTC"
                }
            ]
        },
        { //失败
            "cmd":"api/depth",
            "error":{
                "code":"1000",
                "msg":"something error"
            }
        }
    ]
}

请求示例

// Request
let CryptoJS = require("crypto-js");
let request = require("request");

let url = "https://api.bibox.com/v1/transfer";

let apikey = "1e01c22ff8c59e9d98d93423817303f0e7c6d79d"; //your apikey
let secret = "1e01c22ff8c59e9d98d93423817303f098d93423"; //your apikey secret

let param = [
    {
        "cmd": "transfer/assets",
        "body": {
            "select": 1
        }
    }
];
let form = {
    "cmds": JSON.stringify(param), //格式化param
    "apikey": apikey,
    "sign": ""
};

let sign = CryptoJS.HmacMD5(form.cmds, secret).toString();//签名cmds
form.sign = sign;

console.log({url, form})

request.post({url, form }, (error, response, body) => {
    if (!error && response && response.statusCode === 200) {
        try {
            let result = JSON.parse(body);
            console.log(result)
        } catch (error) {
            console.log(error)
        }
    } else {
        console.log(error, response, body);
    }
});

请求参数

{
    "url":"https://api.bibox.com/v1/transfer",
    "form":{
        "cmds":"[{\"cmd\":\"transfer/assets\",\"body\":{\"select\":1}}]",
        "apikey":"1e01c22ff8c59e9d98d93423817303f0e7c6d79d",
        "sign":"86e88a4bc8eedc795b453f121f5894ee"
    }
}

返回结果错误

// Response
{
    "error":{
        "code":"3012",
        "msg":"apikey无效"
    }
}

返回结果正确

// Response
{
    "result":[
        {
            "result":{
                "total_btc":"3.28811692",
                "total_cny":"201875.67",
                "total_usd":"28847.20",
                "assets_list":[
                    {
                        "coin_symbol":"BTC",
                        "BTCValue":"0.21730559",
                        "CNYValue":"13341.59",
                        "USDValue":"1906.46",
                        "balance":"0.21730558",
                        "freeze":"0.00000000"
                    },
                    {
                        "coin_symbol":"BIX",
                        "BTCValue":"0.03018417",
                        "CNYValue":"1853.17",
                        "USDValue":"264.81",
                        "balance":"62.68909999",
                        "freeze":"0.00000000"
                    }
                ]
            },
            "cmd":"transfer/assets"
        }
    ]
}
Copyright © bibox.com 2019 all right reserved,powered by GitbookUpdate Date: 2019-11-12

results matching ""

    No results matching ""