Таблица ниже содержит обзор популярных платежных сервисов и их возможностей для интеграции.
| Сервис | Интеграция | Сайт | API | Процесс оплаты | Проверка статуса платежа |
|---|---|---|---|---|---|
| Т-банк Эквайринг | да | ссылка | ссылка | ссылка | ссылка |
| Сбербанк Эквайринг | да | ссылка | ссылка | ссылка | ссылка |
| Ю-касса | да | ссылка | ссылка | ссылка | ссылка |
| Payture | да | ссылка | ссылка | ссылка | ссылка |
| PayPal | да | ссылка | ссылка | ссылка ссылка |
ссылка |
| CloudPayments | да | ссылка | ссылка | ссылка ссылка |
ссылка |
| Stripe | да | ссылка | ссылка | ссылка | ссылка |
| Робокасса | нет | ссылка | ссылка | - | - |
| WebMoney | нет | ссылка | ссылка | - | - |
| Intellect Money | нет | ссылка | ссылка | - | - |
| ВТБ эквайринг | нет | ссылка | ссылка | - | - |
| Альфа Банк | нет | ссылка | ссылка | - | - |
| Qiwi | нет | ссылка | ссылка | - | - |
| Mercyryo | нет | ссылка | ссылка | - | - |
Войдите в личный кабинет.
Откройте нужный сценарий в редакторе. Если у вас нет сценария, создайте новый.
В описании статьи разбирается пример интеграции с Ю-Кассой. Для копирования сценария, который используется в описании статьи, сделайте запрос через заявку на интеграцию. В теме тикета укажите «Копирование примера интеграции с Ю-Кассой», а в описании в какой кабинет нужно скопировать.
Получите учетные данные платежной системы, необходимые для интеграции. Для этого обратитесь к документации или в техническую поддержку сервиса. Например, для интеграции с Ю-кассой необходимо получить «shop id» и «secret key».
Установите блок Результат.
Добавьте переменные в блок Результат:
base_url — базовый URL для запросов;return_url — ссылка, на которую клиент будет перенаправлен после оплаты. Например, ссылка на бота в Telegram.price в блоки Результат, значение которых равно суммам, указанным в стрелках. Например, если вы ввели ключевое слово «10», то значение переменной тоже будет равно 10.
Установите блок Запрос к серверу.
Настройте блок следующим образом:
POST.{base_url}/payments.shopId как логин, а secretKey как пароль.Idempotence-Key, значение: {dialogId}.| Ключ | Значение | Описание |
|---|---|---|
amount.value |
{price} |
Сумма платежа, например, 1000 для 1000 рублей. |
amount.currency |
RUB |
Валюта платежа — в данном случае рубли. |
confirmation.type |
redirect |
Перенаправление на страницу подтверждения. |
confirmation.return_url |
{return_url} |
URL для перенаправления пользователя после подтверждения платежа. |
description |
{description} |
Описание транзакции (например, название товара). |
capture |
true |
Указывает, что платеж завершен. |
Установите блок Порядковый выбор.
Проведите стрелку от блока Запрос к серверу к блоку Порядковый выбор с типом выходных данных По умолчанию.
Установите блок Информация.
Проведите две стрелки от блока Порядковый выбор в блок Запрос к серверу.
Проведите стрелку от блока Порядковый выбор в блок Информация.
Введите сообщение об ошибке создания платежа в блоке Информация.
Установите блок Пустой.
Проведите стрелку от блока Запрос к серверу к блоку Пустой с типом выходных данных Успешный ответ.
Добавьте в стрелку переменные:
payment_id, поле из ответа — body.id.payment_link, поле из ответа — body.confirmation.confirmation_url.Таким образом, если платеж не был создан, бот выводит сообщение об ошибке из блока Информация.
Если ответ успешный, бот сохраняет значения payment_id и payment_link, где payment_id — уникальный идентификатор транзакции, а payment_link — URL, ведущий на страницу для оплаты.

{payment_link}».Таким образом, в интерфейсе добавляется кнопка подтверждения платежа, например «Я оплатил».
Установите блок Запрос к серверу.
Проведите стрелку от блока Вопрос к блоку Запрос к серверу.
Установите Тип выходных данных → Ключевые слова в стрелке, где ключевым словом будет подтверждение платежа, например «Я оплатил».
Настройте блок Запрос к серверу следующим образом:
GET.{base_url}/payments/{payment_id}.shopId как логин, а secretKey как пароль.Установите блок Порядковый выбор.
Проведите стрелку от блока Запрос к серверу к блоку Порядковый выбор с типом выходных данных По умолчанию.
Установите блок Информация.
Проведите две стрелки от блока Порядковый выбор в блок Запрос к серверу.
Проведите одну стрелку от блока Порядковый выбор в блок Информация.
Введите сообщение об ошибке получения статуса платежа в блоке Информация.
Установите блок Условие.
Проведите стрелку от блока Запрос к серверу к блоку Условие с типом выходных данных Успешный ответ.
Добавьте в стрелку переменную: название — payment_status, поле из ответа — body.status.
Установите блок Информация с сообщением о том, что оплата не прошла.
Проведите стрелку от блока Условие к блоку Информация с типом выходных данных По умолчанию.
Установите ещё один блок Информация с сообщением об успешной оплате.
Проведите стрелку от блока Условие к блоку Информация с типом выходных данных Условие И.
Добавьте в стрелку условие: параметр 1 — payment_status = succeeded.
Таким образом, если статус не удается получить, то выводится сообщение об ошибке получения статуса платежа из первого блока Информация.
При успешном получении статуса бот сохраняет текущий статус платежа в переменной payment_status.
В случае успешного статуса выводится сообщение об успешном прохождении платежа из последнего блока Информация.
Для неуспешного статуса отображается сообщение о том, что оплата не прошла, из второго блока Информация.

