ку форумчане. подключаю тинько в тг боте, юзаю боевой терминал, оплата проходит, деньги списываются, но при ручной проверке статуса (/v2/GetState) API возвращает ошибку: {'Success': False, 'ErrorCode': '204', 'Message': 'Неверные параметры.', 'Details': 'Неверный токен. Проверьте пару TerminalKey/SecretKey.'} В Init всё отрабатывает корректно, вот структура запроса (тело запроса POST /v2/Init): { "TerminalKey": "ид постояного терминала без ошибок ввожу", "Amount": 100, "OrderId": "ec1c11****02e46", "Description": "Тестовая подписка", "Token": "тут сгенерил ключ по sha256", "DATA": { "Phone": "+7...", "UserId": "123456" }, "Receipt": { "Email": "user123456@marinago.club", "Phone": "+7...", "Taxation": "usn_income", "Items": [ { "Name": "Тестовая подписка", "Price": 100, "Quantity": 1, "Amount": 100, "Tax": "none" } ] } } JS { "TerminalKey": "ид постояного терминала без ошибок ввожу", "Amount": 100, "OrderId": "ec1c11****02e46", "Description": "Тестовая подписка", "Token": "тут сгенерил ключ по sha256", "DATA": { "Phone": "+7...", "UserId": "123456" }, "Receipt": { "Email": "user123456@marinago.club", "Phone": "+7...", "Taxation": "usn_income", "Items": [ { "Name": "Тестовая подписка", "Price": 100, "Quantity": 1, "Amount": 100, "Tax": "none" } ] } } в ответ получаю Success: true, валидный PaymentId, и ссылку на оплату. оплата проходит, деньги списываются. но при ручной проверке статуса оплаты: { "TerminalKey": "17*****298", "OrderId": "...", "PaymentId": "...", "Token": "<SHA256: terminalKey + OrderId + PaymentId + SecretKey>" } JS { "TerminalKey": "17*****298", "OrderId": "...", "PaymentId": "...", "Token": "<SHA256: terminalKey + OrderId + PaymentId + SecretKey>" } уже делал: - ключи и токен точно из боевого терминала - терминал НЕ ДЕМО - пэймент ид точно же тот, что возвращается из Init - порядок и формат токена делал по документации сталкивался ли кто-то с такой проблемой? может ли быть, что в настройках терминала не активирована проверка токенов / подписей? или мб нужна доп активация ?
Скинь код для генерации токена. В примере ты не в том порядке конкатинируеш его части https://www.tbank.ru/kassa/dev/payments/#section/Token Тоесть нужно либо написать функцию для генерации токена, либо вручную в правильном порядке конкатинировать Я так понял, что SecretKey - пароль? Тогда <SHA256: OrderId + Password + PaymentId + TerminalKey>
Вот более менее окей фунция для подписи def sign_data(data: dict, password: str) -> dict: fields = list(data.items()) fields.append(("Password", password)) fields.sort(key=lambda x: x[0]) values = "".join([str(x[1]) for x in fields]) token = hashlib.sha256(bytes(values, encoding="utf-8")) data["Token"] = token.hexdigest() return data Python def sign_data(data: dict, password: str) -> dict: fields = list(data.items()) fields.append(("Password", password)) fields.sort(key=lambda x: x[0]) values = "".join([str(x[1]) for x in fields]) token = hashlib.sha256(bytes(values, encoding="utf-8")) data["Token"] = token.hexdigest() return data Взял тут