WBF交易所API接口文档

介绍

欢迎使用交易所开发者文档

本文档提供了相关API的使用方法介绍。open-api包含了资产余额,获取全部委托,获取全部成交记录等接口,ws-api则提供了K线相关功能接口。


开始使用

REST,即Representational State Transfer的缩写,是一种流行的互联网传输架构。它具有结构清晰、符合标准、易于理解、扩展方便的,正得到越来越多网站的采用。其优点如下:

  • 在RESTful架构中,每一个URL代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP指令,对服务器端资源进行操作,实现“表现层状态转化”。

建议开发者使用REST API进行币币交易或者资产提现等操作。


API接口加密验证

生成API Key

在对任何请求进行签名之前,您必须通过 [交易所]【用户中心】-【API】创建一个API key。 创建key后,您将获得3个必须记住的信息:

  • API Key

  • Secret Key

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

发起请求

所有REST请求都必须包含以下标题:

  • ACCESS-KEY API KEY作为一个字符串。
  • ACCESS-SIGN 使用base64编码签名(请参阅签名消息)。
  • ACCESS-TIMESTAMP 作为您的请求的时间戳。
  • 所有请求都应该含有application/json类型内容,并且是有效的JSON。

签名

生成待签名的字符串

1、先将参数以其参数名的字典序升序进行排序

2、遍历排序后的字典,将所有参数按"keyvalue"格式拼接在一起(非空参数)

3、使用MD5对待签名串求签

例:

api_key = 1234567

time = 12312312312137

secret_key = 789654

sign=md5(api_key1234567time12312312312137789654)

请求交互

REST访问的根URL:https://openapi.wbf.info

请求

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

请求交互说明

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

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

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

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

成功

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

常见错误码

  • 400 Bad Request – Invalid request forma 请求格式无效

  • 401 Unauthorized – Invalid API Key 无效的API Key

  • 403 Forbidden – You do not have access to the requested resource 请求无权限

  • 404 Not Found 没有找到请求

  • 429 Too Many Requests 请求太频繁被系统限流

  • 500 Internal Server Error – We had a problem with our server 服务器内部错误

如果失败,response body 带有错误描述信息

分页

部分返回数据集的REST请求支持使用游标分页。 游标分页允许在结果的当前页面之前和之后获取结果,并且非常适合于实时数据。根据当前的返回结果,后续请求可以在此基础之上指定请求数据的方向,可以请求在这之前和之后的数据。before和after游标可通过响应头CB_BEFORE和CB_AFTER使用。

例子

GET /orders?before=2&limit=30

标准规范

时间戳

除非另外指定,API中的所有时间戳均以微秒为单位返回。

请求签名中的ACCESS-TIMESTAMP的单位是秒,允许用小数表示更精确的时间。请求的时间戳必须在API服务时间的30秒内,否则请求将被视为过期并被拒绝。如果本地服务器时间和API服务器时间之间存在较大的偏差,那么我们建议您使用通过查询API服务器时间来更新http header。

例子

1524801032573

数字

为了保持跨平台时精度的完整性,十进制数字作为字符串返回。建议您在发起请求时也将数字转换为字符串以避免截断和精度错误。

整数(如交易编号和顺序)不加引号。

限流

如果请求过于频繁系统将自动限制请求,并在http header中返回429 too many requests状态码。

REST API

  • 公共接口:我们通过IP限制公共接口的调用:每2秒最多6个请求。

  • 私人接口:我们通过用户ID限制私人接口的调用:每2秒最多6个请求。

  • 某些接口的特殊限制在具体的接口上注明


业务API参考

open-api

资产余额

  1. 接口地址: /open/api/user/account
  2. 接口说明: (get请求)资产余额
参数 填写类型 说明
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data {
"total_asset":432323.23,
"coin_list":[
{"coin":"btc","normal":32323.233,"locked":32323.233,"btcValuatin":112.33},
{"coin":"ltc","normal":32323.233,"locked":32323.233,"btcValuatin":112.33},
{"coin":"bch","normal":32323.233,"locked":32323.233,"btcValuatin":112.33},
]
}
total_asset:总资产
normal:余额账户
locked:冻结账户
btcValuatin:BTC估值

获取全部委托

  1. 接口地址:/open/api/v2/all_order
  2. 接口说明:(get请求)获取全部委托
  • 旧接口 /open/api/all_order 仍保留,但已经不建议使用

  • v2版本变化: 去掉了结果返回值中的tradeList成交记录,提升效率;如果需要单一订单的成交信息,可以使用 /open/api/order_info 接口单独去查

