nodejs实现聚币网api调用
来源:sansantao.com/archives/24.html
之前了解了下btc,了解了解,就了解到了山寨币的圈子,然后就不知不觉的注册了聚币,这个东西,基本上是靠运气啊,我赶着这么好的行情,竟然在亏钱。。。
在聊天室里,看有人聊小波段,还说了哪个币比较稳定,我就想着问问,他小波段怎么操作,结果没搭理我。最后我想了下,不告诉我,我自己研究呗,最后还真研究出了点套路,不过管不管用还得实践啊,而且因为工作问题,没时间和精力操作短线,所以就想着写个程序搞定吧,正好之前看到聚币有api,就开始干了。
聚币的api文档写的真是烂啊,基本上只能看看每个字段代表什么意思,其他都得琢磨,网上找了下,也没有node实现的,只有python实现的,只好边参考边写了,不过最后还是搞出来了。嘻嘻。
下面开始正文:
开始前,我要需要几个模块,这几个模块node自带,不需要npm下载
var https = require('https');
var crypto = require('crypto'); // 加密模块
var querystring = require("querystring");
模块有了以后,我们就可以开始写代码啦,先把必要的东西设置好了。
var url = 'www.jubi.com';
var apis = {
getApiPrice : '/api/v1/ticker/', // 获取价格
getApiAccount : '/api/v1/balance/', // 获取用户信息
getApiPending : '/api/v1/trade_list/', // 获取挂单列表
getApiOrder : '/api/v1/trade_view/', // 获取挂单详情
setApiAdd : '/api/v1/trade_add/', // 下单
setApiCancel : '/api/v1/trade_cancel/', // 取消订单
}
var key = 'abcde-abcde-abcde-abcde-abcde-abcde-abcde'; // 公钥
var privateKey = '自己的私钥'; // 私钥
var coin = 'btc'; // 币种
这样我们就可以直接请求当前价格了。
// 获取当前价格
var getPrice = () => {
var ops = {
method: 'GET',
host: url,
port: '443',
path: apis.getApiPrice + '?coin='+coin
}
var req = https.request(ops,(res) => {
var datas = '';
res.on('data', (data) => {
datas += data;
})
res.on('end', (data) => {
var date = new Date();
datas = JSON.parse(datas);
console.log(datas)
})
}).on('error',(err) => {
console.log('获取价格异常,异常原因'+err);
})
req.end();
}
getPrice()
这样就可以获取当前币的价格了,这个是没问题的,下面这个,搞了好久,也是最主要的,这个操作通了,其他就不是问题了。
首先是加密问题,加密有个坑,就是你加密参数的顺序,必须和传给聚币服务端的顺序一样,要不然就报104错误。随机数因为看哪个python教程说是12位,我也就没试13位行不行,就做了下处理。
先用md5把公钥加密,再把传进来的参数做成以“&”链接的字符串,然后在用公钥,通过sha256加密字符串
// 生成随机数
var nonce = () => parseInt(new Date().getTime()/10);
// 加密
var signature = (data,privateKey) => {
var _result = [];
for (var key in data){
var value = data[key];
_result.push(key + '=' + value);
}
var sign = crypto.createHash('md5').update(privateKey).digest('hex');
var hash = crypto.createHmac('sha256', sign).update(_result.join('&')).digest('hex');
return hash;
}
好啦,加密函数弄完了,开始写个获取账户信息吧,这个弄好了,其他操作就都一样了。
其实坑我都踩了。。。照着写就好
// 获取账户信息
var getAccount = () => {
var opstions = {nonce:nonceValue, key:key};
var signatureValue = signature(opstions,privateKey);
opstions.signature = signatureValue;
var ops = {
method: 'POST',
host: url,
port: '443',
path: apis.getApiAccount,
headers:{
'Content-Type': 'application/x-www-form-urlencoded'
}
}
var req = https.request(ops,(res) => {
var datas = '';
res.on('data', (data) => {
datas += data;
})
res.on('end', (data) => {
datas = JSON.parse(datas);
console.log(datas)
})
})
req.on('error',(err) => {
console.log('获取账户信息异常,异常原因'+err);
})
req.write(opstions);
req.end();
}
getAccount();
好啦,就这么多,其他的接口都跟上面差不多
下一篇:H5中的meta元信息汇总
评论