Tinkoff Kassa API python

Рейтинг: 0Ответов: 2Опубликовано: 14.05.2023

хотел бы создать интеграцию с Tinkoff Kassa API, но не сильно получается - выдает 400 ошибку. Хотел бы понять, в чем проблема

Ссылка на документацию - https://www.tinkoff.ru/kassa/develop/api/payments/init-description/

Код, который я пытался использовать:

import requests    
headers = {'content-type': 'application/json', 'Accept-Encoding': 'gzip, deflate, br', 'host': 'securepay.tinkoff.ru', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0}', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Connection': 'keep-alive'}
api_request = requests.post('https://securepay.tinkoff.ru/v2/Init', headers=headers, data={'TerminalKey': 'TerminalKey(убрал, но он есть)', 'Amount': 100, 'OrderId': 0})

Ответы

▲ 1Принят

В ваших параметрах не хватает поля "token". Подбронее про процедуру получения токена => тык

Для Python я реализовал следующий алгоритм получения токена:

r = {
    "TerminalKey": terminalkey,
    "Amount": 1000,
    "OrderId": "1",
    "Password": password
}

t = []

for key, value in r.items():
    t.append({key: value})
t = sorted(t, key=lambda x: list(x.keys())[0])
t = "".join(str(value) for item in t for value in item.values())
sha256 = hashlib.sha256()
sha256.update(t.encode('utf-8'))
t = sha256.hexdigest()
r["Token"] = t

▲ 0

Необходимо добавить поле 'Token'
>> Пример работы с t-kassa на python здесь

Вот общее решение для нахождение токена:

from hashlib import sha256

def generate_token(
    payload: dict,
    password: str
) -> str:
    token_data = {**payload, "Password": password}
    token_str = ''.join(
        [str(token_data[key]) for key in sorted(token_data.keys()) 
            if not isinstance(token_data[key], dict)]
    )
    return sha256(token_str.encode("utf-8")).hexdigest()