Оплата Telegram
Last updated
Last updated
Платежная система встроена в Телеграм. Для того чтобы совершать платежи внутри мессенджера, нужно:
подключить платежную систему к боту в боте Botfather
перейти в настройки нужного бота и в меню выбрать Payments
следуя инструкциям, подключить доступную платежную систему и скопировать выданный токен
Для отправки инвойса в 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 | (обязательный параметр) идентификатор получателя - пользователя, группы или канала |
! title | (обязательный параметр) заголовок товара, 1-32 символа |
! description | (обязательный параметр) описание товара, 1-255 символов |
! currency | (обязательный параметр) валюта платежа (RUB, USD, UAH и тд подробнее https://core.telegram.org/bots/payments#supported-currencies ) |
prices | массив массивов с данными по стоимости товара и дополнительных услуг (доставки, упаковки и тд). Отображается на странице оплаты. Сумма указывается либо целым числом 125, либо дробным через точку 120.25 Например: [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]] |
photo_url | ссылка на картинку товара |
payload | первая часть колбека об оплате, по умолчанию tg_payment |
protect_content | 1 защитить от копирования и скриншотов, 0 - без защиты |
disable_notification | 1 - отправить с уведомлением, 0 - без уведомления |
need_name | 1, если вам требуется полное имя пользователя для завершения заказа, 0 - без запроса имени |
need_phone_number | 1, если вам требуется номер телефона пользователя для завершения заказа, 0 - без запроса номера |
need_email | 1, если вам требуется емейл пользователя для завершения заказа, 0 - без запроса почты |
reply_to_message_id | id сообщения, на которое отвечаем, если хотите отправить инвойс отдельным сообщение, то поставьте две одинарные кавычки |
reply_markup | клавиатура, первой кнопкой должна быть кнопка с типом pay |
message_thread_id | идентификатор темы (доступно для супергрупп при наличии функционала форума) |
provider_data | данные о счете в формате JSON, которые будут переданы поставщику платежных услуг. Платежная система должна предоставить подробное описание обязательных полей. |
Важно! Все параметры необходимо передать в порядке, в котором они указаны в функции. Если вам необходимо указать какой-то определённый параметр и опустить другие, на месте параметров, которые вам не нужны, оставляйте пустые значения или значения, соответствующие документации.
Пример вызова функции:
Если указан один из параметров need_name, need_phone_number или need_email, то перед оплатой у пользователя запросит эти данные и при успешной оплате сохранит их в переменные клиента. На скриншоте ниже запрос на ввод всех данных:
prices - массив массивов с данными по стоимости товара и дополнительных услуг (доставки, упаковки и тд). Отображается на странице оплаты. Сумма указывается либо целым числом 125, либо дробным через точку 120.25
Например: [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]]
После успешной оплаты в чат с пользователем придет колбэк следующего содержания:
phone_best 473737685 2120.75 UAH 1955518436 , где
phone_best - payload - из запроса на создание инвойса;
473737685 - ID чата, в который изначально был отправлен инвойс;
2120.75 - полная сумма платежа;
UAH - валюта;
1955518436 - ID платежа в системе мерчанта.
А также если запрашивали ввод имени, телефона и/или email, то у клиента пропишутся переменные:
tg_payment_name, tg_payment_phone и tg_payment_email
В случае успеха колбэк об оплате будет отправлен в личные сообщения пользователю. Для этого обязательно взаимодействие клиента и бота до платежа (клиент должен быть подписан на бота)!
После получения хука об оплате, платеж будет автоматически подтвержден, методом answerPreCheckoutQuery https://core.telegram.org/bots/api#answerprecheckoutquery
Сделаем кнопку оплаты в закрепленном сообщении, как на примере ниже:
После подключения платежной системы необходимо воспользоваться функцией закрепления сообщений - tg_pin_chat_message(platform_id, message_id, disable_notification)
Параметры функции | Описание |
---|---|
! platform_id | идентификатор чата внутри Telegram * |
message_id | идентификатор сообщения, которое нужно закрепить |
disable_notification | параметр определяет нужно ли отправлять уведомление всем участникам чата о новом закрепленном сообщении (уведомления всегда отключены в каналах и приватных чатах). Если не нужно отправлять уведомления, то в качестве значения параметра disable_notification передайте 1, иначе - 0. |
Пример:
1 шаг: prices = [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]] result = tg_send_invoice('632593626:TEST:sandbox_i38014109764', platform_id, 'Телефон У-200', 'Лучшая модель на рынке', 'UAH', prices, 'https://helpix.ru/news/200405/181746/gf200_2.jpg', 'phone_best', 0, 0, 1, 1, 1, '', '{"inline_keyboard": [[{"text":"Оплатить", "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 = [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]] result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'Телефон У-200', 'Лучшая модель на рынке', 'UAH', prices, 'https://images11.popmeh.ru/cropped.jpg', 'phone_best', 0, 0, 1, 0, 1)
После выполнения функции, пользователю отправится приглашение оплатить товар:
prices = [["курс супер", 20000]]
result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'Курс - лучший бот', 'Супер курс, станешь мастером!', 'UAH', prices)
prices = [["товар", 2000], ["НДС", 20.75], ["упаковка", 100]] result = tg_send_invoice('632593626:TEST:sandbox_i38014109763', platform_id, 'Телефон У-200', 'Лучшая модель на рынке', 'UAH', prices, 'https://helpix.ru/news/200405/181746/gf200_2.jpg', 'phone_best', 0, 0, 1, 1, 1, '', '{"inline_keyboard": [[{"text":"Оплатить", "pay":"True"}], [{"text":"Еще кнопка", "callback_data": "Еще кнопка"}]]}')