参数 填写类型 说明
symbol 必填 市场标记,btcusdt,详情看下面
startDate 选填 (新增)开始时间,精确到秒“yyyy-MM-dd mm:hh:ss”
endDate 选填 (新增)结束时间,精确到秒“yyyy-MM-dd mm:hh:ss”
pageSize 选填 页面大小
page 选填 页码
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
{
    "count":10,
    "orderList":[
        {
            "side":"BUY",
            "total_price":"0.10000000",
            "created_at":1510993841000,
            "avg_price":"0.10000000",
            "countCoin":"btc",
            "source":1,
            "type":1,
            "side_msg":"买入",
            "volume":"1.000",
            "price":"0.10000000",
            "source_msg":"WEB",
            "status_msg":"完全成交",
            "deal_volume":"1.00000000",
            "id":424,
            "remain_volume":"0.00000000",
            "baseCoin":"eth",
            "status":2
        },
        {
            "side":"SELL",
            "total_price":"0.09900000",
            "created_at":1510993715000,
            "avg_price":"0.10000000",
            "countCoin":"btc",
            "source":1,
            "type":1,
            "side_msg":"卖出",
            "volume":"1.000",
            "price":"0.09900000",
            "source_msg":"WEB",
            "status_msg":"完全成交",
            "deal_volume":"1.00000000",
            "id":423,
            "remain_volume":"0.00000000",
            "baseCoin":"eth",
            "status":2
        }
    ]
}
虚拟币编号 xxx-cny xxx-btc xxx-usdt
btc btccny - btcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt
bcc bcccny bccbtc bccusdt
etc etccny etcbtc etcusdt
usdt usdtcny - -

获取全部成交记录

  1. 接口地址:/open/api/all_trade
  2. 接口说明:(get请求)获取全部成交记录
参数 填写类型 说明
symbol 必填 市场标记,btcusdt,详情看下面
startDate 选填 (新增)开始时间,精确到秒“yyyy-MM-dd HH:mm:ss”
endDate 选填 (新增)结束时间,精确到秒“yyyy-MM-dd HH:mm:ss”
pageSize 选填 页面大小
page 选填 页码
api_key 必填 api_key
time 必填 时间戳
sort 选填 1表示倒序
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
{
    "count":22,
    "resultList":[
        {
            "volume":"1.000",
            "side":"BUY",
            "feeCoin":"YLB",
            "price":"0.10000000",
            "fee":"0.16431104",
            "ctime":1510996571195,
            "deal_price":"0.10000000",
            "id":306,
            "type":"买入",
            "bid_id":1001,
            "ask_id":1002,
            "bid_user_id":10001,
            "ask_user_id":10001
 
        },
        {
            "volume":"0.850",
            "side":"BUY",
            "feeCoin":"YLB",
            "price":"0.10000000",
            "fee":"0.13966438",
            "ctime":1510996571190,
            "deal_price":"0.08500000",
            "id":305,
            "type":"买入",
            "bid_id":1001,
            "ask_id":1002,
            "bid_user_id":10001,
            "ask_user_id":10001
        },
        {
            "volume":"0.010",
            "side":"BUY",
            "feeCoin":"YLB",
            "price":"0.10000000",
            "fee":"0.00164311",
            "ctime":1510995560344,
            "deal_price":"0.00100000",
            "id":291,
            "type":"买入",
            "bid_id":1001,
            "ask_id":1002,
            "bid_user_id":10001,
            "ask_user_id":10001
        }
    ]
}
虚拟币编号 xxx-cny xxx-btc xxx-usdt
btc btccny - btcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt
bcc bcccny bccbtc bccusdt
etc etccny etcbtc etcusdt
usdt usdtcny - -

取消委托单

  1. 接口地址:/open/api/cancel_order
  2. 接口说明:(post请求)取消委托单
参数 填写类型 说明
order_id 必填 订单ID
symbol 必填 市场标记,ethbtc,详情看下面
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data “”  
虚拟币编号 xxx-cny(xxx101) xxx-btc(xxx201)
btc btccny -
eth ethcny ethbtc
ltc ltccny ltcbtc
bcc bcccny bccbtc
etc etccny etcbtc

根据币对取消全部委托单

  1. 接口地址:/open/api/cancel_order_all
  2. 接口说明:(post请求)根据币对取消全部委托单(最多取消两千条,多余两千请循环撤销)
参数 填写类型 说明
symbol 必填 市场标记,ethbtc,详情看下面
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data “”  
虚拟币编号 xxx-cny(xxx101) xxx-btc(xxx201)
btc btccny -
eth ethcny ethbtc
ltc ltccny ltcbtc
bcc bcccny bccbtc
etc etccny etcbtc

创建订单

  1. 接口地址:/open/api/create_order
  2. 接口说明:(post请求)创建订单
参数 填写类型 说明
side 必填 买卖方向BUY、SELL
type 必填 挂单类型,1:限价委托、2:市价委托
volume 必填 购买数量(多义,复用字段)
type=1:表示买卖数量
type=2:买则表示总价格,卖表示总个数
买卖限制user/me-用户信息
price 选填 委托单价:type=2:不需要此参数
symbol 必填 市场标记,ethbtc
fee_is_user_exchange_coin 选填 (冗余字段,忽略)0,当交易所有平台币时,此参数表示是否使用用平台币支付手续费,0否,1是
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data {"order_id":34343} 成功返回交易ID
虚拟币编号 xxx-cny(xxx101) xxx-btc(xxx201)
btc btccny -
eth ethcny ethbtc
ltc ltccny ltcbtc
bcc bcccny bccbtc
etc etccny etcbtc

获取所有交易对行情

  1. 接口地址:/open/api/get_allticker
  2. 接口说明:(get请求)获取所有交易对行情
  • 该接口不进行签名校验
  • 参数:无
