В проекте из пяти подключенных платежных провайдеров на текущий момент работают два. Еще два провайдера были полностью удалены из системы, а один остался в виде неиспользуемого клиентского класса. Также предусмотрена поддержка криптовалют, однако соответствующий клиентский API в данный момент не используется.
Для унификации работы с разными способами оплаты внедрен интерфейс InvoiceContract. Он стандартизирует данные о плательщике, продукте и суммах, что позволяет избежать дублирования логики при добавлении новых провайдеров. Финансовые расчеты ведутся в минимальных единицах с приведением типов для исключения ошибок округления.
При использовании нативных платежей Telegram в поле payload записывается идентификатор записи в базе данных. Система должна отвечать на запрос pre_checkout_query в течение 10 секунд. Для возможности возврата средств через API необходимо сохранять идентификатор telegramPaymentChargeId, полученный после успешной оплаты.
Внешние провайдеры передают данные через вебхуки, подлинность которых проверяется с помощью HMAC от сырого тела запроса. Для защиты от подбора подписи используется функция hash_equals. При обработке вебхуков важно корректно использовать HTTP-коды: 4xx означают отказ от обработки, а 5xx — необходимость повторной попытки для предотвращения потери платежей.






