Прием платежей в SaluteJS

Вы можете принимать платежи в смартапе, который создан на базе фреймворка SaluteJS. Прием платежей состоит из следующих этапов:

  1. Авторизация.
  2. Создание счета.
  3. Открытие окна оплаты.
  4. Проверка статуса платежа.
  5. Обработка заказа.

Интеграция платежей через SaluteJS не поддерживает методы для полного или частичного возврата средств.

Для смартапов, созданных через SaluteJS, доступно подключение только одностадийных платежей.

Перед подключением

Получение токена

Для подключения платежей требуется авторизация через эксплуатационный токен. Вы можете передать его в переменной SMARTPAY_TOKEN в файле .env. В этом случае токен автоматически запустится в runtime js.

Пример для подключения

Для подключения платежей через SaluteJS используйте пример сценария ChatApp со встроенной оплатой.

Настройка приема платежей

Создание счета

Корзина с товарами формируется на стороне сервиса и приходит через ассистента. Полученный список товаров необходимо передать в методе создания счета createInvoice внутри объекта order.

После этого необходимо отправить команду res.askPayment, чтобы ассистент открыл клиенту окно оплаты.

import { createInvoice, SaluteHandler } from '@salutejs/scenario';

const handler: SaluteHandler = async ({ req, res }) => {
    const { delivery_info, order } = req.variables;
    const { invoice_id } = await createInvoice({ invoice: { delivery_info, order } });

    res.askPayment(invoice_id);
};

Получение статуса платежа

При завершении оплаты в сценарий придет системная команда PAY_DIALOG_FINISHED. Она позволяет получить статус платежа по значению параметра server_action.

import { createSystemScenario, findInvoice, PayDialogFinishedServerAction, PayDialogStatuses, PaymentInvoiceStatuses } from '@salutejs/scenario';

createSystemScenario({
    PAY_DIALOG_FINISHED: async ({ req, res }) => {
        const { parameters } = req.serverAction as PayDialogFinishedServerAction;
        if (parameters.payment_response.response_code === PayDialogStatuses.success) {
            // диалог завершился успешно, необходимо проверить статус платежа
            const { invoice_status } = await findInvoice({ invoiceId: parameters.payment_response.invoice_id });
            if (invoice_status === PaymentInvoiceStatuses.confirmed) {
                // оплачено и можно формировать заказ
            }
        }
    }
});

Завершение оплаты

В зависимости от результата оплаты необходимо обработать покупку. Например, при статусе confirmed вы можете подтвердить заказ клиента и оформить для него доставку товара.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней