{"code":-1102,"msg":"Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."}
{"code":-1102,"msg":"Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."}
我正在尝试更改我账户的初始杠杆。
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 = {
#futures
'futuresExchangeInfo': {'url': 'fapi/v1/exchangeInfo', 'method': 'GET', 'private': False, 'futures': True},
'futuresKlines': {'url': 'fapi/v1/klines', 'method': 'GET', 'private': False, 'futures': True},
'MarkPrice': {'url': '/fapi/v1/premiumIndex', 'method': 'GET', 'private': False, 'futures': True},
'futuresCreateOrder': {'url': 'fapi/v1/order', 'method': 'POST', 'private': True, 'futures': True},
'QueryOrder': {'url': 'fapi/v1/order', 'method': 'GET', 'private': True, 'futures': True},
'ChangeLeverage': {'url': '/fapi/v1/leverage', 'method': 'POST', 'private':True, 'futures':True},
'futuresAccount': {'url': 'fapi/v2/account', 'method': 'GET', 'private': True, 'futures': True},
'futuresBalance': {'url': 'fapi/v2/balance', 'method': 'GET', 'private': True, 'futures': True},
'futuresSymbolPriceTicker': {'url': 'fapi/v1/ticker/price', 'method': 'GET', 'private': True, 'futures': True},
'futuresOrderInfo': {'url': 'fapi/v1/order', 'method': 'GET', 'private': True, 'futures': True},
'futuresCancelOrder': {'url': 'fapi/v1/order', 'method': 'DELETE', 'private': True, 'futures': True}
}
def __init__(self, API_KEY, API_SECRET):
self.API_KEY = API_KEY
self.API_SECRET = bytearray(API_SECRET, encoding='utf-8')
self.shift_seconds = 0
def __getattr__(self, name):
def wrapper(*args, **kwargs):
kwargs.update(command=name)
return self.call_api(**kwargs)
return wrapper
def set_shift_seconds(self, seconds):
self.shift_seconds = seconds
def call_api(self, **kwargs):
command = kwargs.pop('command')
api_url = 'https://fapi.binance.com/' + self.methods[command]['url']
#api_url = 'https://testnet.binancefuture.com:443/' + self.methods[command]['url']
payload = kwargs
headers = {}
payload_str = urllib.parse.urlencode(payload)
if self.methods[command]['private']:
payload.update({'timestamp': int(time.time() + self.shift_seconds - 1)})
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}
if self.methods[command]['method'] == 'GET':
api_url += '?' + payload_str
response = requests.request(method=self.methods[command]['method'], url=api_url, data="" if self.methods[command]['method'] == 'GET' else payload_str, headers=headers)
if 'code' in response.text:
print(response.text)
return response.json()
bot = Binance(
API_KEY='',
API_SECRET=''
)
account=bot.futuresAccount()
cl=bot.ChangeLeverage(symbol='BTCUSDT',leverage=2)
当我在数据中发送时间戳时出现此错误:
{"code":-1102,"msg":"强制参数 'timestamp' 未发送,为 empty/null,或格式错误。"}。
futuresAccount() 工作正常,但不是 ChangeLeverage()。我不知道如何解决这个问题。
参考:https://binance-docs.github.io/apidocs/futures/en/#change-initial-leverage-trade
time.time() 会给你几秒的纪元,Binance 期望毫秒。
所以一般来说应该是int(time.time()*1000).
的形式
https://binance-docs.github.io/apidocs/futures/en/#endpoint-security-type
我正在尝试更改我账户的初始杠杆。
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 = {
#futures
'futuresExchangeInfo': {'url': 'fapi/v1/exchangeInfo', 'method': 'GET', 'private': False, 'futures': True},
'futuresKlines': {'url': 'fapi/v1/klines', 'method': 'GET', 'private': False, 'futures': True},
'MarkPrice': {'url': '/fapi/v1/premiumIndex', 'method': 'GET', 'private': False, 'futures': True},
'futuresCreateOrder': {'url': 'fapi/v1/order', 'method': 'POST', 'private': True, 'futures': True},
'QueryOrder': {'url': 'fapi/v1/order', 'method': 'GET', 'private': True, 'futures': True},
'ChangeLeverage': {'url': '/fapi/v1/leverage', 'method': 'POST', 'private':True, 'futures':True},
'futuresAccount': {'url': 'fapi/v2/account', 'method': 'GET', 'private': True, 'futures': True},
'futuresBalance': {'url': 'fapi/v2/balance', 'method': 'GET', 'private': True, 'futures': True},
'futuresSymbolPriceTicker': {'url': 'fapi/v1/ticker/price', 'method': 'GET', 'private': True, 'futures': True},
'futuresOrderInfo': {'url': 'fapi/v1/order', 'method': 'GET', 'private': True, 'futures': True},
'futuresCancelOrder': {'url': 'fapi/v1/order', 'method': 'DELETE', 'private': True, 'futures': True}
}
def __init__(self, API_KEY, API_SECRET):
self.API_KEY = API_KEY
self.API_SECRET = bytearray(API_SECRET, encoding='utf-8')
self.shift_seconds = 0
def __getattr__(self, name):
def wrapper(*args, **kwargs):
kwargs.update(command=name)
return self.call_api(**kwargs)
return wrapper
def set_shift_seconds(self, seconds):
self.shift_seconds = seconds
def call_api(self, **kwargs):
command = kwargs.pop('command')
api_url = 'https://fapi.binance.com/' + self.methods[command]['url']
#api_url = 'https://testnet.binancefuture.com:443/' + self.methods[command]['url']
payload = kwargs
headers = {}
payload_str = urllib.parse.urlencode(payload)
if self.methods[command]['private']:
payload.update({'timestamp': int(time.time() + self.shift_seconds - 1)})
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}
if self.methods[command]['method'] == 'GET':
api_url += '?' + payload_str
response = requests.request(method=self.methods[command]['method'], url=api_url, data="" if self.methods[command]['method'] == 'GET' else payload_str, headers=headers)
if 'code' in response.text:
print(response.text)
return response.json()
bot = Binance(
API_KEY='',
API_SECRET=''
)
account=bot.futuresAccount()
cl=bot.ChangeLeverage(symbol='BTCUSDT',leverage=2)
当我在数据中发送时间戳时出现此错误: {"code":-1102,"msg":"强制参数 'timestamp' 未发送,为 empty/null,或格式错误。"}。 futuresAccount() 工作正常,但不是 ChangeLeverage()。我不知道如何解决这个问题。
参考:https://binance-docs.github.io/apidocs/futures/en/#change-initial-leverage-trade
time.time() 会给你几秒的纪元,Binance 期望毫秒。
所以一般来说应该是int(time.time()*1000).
的形式https://binance-docs.github.io/apidocs/futures/en/#endpoint-security-type