Вы можете принимать платежи в смартапе, который создан на базе фреймворка SaluteJS. Прием платежей состоит из следующих этапов:
- Авторизация.
- Создание счета.
- Открытие окна оплаты.
- Проверка статуса платежа.
- Обработка заказа.
Интеграция платежей через 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 вы можете подтвердить заказ клиента и оформить для него доставку товара.