Оплата в 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-currenciesarrow-up-right )

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 форматі, які будуть надіслані постачальнику платіжних послуг. Платіжна система повинна надати докладні описи обов’язкових полів.

circle-exclamation

Приклад:

Якщо будь-які з параметрів need_name, need_phone_number, або need_email увімкнено, користувачеві буде запропоновано надати цю інформацію перед завершенням оплати. Після успішної оплати дані зберігаються у відповідних змінних клієнта.

Приклад:

Результат: дані запитуються перед оплатою.

Платіжний callback

Якщо платіж успішний, у чат користувача буде надіслано callback із таким вмістом:

tg_payment 1372995196 120.75 USD 2ff747b9-000f-5000-b000-16d7e3517aa9, де

  1. course_pay - payload - payload із початкового запиту на створення рахунку;

  2. 1372995196 - ID чату, куди спочатку було надіслано рахунок;

  3. 120.75 - загальна сума платежу;

  4. USD - валюта;

  5. 2ff747b9-000f-5000-b000-16d7e3517aa9 - ID платежу в системі продавця.

Крім того, якщо було запитано ім’я, номер телефону та/або email користувача, відповідні змінні буде призначено клієнту:

tg_payment_name, tg_payment_phone і tg_payment_email

circle-info

Успішний payment callback буде надіслано в прямі повідомлення користувачу від бота.

Користувач повинен мати наявний чат із ботом (тобто він має розпочати або підписатися на бота), перед коли здійснюється платіж. Інакше бот не зможе надіслати йому пряме повідомлення.

circle-info

Після отримання платіжного webhook платіж буде автоматично підтверджено через метод answerPreCheckoutQuery. https://core.telegram.org/bots/api#answerprecheckoutqueryarrow-up-right

Закріплене повідомлення з кнопкою оплати

Потрібно використовувати функцію закріплення повідомлень після підключення платіжної системи.

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