Описание
Используйте этот метод для создания ссылки на счёт. В случае успеха возвращает созданную ссылку на счёт в виде String.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Опционально | Уникальный идентификатор бизнес-подключения, от имени которого будет создана ссылка. Только для платежей в Telegram Stars. |
| title | String | Да | Название товара, 1-32 символа |
| description | String | Да | Описание товара, 1-255 символов |
| payload | String | Да | Определённая ботом полезная нагрузка счёта, 1-128 байт. Не отображается пользователю, используйте для внутренних процессов. |
| provider_token | String | Опционально | Токен платёжного провайдера, полученный через @BotFather. Передайте пустую строку для платежей в Telegram Stars. |
| currency | String | Да | Трёхбуквенный код валюты ISO 4217, см. подробнее о валютах. Передайте «XTR» для платежей в Telegram Stars. |
| prices | Array of LabeledPrice | Да | Разбивка цены, JSON-сериализованный список компонентов (например, цена товара, налог, скидка, стоимость доставки, налог на доставку, бонус и т.д.). Должен содержать ровно один элемент для платежей в Telegram Stars. |
| subscription_period | Integer | Опционально | Количество секунд, в течение которых подписка будет активна до следующего платежа. Валюта должна быть установлена в «XTR» (Telegram Stars), если параметр используется. В настоящее время, если указан, должен всегда равняться 2592000 (30 дней). У данного бота одновременно может быть активно любое количество подписок, включая несколько параллельных подписок от одного пользователя. Цена подписки не должна превышать 10000 Telegram Stars. |
| max_tip_amount | Integer | Опционально | Максимально принимаемая сумма чаевых в наименьших единицах валюты (целое число, не float/double). Например, для максимальных чаевых в US$ 1.45 передайте max_tip_amount = 145. См. параметр exp в currencies.json, он показывает количество цифр после десятичной точки для каждой валюты (2 для большинства валют). По умолчанию 0. Не поддерживается для платежей в Telegram Stars. |
| suggested_tip_amounts | Array of Integer | Опционально | JSON-сериализованный массив предлагаемых сумм чаевых в наименьших единицах валюты (целое число, не float/double). Можно указать не более 4 предлагаемых сумм чаевых. Предлагаемые суммы чаевых должны быть положительными, переданы в строго возрастающем порядке и не должны превышать max_tip_amount. |
| provider_data | String | Опционально | JSON-сериализованные данные о счёте, которые будут переданы платёжному провайдеру. Подробное описание обязательных полей должно быть предоставлено платёжным провайдером. |
| photo_url | String | Опционально | URL фотографии товара для счёта. Может быть фотографией товара или маркетинговым изображением для услуги. |
| photo_size | Integer | Опционально | Размер фотографии в байтах |
| photo_width | Integer | Опционально | Ширина фотографии |
| photo_height | Integer | Опционально | Высота фотографии |
| need_name | Boolean | Опционально | Передайте True, если для завершения заказа требуется полное имя пользователя. Игнорируется для платежей в Telegram Stars. |
| need_phone_number | Boolean | Опционально | Передайте True, если для завершения заказа требуется номер телефона пользователя. Игнорируется для платежей в Telegram Stars. |
| need_email | Boolean | Опционально | Передайте True, если для завершения заказа требуется адрес электронной почты пользователя. Игнорируется для платежей в Telegram Stars. |
| need_shipping_address | Boolean | Опционально | Передайте True, если для завершения заказа требуется адрес доставки пользователя. Игнорируется для платежей в Telegram Stars. |
| send_phone_number_to_provider | Boolean | Опционально | Передайте True, если номер телефона пользователя должен быть отправлен провайдеру. Игнорируется для платежей в Telegram Stars. |
| send_email_to_provider | Boolean | Опционально | Передайте True, если адрес электронной почты пользователя должен быть отправлен провайдеру. Игнорируется для платежей в Telegram Stars. |
| is_flexible | Boolean | Опционально | Передайте True, если итоговая цена зависит от способа доставки. Игнорируется для платежей в Telegram Stars. |
Примеры
php
<?php
// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';
// Параметры для создания ссылки на инвойс
$params = [
'title' => 'Premium Subscription',
'description' => 'Access to all premium features for 1 month',
'payload' => 'order_12345_' . uniqid(),
'currency' => 'USD',
'prices' => json_encode([
['label' => 'Premium Plan', 'amount' => 999] // 9.99 USD в центах
]),
'max_tip_amount' => 500, // 5.00 USD в центах
'suggested_tip_amounts' => json_encode([100, 200, 300, 500]), // 1.00, 2.00, 3.00, 5.00 USD
'need_email' => true,
'need_phone_number' => true,
'is_flexible' => false
];
// Если используете Telegram Stars (внутренняя валюта Telegram)
// $params = [
// 'title' => '100 Telegram Stars',
// 'description' => 'Purchase 100 Telegram Stars for in-app purchases',
// 'payload' => 'stars_purchase_' . uniqid(),
// 'provider_token' => '', // Пустая строка для Telegram Stars
// 'currency' => 'XTR',
// 'prices' => json_encode([
// ['label' => '100 Stars', 'amount' => 100]
// ]),
// 'subscription_period' => 2592000 // 30 дней в секундах (опционально)
// ];
// Формируем URL для вызова API
$apiUrl = "https://api.telegram.org/bot{$botToken}/createInvoiceLink";
// Отправляем запрос
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Обрабатываем ответ
if ($httpCode === 200) {
$result = json_decode($response, true);
if ($result['ok']) {
$invoiceLink = $result['result'];
echo "Ссылка на инвойс создана: " . $invoiceLink . "\n";
// Пример отправки ссылки пользователю
// sendMessageToUser($chatId, "Оплатите по ссылке: " . $invoiceLink);
} else {
echo "Ошибка: " . $result['description'] . "\n";
}
} else {
echo "HTTP ошибка: " . $httpCode . "\n";
}
// Альтернативный вариант с использованием file_get_contents
/*
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($params)
]
];
$context = stream_context_create($options);
$response = file_get_contents($apiUrl, false, $context);
$result = json_decode($response, true);
*/
?>
python
import requests
def create_invoice_link(bot_token, title, description, payload, currency, prices, **kwargs):
"""
Создает ссылку на счет для оплаты.
:param bot_token: Токен бота
:param title: Название товара (1-32 символа)
:param description: Описание товара (1-255 символов)
:param payload: Полезная нагрузка счета (1-128 байт)
:param currency: Код валюты (например, "USD", "XTR" для Telegram Stars)
:param prices: Список цен в формате [{"label": "Название", "amount": 1000}]
:param kwargs: Дополнительные параметры (см. документацию)
:return: Ссылка на счет или None в случае ошибки
"""
url = f"https://api.telegram.org/bot{bot_token}/createInvoiceLink"
# Обязательные параметры
data = {
"title": title,
"description": description,
"payload": payload,
"currency": currency,
"prices": prices
}
# Опциональные параметры
optional_params = [
"business_connection_id",
"provider_token",
"subscription_period",
"max_tip_amount",
"suggested_tip_amounts",
"provider_data",
"photo_url",
"photo_size",
"photo_width",
"photo_height",
"need_name",
"need_phone_number",
"need_email",
"need_shipping_address",
"send_phone_number_to_provider",
"send_email_to_provider",
"is_flexible"
]
for param in optional_params:
if param in kwargs:
data[param] = kwargs[param]
try:
response = requests.post(url, json=data)
response.raise_for_status()
result = response.json()
if result.get("ok"):
return result.get("result")
else:
print(f"Ошибка: {result.get('description')}")
return None
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")
return None
# Пример использования для обычного платежа
bot_token = "YOUR_BOT_TOKEN"
# Пример 1: Обычный платеж в USD
invoice_link = create_invoice_link(
bot_token=bot_token,
title="Премиум подписка",
description="Доступ к премиум функциям на 1 месяц",
payload="subscription_12345",
currency="USD",
prices=[{"label": "Премиум подписка", "amount": 999}], # $9.99
provider_token="YOUR_PROVIDER_TOKEN",
photo_url="https://example.com/product.jpg",
need_email=True,
max_tip_amount=500, # $5.00
suggested_tip_amounts=[100, 200, 300, 500] # $1.00, $2.00, $3.00, $5.00
)
if invoice_link:
print(f"Ссылка на счет: {invoice_link}")
# Пример 2: Платеж в Telegram Stars (XTR)
stars_invoice_link = create_invoice_link(
bot_token=bot_token,
title="100 Telegram Stars",
description="Покупка 100 Telegram Stars",
payload="stars_purchase_67890",
currency="XTR", # Валюта для Telegram Stars
prices=[{"label": "Telegram Stars", "amount": 100}], # 100 Stars
provider_token="", # Пустая строка для Telegram Stars
subscription_period=2592000 # 30 дней для подписки
)
if stars_invoice_link:
print(f"Ссылка на счет Stars: {stars_invoice_link}")
# Пример 3: Создание счета с бизнес-подключением
business_invoice_link = create_invoice_link(
bot_token=bot_token,
title="Товар в бизнес-чате",
description="Покупка товара через бизнес-подключение",
payload="business_purchase_111",
currency="XTR",
prices=[{"label": "Товар", "amount": 50}],
provider_token="",
business_connection_id="1234567890" # ID бизнес-подключения
)
История изменений
- API 6.1. Добавлен метод createInvoiceLink
- API 8.0. Обновлен метод createInvoiceLink: Добавлены параметры subscription_period и business_connection_id
Дополнительно
- LabeledPrice - Объект, представляющий отдельную позицию в структуре цены товаров или услуг с указанием названия и стоимости в минимальных единицах валюты.