Как создать подпись API через hmac в python 3.x - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь преобразовать вызов API REST из Java в Python, но не могу сгенерировать подпись API-заголовка.

Я попробовал следующий код -

consumerKey = "xyz"
consumerSecret = "xyz"
callBackURL = "www.example.com"
t = str(time.time()).split('.')
timestamp = t[0]
oauthstr = client_id + ":" + client_secret
auth = base64.b64encode(oauthstr.encode())
url = "https://example.com/v2/oauth/generateaccesstoken"
querystring = {"grant_type":"client_credentials"}
base_str = callback + client_id + t[0]

signature = hmac.new(str.encode(base_str), str.encode(client_secret), hashlib.sha256).hexdigest()
signature = base64.b64encode(signature.encode())

payload = ""
headers = {
    'Authorization': "Basic "+auth.decode(),
    'signature': signature,
    'timestamp': timestamp,
    }

response = requests.request("POST", url, data=payload, headers=headers, params=querystring)

Я получаю {"Ошибка": "4301"}, что означает - "Подпись HMAC была передана, но не правильная"

В Java, я генерирую подпись, как -

mixcode = callBackURL+consumerKey+timeStamp;
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(consumerSecret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
signature = Base64.encodeBase64String(sha256_HMAC.doFinal(mixcode.getBytes()));
...