Таблица ниже содержит обзор популярных платежных сервисов и их возможностей для интеграции.
Сервис | Интеграция | Сайт | 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
).