字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下: 返回值说明
date: 返回数据时服务器时间
symbol: 交易对(交易对1(base)简称_交易对2(quote)简称)
buy: 买一价
high: 最高价
last: 最新成交价
low: 最低价
sell: 卖一价
vol: 成交量(最近的24小时)
rose:涨跌幅
{
   "date": 1534335607859,
   "ticker": [
     {
       "symbol": "btcusdt",
       "high": 7408.35984546,
       "vol": 0.01,
       "last": 1,
       "low": 7408.35984546,
       "buy": "3700.00000000",
       "sell": "7408.35984546",
       "rose": 0
     },
     {
       "symbol": "ethusdt",
       "high": 535.96,
       "vol": 6366.8591,
       "last": 20,
       "low": 279.57,
       "rose": -0.44564773
     },
     {
       "symbol": "bchusdt",
       "high": 12,
       "vol": 100,
       "last": 1,
       "low": 12,
       "buy": "11.00",
       "sell": "9.00",
       "rose": 0
     },
     {
       "symbol": "ethbtc",
       "high": 1,
       "vol": 281261,
       "last": 0.1,
       "low": 0.044039,
       "buy": "0.044049",
       "sell": "0.044049",
       "rose": -0.00022701
     },
     {
       "symbol": "nobbtc",
       "high": 0.007419,
       "vol": 1998,
       "last": 1,
       "low": 0.007419,
       "sell": "0.00741900",
       "rose": 0
     },
     {
       "symbol": "ltceth",
       "last": 0.18519949,
       "buy": "1.00000000",
       "sell": "0.18328001"
     }
   ]
 }

获取K线数据

  1. 接口地址:/open/api/get_records
  2. 接口说明:(get请求)获取K线数据
  • 该接口不进行签名校验
参数 填写类型 说明
symbol 必填 市场标记,bchbtc,详情看下面
period 必填 单位为分钟,比喻1分钟则为1,一天则为1440
虚拟币编号 xxx-cny xxx-btc xxx-usdt
bch bcccny bchbtc bchusdt
btc btccny - btcusdt
etc etccny etcbtc etcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
[
        [
            1514445780,  //时间戳
            1.12,        //开盘价
            1.12,        //最高
            1.12,        //最低
            1.12,        //收盘价
            0            //成交量
        ],
        [
            1514445840,
            1.12,
            1.12,
            1.12,
            1.12,
            0
        ],
        [
            1514445900,
            1.12,
            1.12,
            1.12,
            1.12,
            0
        ]
]

获取当前行情

  1. 接口地址:/open/api/get_ticker
  2. 接口说明:(get请求)获取当前行情
  • 该接口不进行签名校验
参数 填写类型 说明
symbol 必填 市场标记,btcusdt,详情看下面

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
{
    "high": 1,//最高值
    "vol": 10232.26315789,//交易量
    "last": 173.60263169,//最新成交价
    "low": 0.01,//最低值
    "buy": "0.01000000",//买一价
    "sell": "1.12345680",//卖一价
    "rose": -0.44564773,//涨跌幅
    "time": 1514448473626
}
虚拟币编号 xxx-cny xxx-btc xxx-usdt
bcc bcccny bccbtc bccusdt
btc btccny - btcusdt
etc etccny etcbtc etcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt

获取行情成交记录

  1. 接口地址:/open/api/get_trades
  2. 接口说明:(get请求)获取行情成交记录
  • 该接口不进行签名校验
参数 填写类型 说明
symbol 必填 市场标记,bchbtc,详情看下面

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
[
        {
            "amount": 0.55,//成交量
            "price": 0.18519949,//成交价
            "id": 447121,
            "type": "buy"//买卖type,买为buy,买sell
        },
        {
            "amount": 16.45,
            "price": 0.18335468,
            "id": 447120,
            "type": "buy"
        },
        {
            "amount": 2,
            "price": 0.18335468,
            "id": 447119,
            "type": "buy"
        },
        {
            "amount": 2.92,
            "price": 0.183324003,
            "id": 447118,
            "type": "sell"
        }
]
虚拟币编号 xxx-cny xxx-btc xxx-usdt
bch bcccny bchbtc bchusdt
btc btccny - btcusdt
etc etccny etcbtc etcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt

获取各个币对的最新成交价

  1. 接口地址:/open/api/market
  2. 接口说明:(get请求)获取各个币对的最新成交价
参数 填写类型 说明
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data {"btcusdt":15000,"ethusdt":800}  
虚拟币编号 xxx-cny xxx-btc xxx-usdt
btc btccny - btcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt
bcc bcccny bccbtc bccusdt
etc etccny etcbtc etcusdt

查询买卖盘深度

  1. 接口地址:/open/api/market_dept
  2. 接口说明:(get请求)查询买卖盘深度
  • 该接口不进行签名校验
参数 填写类型 说明
symbol 必填 市场标记,ethbtc,详情看下面
type 必填 深度类型,step0, step1, step2(合并深度0-2);step0时,精度最高

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
{  
    "tick":{
        "asks":[//卖盘
            {22112.22,0.9332},
            {22112.21,0.2},
            {22112.21,0.2},
            {22112.21,0.2},
            {22112.21,0.2},
        ],
        "bids":[//买盘
            {22111.22,0.9332},
            {22111.21,0.2},
            {22112.21,0.2},
            {22112.21,0.2},
            {22112.21,0.2},
        ]
    }
}

