CryptoBot REST API + Telegram Bot -- отслеживание платежа, реализация проверки платежа
Доброе утро, хотел бы узнать о том, как возможно реализовать грамотную проверку платежа чеком с помощью CryptoBot REST API (https://help.crypt.bot/crypto-pay-api). Итак, изначально работаем с методом HTTP POST ---> https://pay.crypt.bot/api/createInvoice cо следующими заголовками:
headers = {
"Crypto-Pay-API-Token": "crypto_bot_token",
"Content-Type": "application/json"
}
и с таким набором данных
data = {
"asset": "USDT", #опционально, оплата в USDT
"amount": str(amount), #сумма, определяется float, далее --> str()
"description": description, #описание, опционально
"payload": str(user_id)
# ^^^^^^ опционально, в данном контексте берет user_id, связанный с id
пользователем телеграмм, такое странное ухищрение
}
Итак, создастся чек, который можно будет получить посредством метода getInvoices (на самом деле, там будут все созданные и оплаченные платежи, т.е. status: active/paid).
Забуксовал, поскольку, во-первых, стоит понимать, что в дальнейшем из-за количества пользователей (теоретически) ответ от REST API будет в виде кучи JSON, в которых куча объектов, а реализация проверки идет через итерацию по этому двумерному массиву, или по JSON, не уверен как уместнее.
Далее, возникает логический вопрос, хорошо, допустим, мы можем отслеживать еще по какому-либо параметру (поскольку по payload, который связан с user_id и status : paid логично вызывает проблемы, пользователь будет получать товар бесконечно, если оплатил хотя-бы раз), который является уникальным, например, invoice_id, hash, или делать кастомный payload (вариантов хватает), но за этим следует масса вопросов: делать таблицу sql? а если пользователь создаст чек, потом еще создаст чек, какой-то из них оплатит, как проверять, может, state'ы? Нужно так же как-то грамотно очищать json ответ, чтобы чеки status : active не лежали и не мешали интерациям, для этого существует метод deleteInvoice, но тоже спорная вещь, например, пользователь создаст чек, перейдет в бота, инвойс исчезнет, кто знает к каким это приведет ошибкам.
концептуально-рабочий код
Не ругайтесь на отсутствие try-catch-exception, в исходном коде она присутствует и реализована в функции, прикрепляю как работает концептуально, что выводит (справа - создание чека-платежа, слева - его отслеживание), разумеется, токен криптобота скрыт.
И да, после оплаты status меняется на paid, то есть в коде слева проверка была бы видоизменена
if (invoice.get("payload") == str(user_id) and invoice.get("status") == "paid"): --> "paid"
Хотел бы узнать, как можно грамотно построить проверку, что использовать, от чего отталкиваться, с учетом того, что это бот в телеграмме.
