Bigone API 升级到v2,害死程序员

最近调动到北京工作,以前开发的三角套利程序竟然不能正常运行了,真是币圈一天,人间一年。最近稍微有一点点空闲时间,重拾搬砖程序,却发现Bigone的API已经发生了重大变化,非常非常大的变化,不只是外界看到的ONE交易挖矿(API的开发者文档地址: https://open.big.one/,请自备VPN)。

v2版本的API与v1发生了非常大的变化,原来的API接口程序几乎要重写!坑死程序员!

首先,API的入口变为 https://big.one/api/v2/

当然换成https://b1.run/api/v2/ 也是可以的。

另外,API认证方式也发生了变化,以前Header只需要传递一个bigone指定的后台参数即可通过,现在要麻烦了一些。例如,以前的Header:

Authorization: Bearer eyJhbG*****************V4Vpro

现在这个令牌的生成更安全了,需要一个时间戳,而且需要一个称为JWT token的类库,网址是: https://jwt.io,这个网站里有各种编程语言的支持,请自行研究,我只把C#的例子写出来。

先添加一个nuget的jose-jwt的引用,然后:

using Jose;

Header中需要type, sub, nonce三个参数,sub是API key,请从bigone的后台获取,nonce是服务器的当前UNIX时间戳,请跑通下面的例子,密钥用testsecret。

public static bool TestJWT_Token() { var payload = new Dictionary<string, object>() { { "type","OpenAPI"}, { "sub", "cee88ab0bc69435784b7db0545e85647"}, { "nonce", 1527665262168391000} }; var secretKey = System.Text.Encoding.Default.GetBytes("testsecret"); string token = Jose.JWT.Encode(payload, secretKey, JwsAlgorithm.HS256); if (!token.Contains("joiT3BlbkFQSSIsInN1YiI6ImNlZTg")) return false; if (!token.Contains("NTc4NGI3ZGIwNTQ1ZTg1")) return false; if (!token.Contains("UyNjIxNjgz")) return false; if (!token.EndsWith("To1WxbWV4Vpro")) return false; return true; }

如果客户端没有精确的UNIX时间,可以使用Ping命令,访问URL为:

https://big.one/api/v2/ping

如果一切正常,则可能得到类似下面的内容:

{ "timestamp": 1527665262168391000 }

然后,需要把key换成自己帐号的API Key

var payload = new Dictionary<string, object>() { { "type","OpenAPI"}, { "sub", 自己的API_Key }, { "nonce", 刚才用Ping()得到的时间戳 } }; // 下面的secret是bigone账户中得到的API Secret。 var secretKey = System.Text.Encoding.Default.GetBytes(secret); apiToken = Jose.JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);

上面得到的apiToken就是以前v1版本的令牌,比以前更加安全了。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoiT3BlbkFQSSIsInN1YiI6ImNlZTg4YWIwYmM2OTQzNTc4NGI3ZGIwNTQ1ZTg1NjQ3Iiwibm9uY2UiOjE1Mjc2NjUyNjIxNjgzOTEwMDB9.YNpae4v_-OU7h2sknRPa3XPhDcC3p-To1WxbWV4Vpro

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2018-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java大联盟

微信刷卡支付API详解

1564
来自专栏大内老A

WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

对于一般的多线程操作,比如异步地进行基于文件系统的IO操作;异步地调用Web Service;或者是异步地进行数据库访问等等,是和具体的线程无关的。也就是说,对...

22510
来自专栏晓晨的专栏

.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱

783
来自专栏菩提树下的杨过

Flash/Flex学习笔记(10):FMS 3.5之Hello World!

Adobe的FMS真的是一个倍儿牛叉的技术!(至少Silverlight在"实时广播"方面目前还没有任何能超越FMS的迹象) 曾经盛极一时的tudou,ku6,...

2048
来自专栏c#开发者

C#开发终端式短信的原理和方法

简介   没发过短信的年轻人肯定是属于那种受保护的稀有动物,通讯发达的今天短信已经成为人们交流的重要手段,其中也蕴含着巨大的市场和经济利益,掌握短信技术的人才也...

3949
来自专栏hrscy

RxSwift - Why

官方建议总是使用 .addDisposableTo(disposeBag) 即使对于简单绑定来说那不是必要的。

1412
来自专栏草根专栏

使用xUnit为.net core程序进行单元测试(下2)

第1部分: https://cloud.tencent.com/developer/article/1019835

2547
来自专栏高性能服务器开发

关于windows完成端口(IOCP)的一些理解(二)

1 不知道你是否记得前面中说过每消耗一个预先准备客户端的socket,就要补上一个。这个代码现在看来就应该放在连接成功事件里面了: DWORD ThreadFu...

4169
来自专栏函数式编程语言及工具

Akka(10): 分布式运算:集群-Cluster

   Akka-Cluster可以在一部物理机或一组网络连接的服务器上搭建部署。用Akka开发同一版本的分布式程序可以在任何硬件环境中运行,这样我们就可以确定以...

5509
来自专栏影子

开始食用grpc(之二)

转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9570992.html

5084

扫码关注云+社区