Payment in Telegram
How to connect a payment system
The payment system is built into Telegram. To accept payments within the messenger, you need to:
Connect a payment system to your bot using BotFather.
Go to the desired bot settings and select "Payments" from the menu.


Follow the instructions to connect an available payment system and copy the provided token.



How to invoice a client
To send an invoice in Telegram, use the method and specify the required parameters.
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
(required parameter) token obtained from BotFather after connecting the payment system
! platform_id
(required parameter) recipient ID - user, group, or channel identifier
! title
(required parameter) product title, 1–32 characters
! description
(required parameter) product description, 1–255 characters
! currency
(required parameter) payment currency (EUR, USD, UAH, etc.; for more details https://core.telegram.org/bots/payments#supported-currencies )
prices
An array of arrays containing pricing details for product and additional services (delivery, packaging, etc.). Displayed on the payment page. The amount can be specified as either an integer (e.g., 125) or a decimal number using a dot (e.g., 120.25).
For example: [["product", 2000], ["VAT", 20.75], ["packaging", 100]]
photo_url
Product image URL
payload
The first part of payment callback, default is tg_payment
protect_content
1 - protect from copying and screenshots, 0 - no protection
disable_notification
1 - send with notification, 0 - without notification
need_name
1 - require full user name to complete order, 0 - no name request
need_phone_number
1 - require user phone number to complete order, 0 - no phone number request
need_email
1 - require user email to complete order, 0 - no email request
reply_to_message_id
Message ID to reply to; if you want to send the invoice as a separate message, use two single quotes ('')
reply_markup
Keyboard with the first button set to type pay
message_thread_id
Topic ID (available for supergroups with forum functionality enabled)
provider_data
Invoice data in JSON format to be sent to payment service provider. Payment system should provide detailed descriptions of required fields.
IMPORTANT! All parameters must be passed in the order specified in the function. If you need to specify a particular parameter and omit others, leave empty values or values as specified in the documentation for the parameters you don’t need.
Example:

If any of the parameters need_name, need_phone_number, or need_email are enabled, the user will be prompted to provide that information before completing payment. Upon successful payment, the data is saved to the corresponding client variables.
Example:

The result: data is requested before payment.
Payment callback
If a payment is successful, a callback with the following content will be sent to the user’s chat:
tg_payment 1372995196 120.75 USD 2ff747b9-000f-5000-b000-16d7e3517aa9, where
course_pay - payload - the payload from the original invoice creation request;
1372995196 - the chat ID where the invoice was originally sent;
120.75 - the total payment amount;
USD - the currency;
2ff747b9-000f-5000-b000-16d7e3517aa9 - the payment ID in the merchant’s system.

Additionally, if the user's name, phone number, and/or email were requested, the corresponding variables will be assigned to the client:
tg_payment_name, tg_payment_phone и tg_payment_email

Pinned message with a payment button
You need to use the message pinning feature after connecting the payment system.
tg_pin_chat_message(platform_id, message_id, disable_notification)
! platform_id
Telegram chat ID *
message_id
Message ID to be pinned
disable_notification
This parameter defines whether a notification should be sent to all chat members about the newly pinned message. Notifications are always disabled in channels and private chats. To disable notifications, set the disable_notification parameter to 1; otherwise, use 0.
Example:
Step 1: prices = [["course", 100], ["VAT", 20.75]]
result=tg_send_invoice('381764678:TEST:129736', platform_id, 'Course on courses', 'Creating courses is easy', 'USD', prices, 'https://salebot.pro/promo.png', 'course_pay','0', '0', '1', '1', '1', '', '{"inline_keyboard": [[{"text":"Pay", "pay":"True"}]]}')
Step 2: As a result of the first step, you will receive a response from which you need to extract the message_id value using the get() function. res=get(result,'result') m_id=get(res,'message_id')

Next, pin the message: tg_pin_chat_message(#{platform_id}, #{m_id}, 1)
Example: minimal set of parameters
prices = [["super course", 100]]
result= tg_send_invoice('381764678:TEST:129736', platform_id, 'Course on courses', 'Creating courses is super easy', 'USD', prices)

Example: keyboard
prices = [["course", 100], ["VAT", 20.75]]
tg_send_invoice('381764678:TEST:129736', platform_id, 'Course on courses', 'Creating courses is easy, '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