2016-11-17 88 views
1

我正在使用Python 2.7中的代碼,但是當我在3.6中使用它時,它不起作用。它旨在爲亞馬遜MWS API調用編碼簽名。在3.x和2.x中的Python HMAC /編碼

原來的代碼在Python 2.7:

sig_encoded = base64.b64encode(hmac.new(str(self.secret_key), sig_data, hashlib.sha256).digest()) 

我在這裏讀了一些其他的職位,按照說明,並與此想出了:

的Python 3.6

key_enc = (bytes(self.secret_key, "utf-8")) 
    sig_data_enc = (bytes(sig_data, "utf-8")) 
    sig_encoded = base64.b64encode(hmac.new(key_enc, sig_data_enc, hashlib.sha256).digest()) 

然而,這會從API返回錯誤。 Python 3.6中使用的版本有什麼問題?

謝謝!

回答

1

我能找到答案。在Python 3.6中工作的代碼是:

return base64.b64encode(
     hmac.new(str(self.secret_key).encode('utf-8'), sig_data.encode('utf-8'), hashlib.sha256).digest())