{payment_link}».Таким образом бот информирует пользователя: «Для оплаты перейдите по ссылке: {payment_link}» и зацикливается на сообщении «Ждем подтверждения оплаты» в блоке Информация, пока ожидает проверки.
Установите блок Пустой.
Скопируйте id пустого блока.
Введите BPL-выражение $ti = timer.start($timer_count, "id") в блок Выражение, где $timer_count - переменная для отслеживания времени до истечения таймера, а вместо id указывается id пустого блока, скопированного на шаге 11.
Установите блок Выражение и соедините его с пустым блоком из шага 10.
Введите BPL-выражение следующего типа в новый блок Выражение:
timer.stop($ti)
$i += 1
где $i— переменная-счетчик для циклов.
Таким образом, в этом блоке таймер останавливается.
Установите блок Запрос к серверу.
Проведите стрелку от блока Выражение к блоку Запрос к серверу с типом выходных данных По умолчанию.
Настройте блок Запрос к серверу следующим образом:
GET.{base_url}/payments/{payment_id}.shopId как логин, а secretKey как пароль.Установите блок Порядковый выбор.
Проведите стрелку от блока Запрос к серверу к блоку Порядковый выбор с типом выходных данных По умолчанию.
Установите блок Информация.
Проведите две стрелки от блока Порядковый выбор в блок Запрос к серверу.
Проведите одну стрелку от блока Порядковый выбор в блок Информация.
Введите сообщение об ошибке получения статуса платежа в блоке Информация.
Установите блок Условие.
Проведите стрелку от блока Запрос к серверу к блоку Условие с типом выходных данных Успешный ответ.
Добавьте в стрелку переменную: название — payment_status, поле из ответа — body.status.
Установите блок Информация с сообщением о том, что оплата не прошла.
Проведите стрелку от блока Условие к блоку Информация с типом выходных данных По умолчанию.
Установите ещё один блок Условие.
Проведите стрелку от первого блока Условие к новому блоку Условие с типом выходных данных Условие И.
Добавьте в стрелку условие: параметр 1 — {i} = {max}.
Проведите стрелку от нового блока Условие к блоку Информация, установленном на шаге 26.
Установите ещё один блок Выражение.
Введите BPL-выражение $ti = timer.start($timer_count, "id") в блок Выражение, где $timer_count - переменная для отслеживания времени до истечения таймера, а вместо id указывается id пустого блока, скопированного на шаге 11.
Проведите стрелку от блока Условие, установленного на шаге 28, к новому блоку Выражение с типом выходных данных Условие И.
Добавьте в стрелку условие: параметр 1 — {payment_status} = pending.
Установите блок Вопрос.
Проведите стрелку от блока Выражение, установленного на шаге 32, к блоку Вопрос с типом выходных данных По умолчанию.
Установите блок Информация.
Проведите стрелку от блока Вопрос к блоку Информация с типом выходных данных По умолчанию.
Проведите стрелку от блока Информация к блоку Вопрос.
Введите сообщение об ожидании подтверждения платежа в блок Информация, например «Ждем подтверждения оплаты».
Установите ещё один блок Информация.
Проведите стрелку от блока Условие, установленного на шаге 28, к новому блоку Информация с типом выходных данных Условие И.
Добавьте в стрелку условие: параметр 1 — {payment_status} = succeeded.
Введите сообщение об успешном прохождении платежа в блок Информация, например «Успешно».
Установите блок Результат с типом действия Без действия.
Проведите стрелку от блока Информация, установленного на шаге 42, к новому блоку Результат.
Добавьте переменную payed со значением 1 в блок Результат.
Таким образом, если после бот получает успешный статус платежа, то выводится сообщение об успешном прохождении платежа из блока Информация, установленного на шаге 42.
Для неуспешного статуса отображается сообщение о том, что оплата не прошла из блока Информация, установленного на шаге 26.
Если статус платежа «pending», бот зацикливает блок Информация с сообщением об ожидании подтверждения платежа, установленный на шаге 38, пока не будет достигнуто максимальное количество попыток (max).
