-1

i write below code in python for opening new spot trade from binance but when i send request to server i get this response {'code': -1022, 'msg': 'Signature for this request is not valid.'}

class Trade():
def __init__(self):
    self.url = 'https://api.binance.com'
    self.apikey = 'API_KEY'
    self.secret = 'API_SECRET'
    self.time = json.loads(requests.get(self.url+'/api/v1/time').text)['serverTime']

def generate_request_data(self, **kwargs):
    params = kwargs
    query_string = urlencode(params)
    sign = hmac.new(self.secret.encode('utf-8'),
                           query_string.encode('utf-8'),
                           hashlib.sha256).hexdigest()
    params['signature'] = sign
    params['timestamp'] = self.time
    headers = {
        'X-MBX-APIKEY': self.apikey,
        'signature': sign,
    }

    return params, headers

def buy(self, symbol, qty, price):
    params, headers = self.generate_request_data(
        symbol=symbol,
        price=price,
        quantity=qty,
        type='LIMIT',
        side='BUY'
    )
    response = requests.post(url=self.url+'/api/v3/order',
                             params=params,
                             headers=headers)
    return response.json()
hbv73
  • 1
  • 3

1 Answers1

0

I changed the code to below code and then error was fixed

class Trade():
def __init__(self):
    self.url = 'https://api.binance.com'
    self.apikey = 'API_KEY'
    self.secret = 'SECRET_KEY'
    self.time = json.loads(requests.get(self.url+'/api/v1/time').text)['serverTime']

def generate_request_data(self, **kwargs):
    params = kwargs
    query_string = urlencode(params)
    sign = hmac.new(self.secret.encode('utf-8'),
                           query_string.encode('utf-8'),
                           hashlib.sha256).hexdigest()
    params['signature'] = sign
    headers = {
        'X-MBX-APIKEY': self.apikey,
        'signature': sign,
    }

    return params, headers

def buy(self, symbol, qty, price):
    params, headers = self.generate_request_data(
        symbol=symbol,
        price=price,
        quantity=qty,
        type='LIMIT',
        side='BUY',
        timestamp=self.time,
        timeInForce='GTC'
    )
    response = requests.post(url=self.url+'/api/v3/order',
                             params=params,
                             headers=headers)
    return response.json()

now i send timestamp and timeInForce params to generate_request_data method

hbv73
  • 1
  • 3