Покупка с использованием внешнего бэкенда

В общем случае процесс покупки с использованием внешнего бэкенда состоит из четырёх шагов, описанных ниже.

Проведение оплаты возможно только при использовании действующих карт. В связи с этим для тестирования рекомендуем проводить отладочные платежи на минимальные суммы (1 рубль) с последующей отменой операций.

Шаг 1. Регистрация покупки

После того, как пользователь определился со списком покупок и выразил желание оплатить, нужно зарегистрировать платеж.

Сценарий приложения направляет запрос в бэкенд смартапа, а тот в свою очередь отправляет запрос на регистрацию заказа в бэкенд приложения In_App.

Для регистрации покупки используется запрос POST /invoices.

Шаг 2. Получение сообщения о завершении оплаты

На первом шаге в ответ на запрос регистрации вы получите invoice_id. Из сценария приложения необходимо вызвать платежный сценарий, передав в него полученный invoice_id.

Подключение библиотек

Для успешного вызова функции необходимо предварительно в файле chatbot.yaml подключить следующие библиотеки:

scriptsPreLoad:
    global:
        - /jslib/moment.min.js

        - /jslib/underscore.js

        - /jsapi/common.js

        - /jsapi/http.js

    local:
        - /jsapi/mail.js

        - /jsapi/reactions.js

        - /jsapi/payment.js

Формат запроса

Для вызова платежного сценария необходимо использовать встроенную функцию $reactions.pay($session.invoice_id), в которую в качестве входной переменной нужно передать полученный на шаге 1 invoice_id.

script: $reactions.pay($session.invoice_id);

Обработка платежа

Далее логика платежа обрабатывается во встроенном сценарии оплаты: в диалоге с пользователем определяется, как будет оплачена покупка, и производится непосредственно оплата.

Варианты развития сценария:

  • Оплата пройдет успешно.
  • Оплата не пройдет (из-за ошибки или отказа).
  • Пользователь может отказаться от совершения оплаты.

В любом случае в сценарий приложения вернется событие PayStatus, в котором будет содержаться invoice_id.

state: PayStatus
        event!: PAY_DIALOG_FINISHED

После получения такого события вы можете перейти к следующем шагу оплаты.

Шаг 3. Запрос результата оплаты

После завершения процесса оплаты платежный сценарий возвращает управление вашему сценарию.

Смартап должен отправить запрос в бэкенд приложения In_App для получения результатов платежа. Для этого используется GET /invoices/{invoice_id}.

Шаг 4. Завершение оплаты (только для двухстадийной оплаты)

Если вы используете оплату в 2 этапа, то при успешном совершении платежа сумма холдируется на счете плательщика. Для завершения списания требуется отправить запрос на завершение оплаты (инициирование расчета по преавторизованной на первом шаге сумме).

Завершение платежа может быть на сумму равную или меньше захолдированной.

Для завершения покупки используется PUT /invoices/{invoice_id}.