Оплата в Telegram
Как подключить платёжную систему
Платёжная система встроена в Telegram. Чтобы принимать платежи внутри мессенджера, вам нужно:
Подключить платёжную систему к вашему боту с помощью BotFather.
Перейдите в настройки нужного бота и выберите «Платежи» в меню.


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



Как выставить счёт клиенту
Чтобы отправить счёт в Telegram, используйте метод и укажите необходимые параметры.
tg_send_invoice(provider_token, platform_id, title, description, currency, prices, photo_url, payload, protect_content, disable_notification, need_name, need_phone_number, need_email, reply_to_message_id, reply_markup, message_thread_id, provider_data)
! provider_token
(обязательный параметр) токен, полученный от BotFather после подключения платёжной системы
! platform_id
(обязательный параметр) ID получателя — идентификатор пользователя, группы или канала
! title
(обязательный параметр) название товара, 1–32 символа
! description
(обязательный параметр) описание товара, 1–255 символов
! currency
(обязательный параметр) валюта платежа (EUR, USD, UAH и т. д.; подробнее https://core.telegram.org/bots/payments#supported-currencies )
prices
Массив массивов, содержащий сведения о ценах на товар и дополнительные услуги (доставка, упаковка и т. д.). Отображается на странице оплаты. Сумма может быть указана либо как целое число (например, 125), либо как десятичное число через точку (например, 120.25).
Например: [["product", 2000], ["VAT", 20.75], ["packaging", 100]]
photo_url
URL изображения товара
payload
Первая часть callback для оплаты, по умолчанию tg_payment
protect_content
1 — защищать от копирования и скриншотов, 0 — без защиты
disable_notification
1 — отправить с уведомлением, 0 — без уведомления
need_name
1 — запросить полное имя пользователя для завершения заказа, 0 — не запрашивать имя
need_phone_number
1 — запросить номер телефона пользователя для завершения заказа, 0 — не запрашивать номер телефона
need_email
1 — запросить email пользователя для завершения заказа, 0 — не запрашивать email
reply_to_message_id
ID сообщения, на которое нужно ответить; если вы хотите отправить счёт как отдельное сообщение, используйте две одинарные кавычки ('')
reply_markup
Клавиатура с первой кнопкой типа pay
message_thread_id
ID темы (доступно для супергрупп с включённой функцией форумов)
provider_data
Данные счёта в JSON формате, которые будут отправлены поставщику платёжных услуг. Платёжная система должна предоставить подробные описания необходимых полей.
ВАЖНО! Все параметры должны передаваться в порядке, указанном в функции. Если вам нужно указать конкретный параметр и опустить остальные, оставьте пустые значения или значения, как указано в документации для параметров, которые вам не нужны.
Пример:

Если любой из параметров need_name, need_phone_number, или need_email включён, пользователю будет предложено предоставить эту информацию перед завершением оплаты. После успешной оплаты данные сохраняются в соответствующих переменных клиента.
Пример:

Результат: данные запрашиваются до оплаты.
Платежный callback
Если платёж успешен, в чат пользователя будет отправлен callback со следующим содержимым:
tg_payment 1372995196 120.75 USD 2ff747b9-000f-5000-b000-16d7e3517aa9, где
course_pay - payload - payload из исходного запроса на создание счёта;
1372995196 - ID чата, в который изначально был отправлен счёт;
120.75 - общая сумма платежа;
USD - валюта;
2ff747b9-000f-5000-b000-16d7e3517aa9 - ID платежа в системе продавца.

Кроме того, если были запрошены имя, номер телефона и/или email пользователя, соответствующие переменные будут присвоены клиенту:
tg_payment_name, tg_payment_phone и tg_payment_email

Пользователю будет отправлен callback об успешной оплате в личные сообщения с ботом.
У пользователя должен быть существующий чат с ботом (то есть он должен был запустить бота или подписаться на него) до до совершения оплаты. В противном случае бот не сможет отправить ему личное сообщение.
После получения webhook об оплате платёж будет автоматически подтверждён через метод answerPreCheckoutQuery. https://core.telegram.org/bots/api#answerprecheckoutquery
Закреплённое сообщение с кнопкой оплаты
Вам нужно использовать функцию закрепления сообщения после подключения платёжной системы.
tg_pin_chat_message(platform_id, message_id, disable_notification)
! platform_id
ID чата Telegram *
message_id
ID сообщения, которое нужно закрепить
disable_notification
Этот параметр определяет, должно ли быть отправлено уведомление всем участникам чата о новом закреплённом сообщении. Уведомления всегда отключены в каналах и личных чатах. Чтобы отключить уведомления, установите параметр disable_notification в 1; в противном случае используйте 0.
Пример:
Шаг 1: prices = [["course", 100], ["VAT", 20.75]]
result=tg_send_invoice('381764678:TEST:129736', platform_id, 'Курс о курсах', 'Создавать курсы легко', 'USD', prices, 'https://salebot.pro/promo.png'', 'course_pay','0', '0', '1', '1', '1', '', '{"inline_keyboard": [[{"text":"Pay", "pay":"True"}]]}')
Шаг 2: В результате первого шага вы получите ответ, из которого нужно извлечь message_id значение с помощью функции get() . res=get(result,'result') m_id=get(res,'message_id')

Далее закрепите сообщение: tg_pin_chat_message(#{platform_id}, #{m_id}, 1)
Пример: минимальный набор параметров
prices = [["super course", 100]]
result= tg_send_invoice('381764678:TEST:129736', platform_id, 'Курс о курсах', 'Создавать курсы очень легко', 'USD', prices)

Пример: клавиатура
prices = [["course", 100], ["VAT", 20.75]]
tg_send_invoice('381764678:TEST:129736', platform_id, 'Курс о курсах', 'Создавать курсы легко, 'USD', prices, 'https://mavibot.ai/promo.png', 'course_pay','0', '0', '1', '1', '1', '', '{"inline_keyboard": [[{"text":"Pay", "pay":"True"}], [{"text":"Another button", "callback_data": "Another button"}]]}')

Последнее обновление