Ручная оплата Android
Обновлено 24 октября 2023
Схема взаимодействия

Реализация сценария
Сценарий ручной оплаты
Данный механизм используется, когда сценарий оплаты может включать оплату через стороннего эквайера.
Получение токена оплаты
Для получения PaymentToken необходимо использовать метод getPaymentToken
и передать в параметры перечисленные ниже:
Параметры метода
Объект | Тип | Формат | Обязательный | Описание |
---|---|---|---|---|
apiKey | String | ANS..512 | Да | Ключ Клиента для работы с сервисами платежного шлюза через SDK Пример: eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI3MjNiM2U3OWI4NjU2MzU2NTg2YTE5MDBhMzA3Y2JiNDJmZDEwZDc2Iiwic3ViIjoiQ049V2ViVGVzdCIsImlzcyI6IkNOPVdlYlRlc3QiLCJpYXQiOjE1ODgxNTA3ODgsImp0aSI6InVyQmdGMEl0NXI3UFhrUkFQeDFIOVEiLCJleHAiOjE2MTU0MjIxMDYwfQ.HdIG_ch3gXhNiX03oskOVBYACUa5iZCcuZVYQaesB_adc95MjbQdy5bm7gNYpBuVCDc_7XUCdKlLeP52H2_oVA |
merchantLogin | String | ANS..512 | Да | Название магазина Клиента Пример: Любимый магазин |
amount | Int | N..12 | Да | Сумма операции в минорных единицах Пример: 145566 |
currency | String | N..3 | Да | Цифровой код валюты операции согласно ISO 4217 Пример: 643 |
mobilePhone | String | N..11 | Нет | Номер мобильного телефона Плательщика Пример: 79261112233 |
orderNumber | String | ANS..36 | Да | Уникальный номер (идентификатор) заказа в системе Клиента Пример: 5f3f7d10-7005-7afe-b756-f73001c896b1 |
orderDescription | String | ANS..512 | Нет | Описание заказа Пример: Любимый товар |
recurrentEnabled | Boolean | Да | Параметр создания платежного токена для реккурентных платежей Пример: true | |
recurrentExpiry | String | N..8 | Да, если recurrentEnabled = true | Дата прекращения действия рекуррентных платежей (формат YYYYMMDD) Пример: 20230821 |
recurrentFrequency | Int | N..2 | Да, если recurrentEnabled = true | Период рекуррентных платежей в днях (натуральное число в пределах от 1 до 28) Для нереккурентых платежей значение 0 Пример: 20 |
language | String | A..2 | Нет | Язык локализации интерфейсов Пример: RU |
appPackage | String | ANS..512 | Да | Package приложения Клиента, по которому необходимо вернуть Плательщика после аутентификации в СберБанк Онлайн Пример: merchant.favorite.shop |
Получение PaymentToken
Метод getPaymentToken
является входной точкой в SDK и должен быть вызван только по клику на кнопку "Оплатить"
, которая идет в комплекте с SDK.
- Kotlin
- Java
SPaySdkApp.getInstance().getPaymentToken(
context = context,
apiKey = "eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI3MjNiM2U3OWI4NjU2MzU2NTg2YTE5MDBhMzA3Y2Ji",
merchantLogin = "BestMerch",
amount = 21323,
currency = "643",
mobilePhone = "79261112233",
orderNumber = "5f3f7d10-7005-7afe-b756-f73001c896b1",
orderDesription = "payment for household appliances",
reccurentEnabled = true,
reccurentExpiry = "20230821",
reccurentFrequency = "20",
appPackage = "merchant.favorite.shop",
language = "RU"
) { paymentTokenResult ->
when (paymentTokenResult) {
is PaymentTokenResult.Success -> {
doSomethingOnSuccess(paymentTokenResult.paymentToken)
}
is PaymentTokenResult.Error -> {
doSomethingOnError(paymentTokenResult.description)
}
}
}
SPaySdkApp.getInstance().getPaymentToken(
context,
"eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI3MjNiM2U3OWI4NjU2MzU2NTg2YTE5MDBhMzA3Y2JiNDJmZDEwZDc2Iiwic3ViIjoiQ049V2ViVGVzdCIsImlzcyI6IkNOPVdlYlRlc3QiLCJpYXQiOjE1ODgxNTA3ODgsI",
"Your_best_shop",
999,
"643",
"7934567890",
"5f3f7d10-7005-7afe-b756-f77001c896b1",
"Your description",
true,
"221212",
"20",
"com.example.javaTestSdkConnection",
"RU",
paymentTokenResult -> {
if (paymentTokenResult instanceof PaymentTokenResult.Success) {
((PaymentTokenResult.Success) paymentTokenResult).getPaymentToken();
} else if (paymentTokenResult instanceof PaymentTokenResult.Error){
((PaymentTokenResult.Error) paymentTokenResult).getMerchantErrors();
}
return null;
}
);
Результат paymentTokenResult в коллбеке является объектом класса PaymentTokenResult
.
Завершение оплаты в SDK
Для завершения оплаты необходимо вызвать метод pay
,передав туда ваш ApiKey, PaymentToken
полученный ранее и BankInvoiceId
полученный после back2back взаимодействия.
Параметры метода
Объект | Тип | Формат | Обязательный | Описание |
---|---|---|---|---|
apiKey | String | ANS..512 | Да | Ключ Клиента для работы с сервисами платежного шлюза через SDK Пример: eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI3MjNiM2U3OWI4NjU2MzU2NTg2YTE5MDBhMzA3Y2JiNDJmZDEwZDc2Iiwic3ViIjoiQ049V2ViVGVzdCIsImlzcyI6IkNOPVdlYlRlc3QiLCJpYXQiOjE1ODgxNTA3ODgsImp0aSI6InVyQmdGMEl0NXI3UFhrUkFQeDFIOVEiLCJleHAiOjE2MTU0MjIxMDYwfQ.HdIG_ch3gXhNiX03oskOVBYACUa5iZCcuZVYQaesB_adc95MjbQdy5bm7gNYpBuVCDc_7XUCdKlLeP52H2_oVA |
bankInvoiceId | String | ANS..36 | Да | Уникальный номер (идентификатор) заказа в Платежном шлюзе Банка. Необходимо передавать значение sbolBankInvoiceId (передается в externalParams) из ответа на Запрос регистрации заказа |
paymentToken | String | ANS..512 | Да | Платежный токен, полученный от SDK. Пример: 6fcb2418-ba44-4af2-8b54-711efb494b54 |
Получение результата метода pay
Без вызова этого метода в сценарии ручной оплаты SDK не завершит свою работу.
- Kotlin
- Java
SPaySdkApp.getInstance().pay(
context = context,
apiKey = "eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI3MjNiM2U3OWI4N",
bankInvoiceId = "I4NjU2MzU2NTg2YTE5MDBhMzA3Y2JiNDJmZDEwZDc2Iiwic3ViIjoiQ049V2ViVGVzdCIsI",
paymentToken = "jU2MzU2NTg2YTE5MDBhMzA3Y2JiNDJmZDEwZDc2Iiwic3ViIjoiQ049V2ViVGVzdCIsI",
orderNumber = "eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI123233",
merchantLogin = "test_merchant",
){ result ->
when (result) {
is PaymentResult.Success -> {
doSomethingOnSuccess()
}
is PaymentResult.Error -> {
doSomethingOnError(result.description)
}
is PaymentResult.Processing -> {
doSomethingOnProcessing()
}
}
}
SPaySdkApp.getInstance().pay(
"AFhdqaX970inj42EoOVuw+kAAAAAAAAADH8u5FkDlopXBsahjOkZA1CcQwTaKaUMQB/H1JNtlz7fSTFdvOcWXXvpgvzCkJDHyRrfKuxYc8p4wP5kcZN+ua3bxgqRjGQLNxI2b9askeQvt63cZNivX3EDIJz6Ywlk0omNVxAlneT7Z1Do/OSkelsZa5zVwVZbYV0yQVSz",
"9580e34a-54fe-4380-b9c4-70c65cd06b23",
"219ysdias-4554fe-4sfsd380-b9c4-dfsdfj3",
"eyJhbGciOiJFUzI1NiJ9.eyJjc24iOiI123233",
"test_merchant",
paymentResult -> {
if (paymentResult instanceof PaymentResult.Success) {
...
} else if (paymentResult instanceof PaymentResult.Error) {
((PaymentResult.Error) paymentResult).getMerchantErrors();
} else if (paymentResult instanceof PaymentResult.Processing) {
...
}
return null;
}
);