【发布时间】:2022-06-11 13:43:23
【问题描述】:
我正在尝试通过 Python 中的发布请求与交易平台的 API 进行通信。不幸的是,这仅在请求不必签名时才有效。一开始我只是想按照文档(BingX API Documentation on GitHub)的示例来获取帐户余额。这个例子给我的印象是这需要半个小时,但现在我已经做了两天了,我慢慢开始绝望了。
当我发送请求时,我从服务器收到一条错误消息,指出我的签名不正确:
{"code":80014,"msg":"签名不匹配","data":{}}
由于我没有加密或类似事情的经验,我很难分析错误。我可以想象错误在于转换为字节,但出于测试目的,我也不能省略这一步。文档要求您根据此方案加密字符串:
Signature = HmacSHA256("UuGuyEGt6ZEkpUObCYCmIfh0elYsZVh80jlYwpJuRZEw70t6vomMH7Sjmf94ztSI", "POST/api/v1/user/getBalanceapiKey=Zsm4DcrHBTewmVaElrdwA67PmivPv6VDK6JAkiECZ9QfcUnmn67qjCOgvRuZVOzU¤cy=USDT×tamp=1615272721001")
Signature = Base64Encode(Signature)
Signature = UrlEncode(Signature)
我“解决”如下:
signature = hmac.new(api_secret.encode('utf-8'), originstring.encode('utf-8'), hashlib.sha256).digest().upper()
signature = str(signature)
signature = bytes(signature, 'utf-8')
signature = base64.b64encode(signature)
signature = urllib.parse.quote(signature)
如果有人能向我解释我做错了什么,我会非常高兴。
非常感谢
丹尼尔
我的完整 Python 代码:
import requests
import hmac
import hashlib
import time
import base64
import urllib
import json
api_key = "tHeKeY"
api_secret = "MySuPeRsEcReT"
asset = "USDT"
want = "getBalance"
timestamp = str(int(time.time()))
paramstring = (str("apiKey=") +
str(api_key) +
str("¤cy=") +
str(asset) +
str("×tamp=") +
str(timestamp))
print("PARAMSTRING:")
print(paramstring)
print("")
originstring = (str("POST/api/v1/user/") +
str(want) +
str(paramstring))
print("ORIGINSTRING:")
print(originstring)
print("")
signature = hmac.new(api_secret.encode('utf-8'), originstring.encode('utf-8'), hashlib.sha256).digest().upper()
signature = str(signature)
signature = bytes(signature, 'utf-8')
signature = base64.b64encode(signature)
signature = urllib.parse.quote(signature)
print("SIGNATURE:")
print(signature)
print("")
signature = str(signature)
requeststring = (str("https://api-swap-rest.bingbon.pro/api/v1/user/getBalance?") +
str("apiKey=") +
str(api_key) +
str("¤cy=") +
str(asset) +
str("×tamp=") +
str(timestamp) +
str("&sign=") +
str(signature))
print("REQUESTSTRING:")
print(requeststring)
print("")
print("RESPONSE:")
response = requests.post(requeststring)
response = str(response.text)
print(response)
response = json.loads(response)
response_code = (response["code"])
response_message = (response["msg"])
response_data = (response["data"])
print(response_code)
print(response_message)
print(response_data)
【问题讨论】:
标签: python post signature hashlib