批量下单,同时批量撤回指定订单

  1. 接口地址:/open/api/mass_replace
  2. 接口说明:(post请求)批量下单,同时批量撤回指定订单
  • mass_place是需要发送到系统的一批限价订单,每次最多100条
  • mass_cancel是需要撤回的一批订单,每次最多100条
参数 填写类型 说明
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名
symbol 必填 币种 ,例 btcusdt
mass_cancel 选填 [1234,234....] 撤单参数,订单id
mass_place 选填 [{side:"BUY",type:"1",volume:"0.01",price:"6400",fee_is_user_exchange_coin:"0"}, {}, …]
含义:
symbol:币种,例btcusdt
mass_place:下单参数。side:方向(买卖方向BUY、SELL),
--------------------------------type:类型(1:限价委托、2:市价委托)
--------------------------------volume:购买数量(多义,复用字段) type=1:表示买卖数量type=2:买则表示总价格,卖表示总个数
--------------------------------price:委托单价:type=2:不需要此参数
--------------------------------fee_is_user_exchange_coin:(冗余字段)当交易所有平台币时,此参数表示是否使用用平台币支付手续费,0否,1是

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data "mass_place": [{"order_id":"1234","code":"0", "msg":"suc"},...]
"mass_cancel": [{"order_id":"1234","code":"0", "msg":"suc"},.......]
下单返回:订单id,状态码,成功或失败信息。
撤单返回:订单id,状态码,成功或失败信息
0表示成功。

批量下单,同时批量撤回指定订单-V2

  1. 接口地址:/open/api/mass_replaceV2
  2. 接口说明:(post请求)批量下单,同时批量撤回指定订单
  • mass_place是需要发送到系统的一批限价订单,每次最多1000条

  • mass_cancel是需要撤回的一批订单,每次最多1000条

参数 填写类型 说明
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名
symbol 必填 币种 ,例 btcusdt
mass_cancel 选填 [1234,234....] 撤单参数,订单id
mass_place 选填 [{side:"BUY",type:"1",volume:"0.01",price:"6400",fee_is_user_exchange_coin:"0"}, {}, …]
含义:
symbol:币种,例btcusdt
mass_place:下单参数-->side:方向(买卖方向BUY、SELL),
--------------------------------type:类型(1:限价委托、2:市价委托)
--------------------------------volume:购买数量(多义,复用字段) type=1:表示买卖数量type=2:买则表示总价格,卖表示总个数
--------------------------------price:委托单价:type=2:不需要此参数
--------------------------------fee_is_user_exchange_coin:(冗余字段)当交易所有平台币时,此参数表示是否使用用平台币支付手续费,0否,1是

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data "mass_place": [{"msg": "Success","code": "0","order_id": [504,505]},{"msg": "Order cancellation failed","code": "8","order_id": [504,505]}]
"mass_cancel": [{"msg": "Success","code": "0","order_id": [572,573,574,626,629]}]
下单返回:订单id,状态码,成功或失败信息。
撤单返回:订单id,状态码,成功或失败信息
0表示成功。

获取当前委托

  1. 接口地址:/open/api/v2/new_order
  2. 接口说明:(get请求)获取当前委托(包括未成交和正在成交的委托)
  • 旧接口 /open/api/new_order 仍保留,但已经不建议使用

  • v2版本变化: 去掉了结果返回值中的tradeList成交记录,提升效率;如果需要单一订单的成交信息,可以使用 /open/api/order_info 接口单独去查

参数 填写类型 说明
symbo l 必填 市场标记,btcusdt,详情看下面
pageSize 选填 页面大小
page 选填 页码
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下: 订单状态(status)说明:
INIT(0,"初始订单,未成交未进入盘口"),
NEW_(1,"新订单,未成交进入盘口"),
FILLED(2,"完全成交"),
PART_FILLED(3,"部分成交"),
CANCELED(4,"已撤单"),
PENDING_CANCEL(5,"待撤单"),
EXPIRED(6,"异常订单");
{
    "count":10,
    "resultList":[
        {
            "side":"BUY",
            "total_price":"0.10000000",
            "created_at":1510993841000,
            "avg_price":"0.10000000",
            "countCoin":"btc",
            "source":1,
            "type":1,
            "side_msg":"买入",
            "volume":"1.000",
            "price":"0.10000000",
            "source_msg":"WEB",
            "status_msg":"完全成交",
            "deal_volume":"1.00000000",
            "id":424,
            "remain_volume":"0.00000000",
            "baseCoin":"eth",
            "status":2
        },
        {
            "side":"SELL",
            "total_price":"0.09900000",
            "created_at":1510993715000,
            "avg_price":"0.10000000",
            "countCoin":"btc",
            "source":1,
            "type":1,
            "side_msg":"卖出",
            "volume":"1.000",
            "price":"0.09900000",
            "source_msg":"WEB",
            "status_msg":"完全成交",
            "deal_volume":"1.00000000",
            "id":423,
            "remain_volume":"0.00000000",
            "baseCoin":"eth",
            "status":2
        }
    ]
}
虚拟币编号 xxx-cny xxx-btc xxx-usdt
btc btccny - btcusdt
eth ethcny ethbtc ethusdt
ltc ltccny ltcbtc ltcusdt
bcc bcccny bccbtc bccusdt
etc etccny etcbtc etcusdt
usdt usdtcny - -/web/new_order-获取当前委托

