Тинькофф оплата по ссылке в телеграмм боте. Как получить оповещения о статусе оплаты? Python
Бот создает ссылку на оплату, оплата работает. Но каим образом получить информацию, что оплата прошла успешно? Задавал вопрос в поддержку, получил ссылку от поддержки тинькофф Знаний не хватает. Вопросы:
- Необходимо вновь отправить запрос к API для получения статуса платежа? сколько запросов и как часто? или
- Тинькофф сам отправляет ответ?, остается его получить и прочитать?
- В настройках терминала Тинькофф есть возможность указать адрес для отправки уведомлений по протоколу HTTP. можно ли это использовать для получения статуса оплаты?
в документации еще сказано, что необходимо после получения статуса платежа отправить ответ, иначе Тинькофф так и будет периодически отправлять статус.
Нужны подсказки, объяснения. Спасибо.
# ===== Создание платежа через Tinkoff API. ==================
async def create_tinkoff_payment(amount: int, order_id: str, description: str) -> str:
async with httpx.AsyncClient() as client:
load_dotenv()
TINKOFF_TERMINAL_KEY = os.getenv("TINKOFF_TERMINAL_KEY")
TINKOFF_API_URL = os.getenv("TINKOFF_API_URL")
payload = {
"TerminalKey": TINKOFF_TERMINAL_KEY,
"Amount": amount * 100, # Tinkoff ожидает сумму в копейках
"OrderId": order_id,
"Description": description,
}
payload["Token"] = generate_tinkoff_token(payload)
# Логирование отправляемого запроса
# print("Отправляемый запрос:", payload)
response = await client.post(TINKOFF_API_URL, json=payload)
response_data = response.json()
# Логирование ответа от Tinkoff
print("Ответ от Tinkoff: ", response)
print("Ответ от Tinkoff: ", response_data)
if response_data.get("Success"):
# print(f'переброс в функцию pay_ok')
# print(f'ответ Т-БАНКА: ', response_data)
return response_data["PaymentURL"]
else:
raise Exception(
f"Ошибка при создании платежа: {response_data.get('Message'), response_data.get('Details')}")
# ================ Генерация токена для Tinkoff API. ==============
def generate_tinkoff_token(payload: dict) -> str:
load_dotenv()
TINKOFF_SECRET_KEY = os.getenv("TINKOFF_SECRET_KEY")
token_str = (
f"{payload['Amount']}{payload['Description']}{payload['OrderId']}"
f"{TINKOFF_SECRET_KEY}{payload['TerminalKey']}")
return hashlib.sha256(token_str.encode("utf-8")).hexdigest()
Вот так создаю ссылку на оплату (код взял на этом же сайте)
Источник: Stack Overflow на русском