Описание
Используйте этот метод для отправки счетов. При успешном выполнении возвращается отправленное Message.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| chat_id | Целое число или строка | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Целое число | Необязательный | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Целое число | Необязательный | Идентификатор темы личных сообщений, в которую будет отправлено сообщение; требуется, если сообщение отправляется в чат личных сообщений |
| title | Строка | Да | Название товара, 1-32 символа |
| description | Строка | Да | Описание товара, 1-255 символов |
| payload | Строка | Да | Определённая ботом полезная нагрузка счёта, 1-128 байт. Не отображается пользователю, используйте её для ваших внутренних процессов. |
| provider_token | Строка | Необязательный | Токен платёжного провайдера, полученный через @BotFather. Передайте пустую строку для платежей в Telegram Stars. |
| currency | Строка | Да | Трёхбуквенный код валюты ISO 4217, см. подробнее о валютах. Передайте «XTR» для платежей в Telegram Stars. |
| prices | Массив LabeledPrice | Да | Разбивка цены, JSON-сериализованный список компонентов (например, цена товара, налог, скидка, стоимость доставки, налог на доставку, бонус и т.д.). Должен содержать ровно один элемент для платежей в Telegram Stars. |
| max_tip_amount | Целое число | Необязательный | Максимально принимаемая сумма чаевых в наименьших единицах валюты (целое число, не число с плавающей запятой/double). Например, для максимальных чаевых в 1,45 долл. США передайте max_tip_amount = 145. См. параметр exp в currencies.json, он показывает количество цифр после десятичной точки для каждой валюты (2 для большинства валют). По умолчанию 0. Не поддерживается для платежей в Telegram Stars. |
| suggested_tip_amounts | Массив целых чисел | Необязательный | JSON-сериализованный массив предлагаемых сумм чаевых в наименьших единицах валюты (целое число, не число с плавающей запятой/double). Можно указать не более 4 предлагаемых сумм чаевых. Предлагаемые суммы чаевых должны быть положительными, переданы в строго возрастающем порядке и не должны превышать max_tip_amount. |
| start_parameter | Строка | Необязательный | Уникальный параметр глубокой ссылки. Если оставить пустым, пересланные копии отправленного сообщения будут иметь кнопку Оплатить, позволяя нескольким пользователям оплачивать прямо из пересланного сообщения, используя тот же счёт. Если не пустой, пересланные копии отправленного сообщения будут иметь кнопку URL с глубокой ссылкой на бота (вместо кнопки Оплатить), где значение используется как стартовый параметр. |
| provider_data | Строка | Необязательный | JSON-сериализованные данные о счёте, которые будут переданы платёжному провайдеру. Подробное описание обязательных полей должно быть предоставлено платёжным провайдером. |
| photo_url | Строка | Необязательный | URL фотографии товара для счёта. Может быть фотографией товара или маркетинговым изображением для услуги. Людям больше нравится, когда они видят, за что платят. |
| photo_size | Целое число | Необязательный | Размер фотографии в байтах |
| photo_width | Целое число | Необязательный | Ширина фотографии |
| photo_height | Целое число | Необязательный | Высота фотографии |
| need_name | Логический | Необязательный | Передайте True, если вам требуется полное имя пользователя для завершения заказа. Игнорируется для платежей в Telegram Stars. |
| need_phone_number | Логический | Необязательный | Передайте True, если вам требуется номер телефона пользователя для завершения заказа. Игнорируется для платежей в Telegram Stars. |
| need_email | Логический | Необязательный | Передайте True, если вам требуется адрес электронной почты пользователя для завершения заказа. Игнорируется для платежей в Telegram Stars. |
| need_shipping_address | Логический | Необязательный | Передайте True, если вам требуется адрес доставки пользователя для завершения заказа. Игнорируется для платежей в Telegram Stars. |
| send_phone_number_to_provider | Логический | Необязательный | Передайте True, если номер телефона пользователя должен быть отправлен провайдеру. Игнорируется для платежей в Telegram Stars. |
| send_email_to_provider | Логический | Необязательный | Передайте True, если адрес электронной почты пользователя должен быть отправлен провайдеру. Игнорируется для платежей в Telegram Stars. |
| is_flexible | Логический | Необязательный | Передайте True, если итоговая цена зависит от способа доставки. Игнорируется для платежей в Telegram Stars. |
| disable_notification | Логический | Необязательный | Отправляет сообщение бесшумно. Пользователи получат уведомление без звука. |
| protect_content | Логический | Необязательный | Защищает содержимое отправленного сообщения от пересылки и сохранения |
| allow_paid_broadcast | Логический | Необязательный | Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения рассылки за плату в размере 0,1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота. |
| message_effect_id | Строка | Необязательный | Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для личных чатов |
| suggested_post_parameters | SuggestedPostParameters | Необязательный | JSON-сериализованный объект, содержащий параметры предлагаемой публикации для отправки; только для чатов личных сообщений. Если сообщение отправляется в ответ на другую предлагаемую публикацию, то эта предлагаемая публикация автоматически отклоняется. |
| reply_parameters | ReplyParameters | Необязательный | Описание сообщения, на которое нужно ответить |
| reply_markup | InlineKeyboardMarkup | Необязательный | JSON-сериализованный объект для встроенной клавиатуры. Если пустой, будет показана одна кнопка 'Оплатить общая цена'. Если не пустой, первая кнопка должна быть кнопкой Оплатить. |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendInvoice";
$chatId = 123456789; // или '@channelusername'
$payload = uniqid('invoice_', true); // уникальный payload для идентификации платежа
$providerToken = 'YOUR_PROVIDER_TOKEN'; // токен от @BotFather, для Stars оставить пустую строку
$data = [
'chat_id' => $chatId,
'title' => 'Premium Subscription',
'description' => 'Access to all premium features for 1 month',
'payload' => $payload,
'provider_token' => $providerToken,
'currency' => 'USD',
'prices' => json_encode([
['label' => 'Subscription', 'amount' => 999] // $9.99 в центах
]),
'max_tip_amount' => 500, // $5.00 максимальные чаевые
'suggested_tip_amounts' => json_encode([100, 200, 300, 500]), // $1, $2, $3, $5
'start_parameter' => 'premium_sub',
'photo_url' => 'https://example.com/product.jpg',
'photo_size' => 20000,
'photo_width' => 400,
'photo_height' => 300,
'need_name' => true,
'need_email' => true,
'need_shipping_address' => false,
'is_flexible' => false,
'disable_notification' => false,
'protect_content' => false,
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Pay Now', 'pay' => true],
['text' => 'Cancel', 'callback_data' => 'cancel_invoice']
]
]
])
];
// Отправка запроса через cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // только для тестов, в продакшене убрать
$response = curl_exec($ch);
curl_close($ch);
// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
echo "Invoice sent successfully. Message ID: " . $result['result']['message_id'];
} else {
echo "Error: " . $result['description'];
}
// Альтернативный вариант с использованием библиотеки (например, TelegramBotPHP)
class TelegramBot {
private $token;
public function __construct($token) {
$this->token = $token;
}
public function sendInvoice($params) {
$url = "https://api.telegram.org/bot{$this->token}/sendInvoice";
// Подготовка prices
if (isset($params['prices']) && is_array($params['prices'])) {
$params['prices'] = json_encode($params['prices']);
}
// Подготовка reply_markup
if (isset($params['reply_markup']) && is_array($params['reply_markup'])) {
$params['reply_markup'] = json_encode($params['reply_markup']);
}
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: multipart/form-data']
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Пример использования класса
$bot = new TelegramBot($botToken);
$invoiceParams = [
'chat_id' => $chatId,
'title' => 'Digital Product',
'description' => 'Instant download of digital content',
'payload' => 'order_12345',
'provider_token' => $providerToken,
'currency' => 'EUR',
'prices' => [
['label' => 'Product', 'amount' => 2990],
['label' => 'VAT 20%', 'amount' => 598]
],
'need_email' => true,
'photo_url' => 'https://example.com/digital.jpg'
];
$result = $bot->sendInvoice($invoiceParams);
if ($result['ok']) {
// Инвойс успешно отправлен
$message = $result['result'];
file_put_contents('invoice_log.txt',
date('Y-m-d H:i:s') . " - Invoice sent to {$chatId}\n",
FILE_APPEND
);
}
// Пример для Telegram Stars (без provider_token)
$starsInvoice = [
'chat_id' => $chatId,
'title' => '100 Telegram Stars',
'description' => 'Purchase Stars for premium content',
'payload' => 'stars_purchase_001',
'provider_token' => '', // Пустая строка для Stars
'currency' => 'XTR', // Валюта для Stars
'prices' => [
['label' => 'Stars', 'amount' => 100] // ровно один элемент для Stars
],
'photo_url' => 'https://example.com/stars.jpg'
];
?>
python
import asyncio
from telegram import Bot, LabeledPrice
from telegram.constants import ParseMode
async def send_invoice_example():
# Инициализация бота с токеном
bot = Bot(token="YOUR_BOT_TOKEN")
# Параметры для отправки инвойса
chat_id = 123456789 # ID чата пользователя
title = "Premium Subscription"
description = "Access to premium features for 1 month"
payload = "subscription_001" # Внутренний идентификатор
provider_token = "YOUR_PROVIDER_TOKEN" # Токен платежного провайдера
currency = "USD"
# Цены (в минимальных единицах валюты, например центы для USD)
prices = [
LabeledPrice(label="Monthly Subscription", amount=999), # $9.99
]
# Дополнительные параметры (опционально)
suggested_tip_amounts = [100, 200, 300, 500] # $1, $2, $3, $5
max_tip_amount = 1000 # $10
photo_url = "https://example.com/product.jpg"
try:
# Отправка инвойса
message = await bot.send_invoice(
chat_id=chat_id,
title=title,
description=description,
payload=payload,
provider_token=provider_token,
currency=currency,
prices=prices,
max_tip_amount=max_tip_amount,
suggested_tip_amounts=suggested_tip_amounts,
photo_url=photo_url,
need_email=True, # Запрашиваем email
need_shipping_address=False,
is_flexible=False,
disable_notification=False,
protect_content=False
)
print(f"Invoice sent successfully! Message ID: {message.message_id}")
except Exception as e:
print(f"Error sending invoice: {e}")
# Запуск асинхронной функции
if __name__ == "__main__":
asyncio.run(send_invoice_example())
История изменений
- API 3.0. Добавлен метод sendInvoice
- API 3.5. Обновлен метод sendInvoice: Добавлены поля provider_data, send_phone_number_to_provider, send_email_to_provider
- API 5.0. Обновлен метод sendInvoice: Добавлено поле allow_sending_without_reply
- API 5.2. Обновлен метод sendInvoice: Добавлены поля max_tip_amount и suggested_tip_amounts для добавления чаевых, параметр start_parameter стал опциональным
- API 5.6. Обновлен метод sendInvoice: Добавлено поле protect_content
- API 6.3. Обновлен метод sendInvoice: Добавлен параметр message_thread_id
- API 7.0. Обновлен метод sendInvoice: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendInvoice: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendInvoice: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendInvoice: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendInvoice: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- LabeledPrice - Объект, представляющий отдельную позицию в структуре цены товаров или услуг с указанием названия и стоимости в минимальных единицах валюты.
- SuggestedPostParameters - Объект содержит параметры публикации, предлагаемой ботом, включая цену и дату отправки.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.