binance api ошибка 'code': -1102, 'msg': "Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."
Помогите, не могу найти причину ошибки. Проблема с передачей часовой метки. Такой подход для https://api.binance.com/api/v3/order работает, но для https://fapi.binance.com/fapi/v1/order уже не работает. Вот код "шредингера"
import ssl
import time
import json
import urllib
import hmac, hashlib
import requests
from urllib.parse import urlparse, urlencode
from urllib.request import Request, urlopen
class Binance():
methods = {'createOrder': {'url': 'fapi/v1/order', 'method': 'POST', 'private': True}}
def __init__(self, API_KEY, API_SECRET):
self.API_KEY = API_KEY
self.API_SECRET = bytearray(API_SECRET, encoding='utf-8')
def __getattr__(self, name):
def wrapper(*args, **kwargs):
kwargs.update(command=name)
return self.call_api(**kwargs)
return wrapper
def call_api(self, **kwargs):
command = kwargs.pop('command')
api_url = 'https://fapi.binance.com/' + self.methods[command]['url']
payload = kwargs
headers = {}
payload_str = urllib.parse.urlencode(payload)
if self.methods[command]['private']:
payload.update({'timestamp': int(time.time()) * 1000})
payload_str = urllib.parse.urlencode(payload).encode('utf-8')
sign = hmac.new(
key=self.API_SECRET,
msg=payload_str,
digestmod=hashlib.sha256
).hexdigest()
payload_str = payload_str.decode("utf-8") + "&signature="+str(sign)
headers = {"X-MBX-APIKEY": self.API_KEY}
response = requests.request(method=self.methods[command]['method'], url=api_url, data="" if self.methods[command]['method'] == 'GET' else payload_str, headers=headers)
return response.json()
if __name__ == "__main__":
binance = Binance('','')
print(binance.createOrder(symbol="BTCUSDT", quantity=1, side="BUY", type="MARKET"))
Документация binance https://binance-docs.github.io/apidocs/futures/en/#new-order-trade
Ответы (1 шт):
Автор решения: Kostya Cholak
→ Ссылка
Столкнулся с этой же проблемой.
Решением было передача данных не через data, а через params, вне зависимости от метода (GET, POST, ...):
response = requests.request(..., params=payload_str, ...)