获取订单详情

  1. 接口地址:/open/api/order_info
  2. 接口说明:(get请求)获取订单详情
参数 填写类型 说明
order_id 必填 订单ID
symbol 必填 市场标记,ethbtc,详情看下面
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下:  
{
    "order_info":{
        "id":343,
        "side":"sell",
        "side_msg":"卖出",
        "created_at":"09-22 12:22",
        "price":222.33,
        "volume":222.33,
        "deal_volume":222.33,
        "total_price":222.33,
        "fee":222.33,
        "avg_price":222.33}
    }
    "trade_list":[
        {
            "id":343,
            "created_at":"09-22 12:22",
            "price":222.33,
            "volume":222.33,
            "deal_price":222.33,
            "fee":222.33
        },
        {
            "id":345,
            "created_at":"09-22 12:22",
            "price":222.33,
            "volume":222.33,
            "deal_price":222.33,
            "fee":222.33
        }
    ]
}

查询系统支持的所有交易对及精度

  1. 接口地址:/open/api/common/symbols
  2. 接口说明:(get请求)查询系统支持的所有交易对及精度
  • 参数:无

返回值:

字段 实例 解释
code 0  
msg "suc" code>0失败
data 如下: symbol 交易对
base_coin 基础币种
count_coin 计价货币
price_precision 价格精度位数(0为个位)
amount_precision 数量精度位数(0为个位)
{
"code": "0",
"msg": "suc",
"data": [
{
"symbol": "ethbtc",
"count_coin": "btc",
"amount_precision": 3,
"base_coin": "eth",
"price_precision": 8
},
{
"symbol": "ltcbtc",
"count_coin": "btc",
"amount_precision": 2,
"base_coin": "ltc",
"price_precision": 8
},
{
"symbol": "bchbtc",
"count_coin": "btc",
"amount_precision": 3,
"base_coin": "bch",
"price_precision": 8
},
{
"symbol": "etcbtc",
"count_coin": "btc",
"amount_precision": 2,
"base_coin": "etc",
"price_precision": 8
},
{
"symbol": "ltceth",
"count_coin": "eth",
"amount_precision": 2,
"base_coin": "ltc",
"price_precision": 8
},
{
"symbol": "etceth",
"count_coin": "eth",
"amount_precision": 2,
"base_coin": "etc",
"price_precision": 8
}
]
}

获取用户资产以及充值记录

  1. 接口地址:/open/api/user_balance_info
  2. 接口说明:(post请求)获取用户资产以及充值记录
参数 填写类型 说明
uid 选填 用户uid(用户uid,mobile_number,email三者必须填其中一个)
mobile_number 选填 查询的用户号码,手机号码或者邮箱
email 选填 用户邮箱
api_key 必填 api_key
time 必填 时间戳
sign 必填 签名

返回值:

字段 实例 解释
code 0 “0” - > 成功
“100004” ->参数不合法
“100005” -> 签名错误
“100007” -> 非法IP
"110032" -> 用户无查询权限
“110020” -> 要查询的用户不存在
msg "suc" code>0失败
data 如下: balance_info 各个币种的资产信息
deposit_list 充值的流水信息
{
"balance_info":[
    {
        "symbol":"BTC",
        "balance":124.12
    },...
],
"deposit_list":[
    {
        "uid":17203,
        "symbol":"BTC",
        "fee":0.00005,
        "amount":12.02,
        "created_at":"2018-11-14 15:37:51"
    },...
]
}

ws-api


订阅-K线行情

  • 请求:
{"event":"sub","params":{"channel":"market_$base$quote_kline_[1min/5min/15min/30min/60min/1day/1week/1month]","cb_id":"自定义"}}
  • 返回订阅状态1次:
{"event_rep":"subed","channel":"market_$base$quote_kline_[1min/5min/15min/30min/60min/1day/1week/1month]","cb_id":"原路返回","ts":1506584998239,"status":"ok"}
  • 持续返回订阅消息:
{
    "channel":"market_$base$quote_kline_[1min/5min/15min/30min/60min/1day/1week/1month]",//订阅的交易对行情$base$quote表示btckrw等
    "ts":1506584998239,//请求时间
    "tick":{
        "id":1506602880,//时间刻度起始值
        "amount":123.1221,//交易额
        "vol":1212.12211,//交易量
        "open":2233.22,//开盘价
        "close":1221.11,//收盘价
        "high":22322.22,//最高价
        "low":2321.22//最低价
    }
}

