2017-12-18 103 views
1

我正在嘗試編寫一個加密貨幣交換的Python包裝器。Rest API參數錯誤

#!/usr/bin/python2.7 
import hashlib 
import hmac 
import time 

base_url = 'https://api.coinnest.co.kr' 

class Coinnest(): 
def __init__(self, key, secret): 
    self.key = key 
    self.secret = secret 

def get_balance(self): 
    url = base_url + '/api/account/balance' 
    nonce = str(int(time.time())*1000) 
    key = hashlib.md5(self.secret).hexdigest() 
    message = 'key={}&nonce={}'.format(self.key, nonce) 
    signature = hmac.new(key, message, hashlib.sha256).hexdigest() 
    payload = {'key': key, 'nonce': nonce, 'signature': signature} 
    r = requests.post(url, data=payload) 
    return r.json() 

coinnest = Coinnest('','') 
print coinnest.get_order_history() 

響應:u'status': 102, u'msg': u'', u'data': u''

根據API響應描述:代碼102意味着

參數錯誤。所需參數丟失或格式錯誤。

我相信我有所有必需的參數1.關鍵2.隨機3.簽名。我是否在錯誤的位置或以錯誤的格式傳送有效載荷?不幸的是,他們的文檔不是很清楚,我是初學者。

謝謝。

+0

有沒有試過郵遞員在代碼之前測試你的請求? – Gahan

+0

我下載郵遞員,試圖通過系統運行我的請求。我不確定我的負載是否屬於授權,標題或正文標籤。 O.Auth 1.0與訪問令牌,令牌密鑰最相似,但md5散列不是標準功能。 – tada23

+0

[offtopic]但我有很多問題to coinnest.co.kr傢伙。爲什麼你會使用一些模糊的哈希算法?爲什麼你會使用隱含的錯誤代碼而不是HTTP錯誤代碼?我感覺你的痛苦OP。[/ offtopic] – vittore

回答

1

文檔很糟糕,但看起來您應該用md5(secret)簽署您的消息,並將key設置爲您的公鑰,該公鑰與md5(secret)不同。

from collections import OrderedDict 
key = self.key 
secret_md5 = hashlib.md5(self.secret).hexdigest() 
signature = hmac.new(secret_md5, message, hashlib.sha256).hexdigest() 
payload = OrderedDict([('key', key), ('nonce', nonce), ('signature', signature)]) 

我還建議使用有序的詞典來強制執行參數順序。

+0

是的。那就對了。 –