请解释? api 签名示例
please explain? api signature example
(更新:根据 John 的评论进行更改后仍然卡住)
我希望有人能用通俗易懂的语言解释下例中签名是如何生成的?我几乎被困在这一点上。我在在线哈希生成器(见下图)和我自己的代码中得到了相同的结果;但它与网站中的示例不同(也如下图所示)。
https://www.gate.io/docs/apiv4/en/#authentication
编辑:网站似乎只能通过 google 搜索访问,直接 link 给出 404?所以我将页面作为图片附上,见下文
请求:列出所有订单
GET /api/v4/futures/orders?contract=BTC_USD&status=finished&limit=50
HTTP/1.1
秘密:
secret
生成的签名字符串(编辑:已更新,感谢@John Glenn):
GET\n/api/v4/futures/orders\ncontract=BTC_USD&status=finished&limit=50\ncf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\n1541993715
(注意网站上的例子,为了便于阅读,有换行符)
根据例子生成的签名:
eae42da914a590ddf727473aff25fc87d50b64783941061f47a3fdb92742541fc4c2c14017581b4199a1418d54471c269c03a38d788d802e2c306c37636389f0
来自网站的解释:
Signature generation method is HexEncode(HMAC_SHA512(secret,
signature_string)), i.e., the hexadecimal digest output of HMAC-SHA512
with APIv4 secret as secret and signature string as message.
但如果我将它放入 HMAC-SHA512 生成器(例如,https://www.javainuse.com/hmac),我得到的值是:
58000238bf5eef226028e108df259184f14bf3021eb27c324a808334d187da42c38f4510b30215ee9b0c05d6352396e99f67fa920079746bb4dfd70506592f6d
我怀疑我遗漏了一个非常重要的点,但此时我很迷茫..
非常感谢您的帮助!
您生成的签名字符串不正确。根据 to 网站,这就是构建它的方式,每个元素由 \n
.
分隔
- 请求动词
- 请求URL
- 来自 URL
的纯文本查询字符串
- 请求正文的哈希,在本例中为空字符串
- 以秒为单位的 Unix 时间戳
对于您的示例,生成的签名字符串值应为:
- GET(但你有 POST)
- /api/v4/futures/orders
- contract=BTC_USD&status=finished&limit=50(从你的字符串中丢失)
- 只需使用示例中的空字符串哈希值
- 使用示例中的 Unix 时间戳
已解决!
“\n”不是正则表达式,而是示例中的实际换行符。换句话说,换行符应作为 ascii 换行符输入。
然后我在生成器中得到了与网站相同的结果。
(更新:根据 John 的评论进行更改后仍然卡住)
我希望有人能用通俗易懂的语言解释下例中签名是如何生成的?我几乎被困在这一点上。我在在线哈希生成器(见下图)和我自己的代码中得到了相同的结果;但它与网站中的示例不同(也如下图所示)。
https://www.gate.io/docs/apiv4/en/#authentication 编辑:网站似乎只能通过 google 搜索访问,直接 link 给出 404?所以我将页面作为图片附上,见下文
请求:列出所有订单
GET /api/v4/futures/orders?contract=BTC_USD&status=finished&limit=50 HTTP/1.1
秘密:
secret
生成的签名字符串(编辑:已更新,感谢@John Glenn):
GET\n/api/v4/futures/orders\ncontract=BTC_USD&status=finished&limit=50\ncf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\n1541993715
(注意网站上的例子,为了便于阅读,有换行符)
根据例子生成的签名:
eae42da914a590ddf727473aff25fc87d50b64783941061f47a3fdb92742541fc4c2c14017581b4199a1418d54471c269c03a38d788d802e2c306c37636389f0
来自网站的解释:
Signature generation method is HexEncode(HMAC_SHA512(secret, signature_string)), i.e., the hexadecimal digest output of HMAC-SHA512 with APIv4 secret as secret and signature string as message.
但如果我将它放入 HMAC-SHA512 生成器(例如,https://www.javainuse.com/hmac),我得到的值是:
58000238bf5eef226028e108df259184f14bf3021eb27c324a808334d187da42c38f4510b30215ee9b0c05d6352396e99f67fa920079746bb4dfd70506592f6d
我怀疑我遗漏了一个非常重要的点,但此时我很迷茫..
非常感谢您的帮助!
您生成的签名字符串不正确。根据 to 网站,这就是构建它的方式,每个元素由 \n
.
- 请求动词
- 请求URL
- 来自 URL 的纯文本查询字符串
- 请求正文的哈希,在本例中为空字符串
- 以秒为单位的 Unix 时间戳
对于您的示例,生成的签名字符串值应为:
- GET(但你有 POST)
- /api/v4/futures/orders
- contract=BTC_USD&status=finished&limit=50(从你的字符串中丢失)
- 只需使用示例中的空字符串哈希值
- 使用示例中的 Unix 时间戳
已解决!
“\n”不是正则表达式,而是示例中的实际换行符。换句话说,换行符应作为 ascii 换行符输入。
然后我在生成器中得到了与网站相同的结果。