订阅-前24小时行情

  • 请求:
{"event":"sub","params":{"channel":"market_$base$quote_ticker","cb_id":"自定义"}}
  • 返回订阅状态1次:
{"event_rep":"subed","channel":"market_$base$quote_ticker","cb_id":"原路返回","ts":1506584998239,"status":"ok","lower_frame":"0"} // lower_frame: 0 币对没下架、 1 币对下架

  • 持续返回订阅消息:
{
    "channel":"market_$base$quote_ticker",//订阅的交易对行情$base$quote表示btckrw等
    "ts":1506584998239,//请求时间
    "tick":{
        "id":1506584998,//冗余,无实际意义,时间戳
        "amount":123.1221,//交易额
        "vol":1212.12211,//交易量
        "open":2233.22,//开盘价
        "close":1221.11,//收盘价
        "high":22322.22,//最高价
        "low":2321.22,//最低价
        "rose":-0.2922,//涨幅
        "ts":1506584998239,//数据产生时间
        "lower_frame":"0"
    }
}

订阅-深度盘口(高频)

  • 请求:
{"event":"sub","params":{"channel":"market_$base$quote_depth_step[0-2]","cb_id":"自定义","asks":150,"bids":150}}
  • 返回订阅状态1次:
{"event_rep":"subed","channel":"market_$base$quote_depth_step[0-2]","cb_id":"原路返回","asks":150,"bids":150,"ts":1506584998239,"status":"ok"}
  • 注:第一次订阅成功会立刻返回一次全量数据, 另外server也会定期推个全量数据给前端 避免数据出问题

  • 全量:前端直接替换原有盘口

{
    "channel":"market_$base$quote_depth_step[0-2]",//$base$quote表示btckrw等,深度有3个维度,0、1、2
    "ts":1506584998239,//请求时间
    "tick":{
        "asks":[//卖盘
            [22112.22,0.9332],
            [22112.21,0.2],
        ],
        "buys":[//买盘
            [22111.22,0.9332],
            [22111.21,0.2],
        ]
    }
}
  • 注: 增量盘口信息 前端只需要替换价格对应的数量即可, volume=0时删除, price与原有盘口某个价格段的price相等时更新volume, 新的price直接新增

  • 增量盘口信息(该盘口变化的价格段)

{
    "channel":"market_$base$quote_depth_step[0-2]",//$base$quote表示btckrw等,深度有3个维度,0、1、2
    "ts":1506584998239,//请求时间
    "tick":{
        "side": "asks", 买卖盘方向  asks: 卖盘  buys: 买盘  
        "price" : 133.55,  盘口对应的某个价格段
        "volume" : 44.22   价格段对应的数量
    }
}

订阅-深度盘口

  • 请求:
{"event":"sub","params":{"channel":"market_$base$quote_depth_step[0-2]","cb_id":"自定义","asks":150,"bids":150}}
  • 返回订阅状态1次:
{"event_rep":"subed","channel":"market_$base$quote_depth_step[0-2]","cb_id":"原路返回","asks":150,"bids":150,"ts":1506584998239,"status":"ok"}
  • 持续返回订阅消息:
{
    "channel":"market_$base$quote_depth_step[0-2]",//$base$quote表示btckrw等,深度有3个维度,0、1、2
    "ts":1506584998239,//请求时间
    "tick":{
        "asks":[//卖盘
            [22112.22,0.9332],
            [22112.21,0.2]
        ],
        "buys":[//买盘
            [22111.22,0.9332],
            [22111.21,0.2]
        ]
    }
}

订阅-实时成交信息

  • 请求:
{"event":"sub","params":{"channel":"market_$base$quote_trade_ticker","cb_id":"自定义"}}
  • 返回订阅状态1次:
{"event_rep":"subed","channel":"market_$base$quote_trade_ticker","cb_id":"原路返回","ts":1506584998239,"status":"ok"}
  • 持续返回订阅消息:
{
    "channel":"market_$base$quote_trade_ticker",//订阅的交易对行情$base$quote表示btckrw等
    "ts":1506584998239,//请求时间
    "tick":{
        "id":12121,//data中最大交易ID
        "ts":1506584998239,//data中最大时间
        "data":[
            {
                "id":12121,//交易ID
                "side":"buy",//买卖方向buy,sell
                "price":32.233,//单价
                "vol":232,//数量
                "amount":323,//总额
                "ts":1506584998239,//数据产生时间
                "ds":'2017-09-10 23:12:21'
            },
            {
                "id":12120,//交易ID
                "side":"buy",//买卖方向buy,sell
                "price":32.233,//单价
                "vol":232,//数量
                "amount":323,//总额
                "ts":1506584998239,//数据产生时间
                "ds":'2017-09-10 23:12:21'
            }
        ]
    }
}

请求-K线历史数据

  • 增加请求参数endIdx,pageSize(最多300,默认300条数据),如果endIdx为空,则返回最近300条历史数据

  • 请求:

{"event":"req","params":{"channel":"market_$base$quote_kline_[1min/5min/15min/30min/60min/1day/1week/1month]","cb_id":"自定义","since":"1506602880"}}//since缺省时返回最新300条,有值时返回大于since的最多1小时数据,since有强校验,不能早于当前1小时  since取到59
  • 返回一次历史数据:
{
    "event_rep":"rep","channel":"market_$base$quote_kline_[1min/5min/15min/30min/60min/1day/1week/1month]","cb_id":"原路返回",
    "since":"1506602880",//since缺省时返回最新300条,有值时返回大于since的最多1小时数据,since有强校验,不能早于当前1小时
    "ts":1506584998239,//请求时间
    "data":[//300条
        {
            "id":1506602880,//时间刻度起始值
            "amount":123.1221,//交易额
            "vol":1212.12211,//交易量
            "open":2233.22,//开盘价
            "close":1221.11,//收盘价
            "high":22322.22,//最高价
            "low":2321.22//最低价
        },
        {
            "id":1506602880,//时间刻度起始值
            "amount":123.1221,//交易额
            "vol":1212.12211,//交易量
            "open":2233.22,//开盘价
            "close":1221.11,//收盘价
            "high":22322.22,//最高价
            "low":2321.22//最低价
        }
    ]
}

