我正在嘗試通過 Python 中的發布請求與 Tradingplatform 的 API 進行通信。不幸的是,這僅在請求不必簽名時才有效。一開始我只是想按照檔案的示例(GitHub 上的 BingX API 檔案)來獲取帳戶余額。這個例子給我的印象是這需要半個小時,但現在我已經做了兩天了,我慢慢開始絕望了。
當我發送請求時,我從服務器收到一條錯誤訊息,指出我的簽名不正確:
{"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)
uj5u.com熱心網友回復:
無限的猴子和無限的打字機,有足夠的時間可以進行實驗。
我不知道為什么,但是當我這樣做時,它可以作業:
signature = (base64.b64encode(
hmac.new(bytes(api_secret, 'utf-8'), bytes(originstring, 'utf-8'),digestmod=hashlib.sha256).digest()).decode("utf-8"))
但無論如何,如果有人能告訴我我的問題出在哪里,那就太好了。因為對我來說,兩種解決方案看起來都一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/440134.html
