Как подключить платежную систему

Платежная система встроена в Telegram.

Для совершения платежей внутри мессенджера необходимо:

  • подключить платежную систему к боту в BotFather

  • перейти в настройки нужного бота и в меню выбрать Payments

  • следуя инструкциям, подключить доступную платежную систему и скопировать выданный токен

                                         ![](https://docs.mavibot.ai/files/1PhZiQDP4PjOrrnX1v6g)<br>
    

Как выставить счет клиенту

Для отправки счета в Telegram используйте метод

tg_send_invoice(provider_token, platform_id, title, description, currency, prices, photo_url, payload, protect_content, disable_notification, need_name, phone_number, need_email, reply_to_message_id, reply_markup, reply_id) — обязательные параметры выделены жирным шрифтом

provider_token — токен, полученный в BotFather после подключения платежной системы

platform_id — получатель: идентификатор пользователя, группы или канала

title — название товара, 1–32 символа

description — описание товара, 1–255 символов

currency — валюта платежа (RUB, USD, UAH и др., см. https://core.telegram.org/bots/payments#supported-currencies)

payload — первая часть метки платежа, по умолчанию tg_payment

prices — разбивка цен (описание ниже)

photo_url — ссылка на изображение товара

disable_notification — 1 — отправить с уведомлением, 0 — без уведомления

protect_content — 1 — защита от копирования и скриншотов, 0 — без защиты

need_name — 1, если для завершения заказа требуется полное имя пользователя, 0 — без запроса имени

need_phone_number — 1, если для завершения заказа требуется номер телефона пользователя, 0 — без запроса номера

need_email — 1, если для завершения заказа требуется адрес электронной почты пользователя, 0 — без запроса почты

reply_to_message_id — идентификатор сообщения, на которое отвечаем; '' — не ответ

reply_markup — клавиатура, первая кнопка должна быть кнопкой с типом pay

Если указан один из параметров need_name, need_phone_number или need_email, пользователю будет предложено ввести данные перед оплатой, и они будут сохранены в переменные клиента при успешном платеже. На скриншоте ниже показан запрос всех данных:

prices — массив массивов с данными о стоимости товара и дополнительных услуг (доставка, упаковка и т.д.). Отображается на странице оплаты. Сумма указывается либо целым числом 125, либо дробным через точку 120.25. Например: [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]

Callback при оплате

После успешной оплаты в чат с пользователем приходит колбэк следующего вида:

phone_best 4737685 2120.75 UAH 1955518436

где phone_best — payload из запроса на создание счета; 473737685 — chat id, которому изначально был отправлен счет; 2120.75 — полная сумма платежа; UAH — валюта; 1955518436 — идентификатор платежа в мерчант-системе

Также, если были запрошены имя, телефон и/или email, клиент запишет переменные:

tg_payment_name, tg_payment_phone и tg_payment_email

В случае успеха колбэк будет отправлен в личные сообщения пользователя. Для этого клиент и бот должны взаимодействовать до оплаты (клиент должен быть подписан на бота)!

После получения хука об оплате платеж будет автоматически подтвержден через answerPreCheckoutQuery (https://core.telegram.org/bots/api#answerprecheckoutquery).

Примеры

prices = [["product", 2000], ["NDS", 20.75], ["package", 100]]
result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'phoneW-200', 'Best Model on the Market', 'UAH', prices, 'https://images11.popmeh.ru/cropped.jpg', 'phone_best', 0, 0, 1, 0, 1)

Пример с минимальным набором параметров

prices = [["an amazing product", 20000]] result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'The best bot ever!',`` 'An amazing course! Be the best!', 'UAH', prices)

Пример с клавиатурой

prices = [["product", 2000], ["NDS", 20.75], ["package", 100]] result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'Phone W-200', 'BEst Model on the Market', 'UAH', prices, 'https://helpix.ru/news/200405/181746/gf200_2.jpg', 'phone_best', 0, 0, 1, 1, 1, '', '{"inline_keyboard": [[{"text":"Pay", "pay":"True"}], [{"text":"One more button", "callback_data": "One more button"}]]}')