请求-成交历史数据

  • 请求:
{"event":"req","params":{"channel":"market_$base$quote_trade_ticker","cb_id":"自定义","top":200}}
  • 直接返回成交信息:
{
    "event_rep":"rep","channel":"market_$base$quote_trade_ticker","cb_id":"原路返回","ts":1506584998239,"status":"ok",
    "top":200,//最大支持200
    "data":[
        {
            "id":12121,//交易ID
            "side":"buy",//买卖方向buy,sell
            "price":32.233,//单价
            "vol":232,//数量
            "amount":323,//总额
            "ts":1506584998239//数据产生时间
        },
        {
            "id":12120,//交易ID
            "side":"buy",//买卖方向buy,sell
            "price":32.233,//单价
            "vol":232,//数量
            "amount":323,//总额
            "ts":1506584998239,//数据产生时间
            "ds":'2017-09-10 23:12:21'
        }
    ]
}

请求-首页24行情数据

  • 请求方式:
{"event":"req","params":{"channel":"review"}}
  • 返回数据示例:
{
   event_rep: "rep",
   channel: "review",
   data: {
          bchbtc:  {amount: "115.968833484"close: "0.07956"high: "0.086323"low: "0.079251"open: "0.086323"rose: "-0.07834528"vol: "1393.247"}
          bchusdt: {amount: "416316.164145661", close: "513.56", high: "556.42", low: "510.85", open: "555.71", …}
          btcusdt: {amount: "999341.34124", close: "6450.18", high: "6486.39", low: "6359.63", open: "6435.79", …}
   }
}

open-api Demo(java)


package com.exchange.stats.action;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.io.IOUtils;

