Метод createInvoiceLink

Метод создаёт уникальную ссылку для оплаты счёта через Telegram Bot API, поддерживая как обычные валюты, так и Telegram Stars.

Описание

Используйте этот метод для создания ссылки на счёт. В случае успеха возвращает созданную ссылку на счёт в виде 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 - Объект, представляющий отдельную позицию в структуре цены товаров или услуг с указанием названия и стоимости в минимальных единицах валюты.
Комментарии