Оплата в 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

Успішний payment 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"}]]}')

Last updated