public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
/** 4个变量,api_key,secret_key */ 
 String api_key = "9750*****************65d1";
 String secret_key = "1c16******************2982";

        /** 封装需要签名的参数 */
        TreeMap params = new TreeMap();
        params.put("api_key", api_key);
        params.put("time", new Date().getTime() + "");
        /** 拼接签名字符串,md5签名 */
        StringBuilder result = new StringBuilder();
        Set> entrys = params.entrySet();
        for (Entry param : entrys) {
            /** 去掉签名字段 */
            if (param.getKey().equals("sign")) {
                continue;
            }https://openapi.wbf.info 

            /** 空参数不参与签名 */
            if (param.getValue() != null) {
                result.append(param.getKey());
                result.append(param.getValue().toString());
            }
        }
        result.append(secret_key);
        String sign = getMD5(result.toString());
        params.put("sign", sign);

        /** http请求 */
        String resultJson = get("https://openapi.wbfex.com/open/api/get_trades?symbol=btcusdt", params);
        System.out.println(resultJson);
    }

    /**
     * 通过post来提交数据,带参数的方法
     *
     * @param url    请求地址
     * @param params 参数
     * @return
     */
    public static String post(String url, Map params) {
        String str = null;
        try {
            HttpClient client = new HttpClient();
            PostMethod method = new PostMethod(url);
            //设定请求头的样式 
            method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
            if (params != null && params.size() > 0) {
                for (Map.Entry entry : params.entrySet()) {
                    method.setParameter(entry.getKey(), entry.getValue());
                }
            }
            int code = client.executeMethod(method);
            if (code >= 200 && code < 300) {
                InputStream in = method.getResponseBodyAsStream();
                str = IOUtils.toString(in);
            }
        } catch (Exception e) {
// TODO Auto-generated catch block 
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 通过get来提交数据,带参数的方法
     *
     * @param url    请求地址
     * @param params 参数
     * @return
     */
    public static String get(String url, Map params) {
        String str = null;
        try {
            if (params != null && params.size() > 0) {
                int x = 1;
                for (Map.Entry entry : params.entrySet()) {
                    if (x == 1) {
                        url = url + "?";
                    } else {
                        url = url + "&";
                    }
                    url += entry.getKey() + "=" + entry.getValue();
                    x++;
                }
            }
            HttpClient client = new HttpClient();
            System.out.println("url:::" + url);
            GetMethod method = new GetMethod(url);
            //设定请求头的样式 
            method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
            int code = client.executeMethod(method);
            if (code >= 200 && code < 300) {
                InputStream in = method.getResponseBodyAsStream();
                str = IOUtils.toString(in);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block 
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 获取String的MD5值
     *
     * @param info 字符串
     * @return 该字符串的MD5值
     */
    public static String getMD5(String info) {
        try {
            //获取 MessageDigest 对象,参数为 MD5 字符串,表示这是一个 MD5 算法(其他还有 SHA1 算法等): 
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            
            //update(byte[])方法,输入原数据 
            //类似StringBuilder对象的append()方法,追加模式,属于一个累计更改的过程 
            md5.update(info.getBytes("UTF-8"));
            
            //digest()被调用后,MessageDigest对象就被重置,即不能连续再次调用该方法计算原数据的MD5值。可以手动调用reset()方法重置输入源。 
            //digest()返回值16位长度的哈希值,由byte[]承接 
            byte[] md5Array = md5.digest();
            
            //byte[]通常我们会转化为十六进制的32位长度的字符串来使用,本文会介绍三种常用的转换方法 
            return bytesToHex(md5Array);
        } catch (NoSuchAlgorithmException e) {
            return "";
        } catch (UnsupportedEncodingException e) {
            return "";
        }
    }

    private static String bytesToHex(byte[] md5Array) {
        StringBuilder strBuilder = new StringBuilder();
        for (int i = 0; i < md5Array.length; i++) {
            int temp = 0xff & md5Array[i];
            String hexString = Integer.toHexString(temp);
            if (hexString.length() == 1) {//如果是十六进制的0f,默认只显示f,此时要补上0
                strBuilder.append("0").append(hexString);
            } else {
                strBuilder.append(hexString);
            }
        }
        return strBuilder.toString();
    }

}


ws-api Demo (java)


package test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URI;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.GZIPInputStream;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.java_websocket.client.DefaultSSLWebSocketClientFactory;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.handshake.ServerHandshake;

/**
 * @author 鲫鱼哥 DateTime:2018年11月22日 下午9:25:20 
 * 建议使用的websocket client版本 
 *  
 * org.java-websocket 
 * Java-WebSocket 
 * 1.3.0 
 *  
 *
 */
public class WsTest {

    public static void main(String[] args) {
        try {
//wsurl 
            String url = "wss://ws.wbfex.com/kline-api/ws";
//历史数据请求参数 
            String reqParam = "{"event":"req","params":{"channel":"market_btcusdt_trade_ticker","cb_id":"btcusdt","top":150}}";
//订阅参数 
            String subParam = "{"event":"sub","params":{"channel":"market_btcusdt_trade_ticker","cb_id":"btcusdt","top":150}}";

//初始化请求历史数据 
            WebSocketUtils wsc = WebSocketUtils.executeWebSocket(url, reqParam);

//订阅实时数据 
            wsc.send(subParam);

//线程不结束,等待新的消息,一般一分钟左右会有新的成交返回
            while (true) {
                Thread.sleep(1000);
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    static class WebSocketUtils extends WebSocketClient {
        private static WebSocketUtils wsclient = null;
        private String msg = "";

        public WebSocketUtils(URI serverURI) {
            super(serverURI);
        }

        public WebSocketUtils(URI serverUri, Draft draft) {
            super(serverUri, draft);
        }

        public WebSocketUtils(URI serverUri, Map headers, int connecttimeout) {
            super(serverUri, new Draft_17(), headers, connecttimeout);
        }

        @Override
        public void onOpen(ServerHandshake serverHandshake) {
            System.out.println("链接已建立");

        }

        @Override
        public void onMessage(String s) {
            System.out.println("收到字符串消息");
        }

        @Override
        public void onClose(int i, String s, boolean b) {
            System.out.println("链接已关闭");
        }

        @Override
        public void onError(Exception e) {
            System.out.println("报错啦");
        }

        @Override
        public void onMessage(ByteBuffer socketBuffer) {
            try {
                String marketStr = byteBufferToString(socketBuffer);
                String market = uncompress(marketStr).toLowerCase();
                if (market.contains("ping")) {
                    System.out.println("收到消息ping:"+market);
                    String tmp = market.replace("ping", "pong");
                    wsclient.send(market.replace("ping", "pong"));
                } else {
                    msg = market;
                    System.out.println("收到消息:"+msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public static Map getWebSocketHeaders() throws IOException {
            Map headers = new HashMap();
            return headers;
        }

        private static void trustAllHosts(WebSocketUtils appClient) {
            TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[] {};
                }

                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
            } };

            try {
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                appClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sc));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public static WebSocketUtils executeWebSocket(String url,String sendMsg) throws Exception {
            wsclient = new WebSocketUtils(new URI(url), getWebSocketHeaders(), 1000);
            trustAllHosts(wsclient);
            wsclient.connectBlocking();
            wsclient.send(sendMsg);
            return wsclient;
        }

        // buffer 转String 
        public String byteBufferToString(ByteBuffer buffer) {
            CharBuffer charBuffer = null;
            try {
                Charset charset = Charset.forName("ISO-8859-1");
                CharsetDecoder decoder = charset.newDecoder();
                charBuffer = decoder.decode(buffer);
                buffer.flip();
                return charBuffer.toString();
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }

        // 解压缩 
        public String uncompress(String str) throws IOException {
            if (str == null || str.length() == 0) {
                return str;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
            GZIPInputStream gunzip = new GZIPInputStream(in);
            byte[] buffer = new byte[256];
            int n;
            while ((n = gunzip.read(buffer)) >= 0) {
                out.write(buffer, 0, n);
            }
            return out.toString();
        }

    }
}

你可能感兴趣的:(数字货币交易所API)