如何签署 OKEx API 请求?

2023-12-02

在尝试向 OKEx API 进行身份验证时,我不断收到无效签名错误,但我无法理解为什么我的签名未通过。另一只眼睛可能有帮助吗?

以下是 OKEx API 文档中的一些上下文:

*---签名消息---

  1. OK-ACCESS-SIGN 标头的生成方式如下:创建一个 prehash 时间戳+方法+请求路径+正文的字符串(其中+ 代表字符串连接)准备 Secret 签名预哈希 带有 Secret 的字符串,使用 HMAC SHA256 对签名进行编码 Base64 格式示例:sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp + 'GET' + '/users/self/verify', SecretKey))

  2. 时间戳值与 OK-ACCESS-TIMESTAMP 标头相同,具有纳秒精度。

  3. 请求方法应该是大写,即 GET 和 POST。

  4. requestPath是请求端点的路径。例子:/orders?before=2&limit=30

  5. body是指请求体的String。如果没有请求体可以省略 (GET 请求经常出现这种情况)。例子:{"product_id":"BTC-USD-0309","order_id":"377454671037440"}

  6. SecretKey是在创建APIKey时生成的。例子:22582BD0CFF14C41EDBF1AB98506286D*

import hmac
import base64
import requests
import json

from Secrets import okex_key
from Secrets import okex_secret
from Secrets import okex_pass

#get time
def get_time():
    urltime= 'https://www.okex.com/api/general/v3/time'
    response=requests.get(urltime)
    time=response.json()
    time=time['iso']
    return time

# signature
def signature(timestamp, method, request_path, body,secret_key):
    if str(body) == '{}' or str(body) == 'None':
        body = ''
    message = str(timestamp) + str.upper(method) + request_path + str(body)
    mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
    d = mac.digest()
    return base64.b64encode(d)


# set request header
def get_header():
    body= {}
    request= 'GET'
    endpoint= '/api/spot/v3/accounts'
    header = dict()
    header['CONTENT-TYPE'] = 'application/json'
    header['OK-ACCESS-KEY'] = okex_key
    header['OK-ACCESS-SIGN'] = signature(get_time(), request, endpoint , body, okex_secret)
    header['OK-ACCESS-TIMESTAMP'] = str(get_time())
    header['OK-ACCESS-PASSPHRASE'] = okex_pass
    return header


url = 'http://www.okex.com/api/spot/v3/accounts'
header = get_header()
response= requests.get(url, headers=header)
response.json()

问题是您在计算值时给出了两个不同的时间值OK-ACCESS-SIGN and OK-ACCESS-TIMESTAMP. Put get_time()到一个变量中并在两个地方使用它。

current_time = get_time()

header['OK-ACCESS-SIGN'] = signature(current_time, request, endpoint , body, okex_secret)
header['OK-ACCESS-TIMESTAMP'] = str(current_time)

