Как настроить платежи через бота в Telegram

Чтобы принимать платежи в Telegram, нужно сделать три вещи:

  1. Создать бота.
  2. Подключить его к боту Яндекс.Кассы.
  3. Настроить своего бота для работы с платежами.

Для настройки платежей через бота потребуется параметр shopId — он появится у вас после подключения к Яндекс.Кассе.

Как создать бота

  1. В Telegram откройте диалог с @BotFather, отправьте ему команду /start, затем — /newbot.
  1. Придумайте боту имя (name) и юзернейм (username). Имя бота будет в списке контактов и наверху чата, оно может быть неуникальным. Юзернейм будет в короткой ссылке на бота, он должен быть уникальным.
  1. Например:
    Яндекс.Касса — имя бота
    YandexCheckoutPaymentBot — это юзернейм бота
  1. Если юзернейм не занят, BotFather пришлет в ответ сообщение с токеном — «ключом» для доступа к созданному боту, его нельзя сообщать посторонним (даже службе поддержки Кассы или Telegram).

Когда ключ у вас, бот готов: теперь можно добавить иконку и настроить диалог с клиентами. Одновременно можно настраивать платежи через бота.

Как подключить своего бота к боту Кассы

  1. Отправьте @BotFather команду /mybots. Нажмите на имя своего бота.
  1. Откроется панель управления ботом. Выберите BotSettings — Payments.
  1. В открывшемся меню выберите Connect Яндекс.Касса: платежи.
  1. Откроется диалог с ботом Яндекс.Кассы.Отправьте ему команду /start, затем ваш shopId (его можно скопировать в личном кабинете Яндекс.Кассы).
  2. Бот спросит ваш shopArticleId. Если не знаете этот параметр, отправьте в ответ 0 (ноль).
  1. Вернитесь к диалогу с @BotFather. Он пришлёт вам токен, который нужен для выставления счетов. Токен всегда можно посмотреть через BotSettings — Payments.

Как настроить бота для работы с платежами

  1. Реализуйте метод sendinvoice из платёжного API Telegram: в ответ на этот запрос ваш бот будет отправлять клиенту счёт на оплату. В счёте должна быть стоимость, название, описание товара, параметр payload и параметр provider_token — это тот самый токен, который выдал @BotFather после подключения вашего бота к боту Кассы.

    Посмотреть пример запроса sendinvoice

    Если вы настраивали фискализацию через Яндекс.Кассу, нужно передавать в Кассу данные для фискализации. Для этого добавьте в запрос следующие параметры:
    • need_phone_number или need_email
    • send_email_to_provider (если вы запрашивали у клиента телефон) или send_phone_number_to_provider (если вы запрашивали у клиента телефон),
    • provider_data, а в нём объект receipt. Подробности — в API Яндекс.Кассы (смотрите раздел Атрибуты — receipt).

    Посмотреть пример

    Телефон или почту вы можете запросить у клиента раньше, в диалоге с ботом. Тогда первые два параметра не нужны, достаточно provider_data с объектом receipt.

    Посмотреть пример

    Подробнее про 54-ФЗ в работе с Кассой

    Если вам нужно получить от клиента адрес для доставки, реализуйте метод Shipping Query. Когда пользователь укажет адрес, на этот запрос нужно ответить методом answerShippingQuery. В этом методе нужно передать способы доставки и их цены.

  2. Когда пользователь подтвердит платёж, Telegram пришлёт вам webhook с Update, который содержит объект PreCheckoutQuery. На этот запрос нужно ответить в течение 10 секунд, вызвав метод answerPreCheckoutQuery.

  3. Вы получите два уведомления:
    • Telegram пришлёт webhook с Update, который содержит объект SuccessfulPayment,
    • Яндекс.Касса пришлёт уведомление в магазин: тип уведомления зависит от вашего способа подключения к Кассе.

Как выглядит платёж через бота в Telegram

Для примера возьмём пополнение баланса мобильного телефона через тестовый бот Кассы — @testymppbot.

Платить через бота можно только с мобильного телефона и только с банковской карты, комиссии нет.

  1. Отправьте боту @testymppbot команду /start, затем /invoice.
  2. Отправьте номер телефона, который хотите пополнить: формат — 7 XXX XXX XX XX.
  1. Укажите сумму, которую хотите положить на телефон. Можно выбрать из предложенных вариантов или вручную указать любую другую сумму.
  1. Бот пришлёт готовый счёт. Проверьте данные и нажмите Pay.
  1. Откроется страница оплаты: укажите данные карты и нажмите Заплатить.
    Нюанс: некоторые магазины могут дополнительно спрашивать электронную почту или телефон.
  1. Нажмите Pay и подтвердите платёж паролем своего банка.
  1. Готово: проверяйте баланс.