2017-06-22 1 views
0

Ich versuche mich mit C-CEX.com zu authentifizieren, indem ich auf einen Test account's wallet information zugreife.Signatur für C-CEX API nicht akzeptiert

Ich habe gefolgt sorgfältig the documentation und abgekocht die Bahn zum Beispiel Code, aber ohne Erfolg (abgesehen von this veralteter Bibliothek) - das Ergebnis ist immer:

>>>make_sign_and_request('getbalances') 
{'success': False, 'result': None, 'message': 'INVALID_SIGNATURE'} 

Der gesamte Prozess ist weiter komplizierter durch die Tatsache, dass es anscheinend kein Python-Beispiel gibt, and authentication is explained in PHP only (auf dem mein Code unten basiert).

Meine Signaturfunktion:

import requests 
import time 
import urllib 
import hashlib 
import hmac 

# Keys for the test account 
API_KEY = '7EAEBD233321AB48C8B5EAB58FF8849B' 
API_SECRET = '139057C3B770C2DBCFCFFDD0D8A56E3F' 


def make_sign_and_request(endpoint, **request_kwargs): 
    req_kwargs = {'url': 'https://c-cex.com/t', 'headers': {}, 'files': {}, 
        'data': {}, 'params': {}, 'auth': {}, 'cookies': {}, 
        'hooks': {}, 'json': {}} 
    req_kwargs.update(request_kwargs) 

    # Prepare Payload arguments 
    nonce = str(int(time.time() * 1000)) 

    params = req_kwargs.pop('params') 
    params['apikey'] = API_KEY 
    params['nonce'] = nonce 
    post_params = params 
    post_params.update({'nonce': nonce, 'a': endpoint}) 
    url_encoded_params = urllib.parse.urlencode(post_params) 
    url = req_kwargs['url'] + '/api.html?' + url_encoded_params 
    print(url) 
    # generate signature 
    sig = hmac.new(API_SECRET.encode('utf-8'), url.encode('utf-8'), 
        hashlib.sha512).digest() 

    # update req_kwargs keys 
    req_kwargs['headers'] = {'apisign': sig} 
    req_kwargs['url'] = url 
    return requests.request('GET', **req_kwargs) 

print(make_sign_and_request('getbalances').json()) 

Nun, ich bin kein PHP Assistenten, aber ich bin ziemlich sicher, dass ich den Code in Python ziemlich genau dupliziert haben. Nun, natürlich nicht, sonst würde die Unterschrift akzeptiert werden.

Die API-Schlüssel wurden aktiviert und sollten wie erwartet funktionieren.

Das erwartete Ergebnis in etwa so aussehen sollte, according to the documentation:

{"success":true,"message":"","result":{"Currency":"BTC","Balance":0.00000000,"Available":0,"Pending":0.00000000,"CryptoAddress":""}} 

Antwort

0

Das Problem behoben wurde:

einen Aufruf an hexdigest() auf dem hmac Objekt Hinzufügen behebt das Problem.