另请注意,目前,在get_time,你询问 OKEx 的服务器现在几点了。但是,如果您的计算机的本地时间相当正确(您可以在https://time.is,例如)您可以避免执行该 HTTP 请求,而仅使用本地时间。

import datetime

def get_time():
    now = datetime.datetime.utcnow()
    t = now.isoformat("T", "milliseconds")
    return t + "Z"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何签署 OKEx API 请求? 的相关文章

随机推荐

  • fread/fwrite 大小和计数[重复]

    这个问题在这里已经有答案了 我对用于 fread fwrite 的参数大小和计数的顺序有疑问 如果我想从文件fp中读取8kb的数据 下面哪种方式效率更高 fread data 1 8192 fp fread data 8192 1 fp 还
  • 如何检查文件夹中是否存在文件?

    我需要检查文件夹中是否存在 xml 文件 DirectoryInfo di new DirectoryInfo ProcessingDirectory FileInfo TXTFiles di GetFiles xml if TXTFile
  • 如何安排每月第一个周日跑步

    我在 RedHat 上使用 Bash 我需要安排一个 cron 作业在每月第一个星期日上午 9 00 运行 我怎样才能做到这一点 你可以把这样的东西放在crontab file 00 09 7 date d le 07 run your s
  • 搜索电子邮件地址时 MySQL MATCH AGAINST

    我正在编写新闻通讯脚本 我需要在地址中实现搜索 我使用 FULLTEXT 对表建立了索引 但是当我执行以下查询时 SELECT FROM addresses WHERE MATCH email AGAINST email protected
  • Android 弹跳球

    所以我只是想让一个球在屏幕上弹跳 它会因为重力而减慢速度 并像普通球一样从墙上反射 弹跳 有人可以提供一些基础知识和非常简单的实现吗 其他例子似乎有点 过头 似乎超出了我想做的事情 我试过这个 public void updateLogic
  • Javascript:四舍五入到下一个 5 的倍数

    我需要一个实用函数 它接受一个整数值 长度范围从 2 到 5 位数字 并向上舍入到next5的倍数而不是nearest5 的倍数 这是我得到的 function round5 x return x 5 gt 2 5 parseInt x 5
  • C++ 多重继承私有成员不明确访问

    下面的代码 class A1 public int x class A2 private int x return 67 class M public A1 public A2 int main M m m x 编译有错误 error C2
  • Windows 8 Metro 风格应用程序中 .NET GeoCooperative.GetDistanceTo 的等效项

    Metro 风格 Windows 8 应用程序中的 System Device Location GeoCooperative GetDistanceTo 方法等效于什么 Metro 应用程序具有地理坐标类 带有小写的 C 但没有 GetD
  • 在 Typescript 中向现有模块添加定义

    我正在努力使用 Typescript 并修改现有模块的定义 我们习惯将任何想要输出的内容放入 res out 最后有类似 res json res out 的内容 这使我们能够在发送响应时对应用程序进行总体控制 所以我有这样的功能 expo
  • 如何在列表中的多个数据帧上使用 lapply 和粘贴

    我无法结合使用 lapply 和 Paste 来组合列表中包含的多个数据帧的两列 我查看了多个来源 但找不到答案 这个答案将粘贴应用于向量列表以获取字符串列表是关于组合列表中的行 而不是组合列来获得向量 这个答案解释了如何选择列但不将它们粘
  • 在 C 中使用 malloc 为 typedef 类型分配空间

    我不确定我到底需要用什么作为参数malloc来分配空间table allocate int 功能 我只是想count table cTable malloc sizeof count table 但这对 size 参数没有任何作用 我应该为
  • 基于 R 中的色相、饱和度、值来排序颜色

    这道题是R和色彩理论的结合 我尝试根据色相 h 饱和度 s 最后值 v 来排序颜色 这是本文末尾代码中的绘制颜色和数据框 Painted 数据框 1 2 3 4 5 h 0 6229508 0 2767296 0 1323283 0 979
  • iOS 版本特定的 info.plist 设置

    我正在更新 iOS 7 的应用程序 同时仍然支持 iOS 6 并且已更新状态栏以使用白色前景UIStatusBarStyle UIStatusBarStyleLightContent 但是 那UIStatusBarStyleLightCon
  • 混淆 ID

    我正在寻找一种将整数 ID 加密 混淆为另一个整数的方法 更准确地说 我需要一个函数int F int x 以便 xF x 是一一对应的 如果 x y F x F y 给定 F x 很容易找出 x 所以 F 不是哈希函数 给定 x 和 F
  • 如何设置 Azure CNAME

    我正在 Azure 上设置 VPS 但一直停留在配置 CNAME 上 该网站已向第三方注册 我已设置以下内容 NAME TYPE TTL VALUE NS 120 ns1 01 azure dns com etc SOA 3600 azur
  • Terraform - 在 Azure 上配置静态 IP 地址

    我已经使用 Terraform 一段时间了 并且对它与 VMware 和 Azure 提供商的使用感到满意 目前 我需要在 Azure 中使用静态 IP 地址配置 VM 试图说服他们摆脱静电 但有人对我使用了安全锤 我无法偏转 虽然我可以在
  • iPhone SDK 是否有可用的 GKVoiceChat 示例?

    我正在寻找 4 0 或更高版本的 iPhone SDK 的 GKVoiceChat 示例 它肯定会对我的 iPhone 游戏有所帮助 我见过两个游戏套件示例 其中包括 GKVoiceChat 在 Apple 开发者论坛中搜索 GCPing
  • 如何将 async/await 与使用基于事件的异步模式的库一起使用?

    我使用的库有一个名为 DoWork 的异步方法 该方法将在操作完成时引发 WorkDone 事件 我想编写一个调用该库的方法 但我希望我的方法是async所以可以用await 本质上 我想做的是 public async Task
  • 如何在Java Swing中实现空闲任务

    我有一个 GUI 应用程序变得非常慢 我想开始介绍各种 GUI 任务的计时 然而 我们的许多 GUI 操作会触发其他操作 然后 稍后调用 以触发其他操作 最终 一切都平静下来 没有什么可做的 此时 我想停止计时器并报告 GUI 操作 花费了
  • 如何签署 OKEx API 请求?

    在尝试向 OKEx API 进行身份验证时 我不断收到无效签名错误 但我无法理解为什么我的签名未通过 另一只眼睛可能有帮助吗 以下是 OKEx API 文档中的一些上下文 签名消息 OK ACCESS SIGN 标头的生成方式如下 创建一个