Подключение платежей в Native App
Чтобы настроить прием платежей в Native App, подтвердите юридический статус компании.
Прием платежей проходит в несколько этапов, подробнее о них вы можете прочитать в разделе Этапы оплаты.
Если вы уже настроили прием платежей с помощью библиотеки messaging, вы можете прочитать описание этапов оплаты.
Перед подключением платежей
- Создайте в корпоративном пространстве проект SmartPay.
- Получите тестовый или эксплуатационный токен и
service_id
для сервиса приема платежей SmartPay. - Скачайте демо-приложение и используйте его в качестве примера.
Подключение библиотеки Paylib
Пример подключения библиотеки Paylib можно посмотреть в DemoApplication.kt
. Для внедрения зависимостей используется библиотека Koin.
Чтобы подключить библиотеку, создайте экземпляр PayLib:
val sdkModule = module {
factory {
PayLibFactory(
context = androidContext(),
coroutineDispatchers = CoroutineDispatchers,
binderHelperFactory2 = get()
).create()
}
...
}
Создание счета
Чтобы запустить платежный сценарий, сформируйте счет на оплату с помощью бэкенда смартапа. Для этого используйте метод POST /invoices
.
Пример ответа:
{
"error": {
"error_code": "0",
"error_description": "",
"user_message": ""
},
"invoice_id": "3538853"
}
Далее верните идентификатор созданного счета — invoice_id
— в смартап.
Проведение оплаты
Чтобы запустить диалог оплаты, выполните команду launchPayDialog
и укажите invoice_id
:
import ru.sberdevices.services.paylib.PayLib
import ru.sberdevices.services.paylib.entities.PayResultCode
// Запускаем интерфейс оплаты на устройстве.
paylib.launchPayDialog(invoiceId).onSuccess {
// Проверяем результат работы интерфейса платежа (успешно/ошибка или пользователь отменил платеж)
when (it.resultCode) {
PayResultCode.SUCCESS -> { // диалог оплаты с пользователем успешно завершился }
PayResultCode.ERROR -> { // во время работы диалог оплаты с пользователем произошла ошибка }
PayResultCode.CANCELLED -> { // пользователь отменил оплату }
else -> { // неподдерживаемый код ошибки }
}
}.onFailure {
// диалог оплаты не запустился
}
В случае успеха пользователю отобразится диалог оплаты с возможностью оплатить картой или QR-кодом.
Чтобы у пользователя появились карты для оплаты, их необходимо добавить через мобильное приложение Салют в разделе Профиль/Карты.
Если пользователь выбирает оплату с помощью QR-кода, то невозможно вернуться и выбрать оплату картой.
В таком случае, чтобы оплатить картой, нужно закрыть окно и заново начать процесс оплаты.
Проверка статуса платежа
Для проверки статуса платежа выполните запрос GET /invoices/{invoice_id}
на бэкенде смартапа.
Убедитесь, что заказ перешел в финальный статус, и отобразите результат пользователю.
Тестирование приема платежей
Вы можете протестировать и отладить прием платежей локально.
Для этого создайте счет, используя тестовый токен и примеры из демо-приложения:
- Сформируйте заказ:
private fun createInvoiceOrder(): Invoice {
val cartItem = ShoppingCartItem(
1,
name = "New Elephant",
item_price = 100,
item_amount = 100,
item_code = "ru.some.elephant",
quantity = Quantity(
1,
"thing")
)
val orderInfo = OrderInfo(
order_id = "1c4bffc385d04530b511520ba8386d80,
order_date = "2022-05-22T22:24:56.719Z",
amount = cartItem.item_amount,
purpose = "Покупка слона",
description = "Покупка слона, OOO Elephant Seller",
service_id = "27",
order_bundle = listOf(cartItem)
)
return Invoice(
invoice = Order(
order = orderInfo
)
)
}
- Создайте счет на оплату:
private fun getInvoiceIdForTestOrder(): String? {
// Создаем тестовый счет на оплату
val invoiceOrder = createInvoiceOrder()
// Регистрируем счет в SmartPay API
return NetworkClient.createInvoice(invoiceOrder)?.invoice_id
}