使用C#完成OKex V5 REST API签名
本文介绍了OKex V5 REST API签名规则,并使用C#实现了签名。在Demo中使用Flurl.Http类库进行HTTP请求,介绍了使用只读API和交易API获取数据的方法。
比较遗憾的是,国内网络是无法访问该API的。
1、签名介绍
OK-ACCESS-SIGN的请求头是对timestamp + method + requestPath + body字符串(+表示字符串连接),以及SecretKey,使用HMAC SHA256方法加密,通过Base-64编码输出而得到的。 如:sign=CryptoJS.enc.Base64.Stringify(CryptoJS.HmacSHA256(timestamp + 'GET' + '/users/self/verify', SecretKey)) 其中,timestamp的值与OK-ACCESS-TIMESTAMP请求头相同,为ISO格式,如2020-12-08T09:08:57.715Z。 method是请求方法,字母全部大写:GET/POST。 requestPath是请求接口路径。如:/api/v5/account/balance body是指请求主体的字符串,如果请求没有主体(通常为GET请求)则body可省略。如:{"instId":"BTC-USDT","lever":"5","mgnMode":"isolated"} SecretKey为用户申请APIKey时所生成。如:22582BD0CFF14C41EDBF1AB98506286D
2、签名实现
//OKEx V5 API签名 public static string HmacSha256(string message, string secret) { var sha256Data = Encoding.UTF8.GetBytes(message); var secretData = Encoding.UTF8.GetBytes(secret); using (var hmacSha256 = new HMACSHA256(secretData)) { var buffer = hmacSha256.ComputeHash(sha256Data); return Convert.ToBase64String(buffer); } }
3、异步获取所有产品行情信息
该API仅需要只读权限。
//异步获取所有产品行情信息 public async Task<Tuple<bool, object>> GetOkexTickerssAsync( string apiKey, string secretKey, string passPhrase) { //产品类型 //SPOT:币币 //SWAP:永续合约 //FUTURES:交割合约 //OPTION:期权 var api = "/api/v5/market/tickers?instType=SWAP"; //ISO8601 with 3 decimal places var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK", CultureInfo.InvariantCulture); var signText = $@"{timeStamp}GET{api}"; var sign = HmacHelper.HmacSha256(signText, secretKey); var url = $"https://www.okex.com{api}" .WithHeader("Content-Type", "application/json") .WithHeader("OK-ACCESS-KEY", apiKey) .WithHeader("OK-ACCESS-SIGN", sign) .WithHeader("OK-ACCESS-TIMESTAMP", timeStamp) .WithHeader("OK-ACCESS-PASSPHRASE", passPhrase); try { var content = await url.GetStringAsync(); return new Tuple<bool, object>(true, content); } catch (Exception e) { return new Tuple<bool, object>(false, e.Message); } }
4、异步获取成交明细(近三个月)
该API需要交易权限。
//异步获取成交明细(近三个月) public async Task<Tuple<bool, object>> GetOkexFillHistoryAsync( string apiKey, string secretKey, string passPhrase) { //产品类型 //SPOT:币币 //MARGIN:币币杠杆 //SWAP:永续合约 //FUTURES:交割合约 //OPTION:期权 var api = "/api/v5/trade/fills-history?instType=SPOT"; //ISO8601 with 3 decimal places var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK", CultureInfo.InvariantCulture); var signText = $@"{timeStamp}GET{api}"; var sign = HmacSha256(signText, secretKey); var url = $"https://www.okex.com{api}" .WithHeader("Content-Type", "application/json") .WithHeader("OK-ACCESS-KEY", apiKey) .WithHeader("OK-ACCESS-SIGN", sign) .WithHeader("OK-ACCESS-TIMESTAMP", timeStamp) .WithHeader("OK-ACCESS-PASSPHRASE", passPhrase); try { var content = await url.GetStringAsync(); return new Tuple<bool, object>(true, content); } catch (Exception e) { return new Tuple<bool, object>(false, e.Message); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器