Ручная оплата iOS
Схема взаимодействия
Сценарий ручной оплаты
Получение токена оплаты
Если клиент продолжил сценарий, то есть выбрал оплатить со SberPay, то для получения PaymentToken необходимо создать структуру для запроса, после чего вызвать метод getPaymentToken
. Ниже представлен список параметров для формирования структуры запроса.
Параметры запроса getPaymentToken
Объект | Тип | Формат | Обязательный | Описание |
---|---|---|---|---|
apiKey | String | ANS..512 | Да | Ключ клиента для работы с сервисами платежного шлюза через SDK |
clientId | String | ANS..36 | Нет | Идентификатора плательщика в вашей системе Пример: ac2db5dd-9bd0-441e-a5d9-6d23ce7a1123 |
clientName | String | ANS..512 | Да | Название магазина клиента Пример: Любимый магазин |
amount | Int | N..12 | Да | Сумма операции в минорных единицах Пример: 145566 |
currency | Int | N3 | Да | Цифровой код валюты операции согласно ISO 4217 Пример: 643 |
bankInvoiceId | String | ANS..36 | Нет | Уникальный номер (идентификатор) заказа в Платежном шлюзе Банка. Необходимо передавать значение sbolBankInvoiceId |
mobilePhone | String | N12 | Нет | Номер мобильного телефона Плательщика, если имеется в вашей системе Пример: 79261112233 |
orderNumber | String | ANS..36 | Нет | Уникальный номер (идентификатор) заказа в системе Клиента. Пример: 5f3f7d10-7005-7afe-b756-f73001c896b1 |
description | String | ANS..512 | Нет | Описание к заказу |
language | String | A2 | Нет | Выбранный язык локализации интерфейсов Пример: RU |
recurrentEnabled | Boolean | Да | Параметр создания платежного токена для реккурентных платежей (true или false) Пример: true | |
recurrentExpiry | String | N8 | Нет | Дата прекращения действия рекуррентных платежей (формат YYYYMMDD) Пример: 20230821 |
recurrentFrequency | Int | N..2 | Да | Период рекуррентных платежей в днях (натуральное число в пределах от 1 до 28) Для нереккурентых платежей значение 0 Пример: 20 |
redirectUri | String | ANS..512 | Да | Адрес вашего приложения, по которому необходимо вернуть пользователя после аутентификации в СберБанк Онлайн Пример: apptest:/ |
merchantLogin | String | ANS..512 | Да | Название магазина клиента Пример: Любимый магазин |
- Swift
- Objective-C
let request = SPaymentTokenRequest(redirectUri: "sberPayExampleapp://spay",
merchantLogin: "Test shop",
amount: totalCost,
currency: "643",
mobilePhone: nil,
orderNumber: orderId,
recurrentExipiry: "20230821",
recurrentFrequency: 2)
// или
let request = SPaymentTokenRequest(merchantLogin: "Test shop",
orderId: orderId,
redirectUri: "sberPayExampleapp://spay")
SPaymentTokenRequest *requestModel = [[SPaymentTokenRequest alloc] initWithMerchantLogin:@"Test shop"
orderId:@""
redirectUri:@"sberPayExampleapp://spay"];
// или
SPaymentTokenRequest *requestModel = [[SPaymentTokenRequest alloc] initWithRedirectUri:@"sberPayExampleapp://spay"
merchantLogin:@"Test shop"
amount:*(_totalCost)
currency:@""
mobilePhone:@""
orderNumber:@""
recurrentExipiry:@""
recurrentFrequency:0];
Вызов метода getPaymentToken
После инициализации структуры запроса необходимо вызвать сам метод getPaymentToken
, передать в его параметры созданную ранее структуру и текущий UIViewController
вашего приложения.
- Swift
- Objective-C
SPay.getPaymentToken(with: self, with: request) { state, info in
switch state {
case .success:
print("Успешный результат")
case .cancel:
print("Пользователь отменил оплату")
case .error:
print("(info) - описание ошибки")
@unknown default:
print("Неопределенная ошибка")
}
}
[SPay getPaymentTokenWith:self with:requestModel completion:^(enum SPayTokenState state, SPaymentTokenResponseModel * _Nonnull info) {
switch(state) {
case SPayTokenStateSuccess:
NSLog(@"Успешный результат");
break;
case SPayTokenStateError:
NSLog(@"%@ - описание ошибки", info);
break;
case SPayTokenStateCancel:
NSLog(@"Отмена");
break;
}
}\];
Оплата заказа платежным токеном
При успешном получении платежного токена можно провести оплату заказа Плательщика через вызов метода pay
. Ниже представлен список параметров для формирования структуры запроса
Параметры запроса pay
Объект | Тип | Формат | Обязательный | Описание |
---|---|---|---|---|
orderId | String | ANS 36 | Да | Уникальный номер (идентификатор) заказа в Платежном шлюзе Банка. Необходимо передавать значение sbolBankInvoiceId (передается в externalParams) |
paymentToken | String | ANS 96000 | Нет | Платежный токен, полученный от SDK. Отсутствует, если заполнен paymentTokenId |
paymentTokenId | String | ANS 36 | Нет | Идентификатор платежного токена, полученный от SDK. Отсутствует, если заполнен paymentToken |
- Swift
- Objective-C
let request = SPaymentRequest( orderId: "eyJhbGciOiJFQ0RILUVTIiwiZXBrIj",
paymentToken: "6fcb2418-ba44-4af2-8b54-711efb494b54")
// или
let request = SPaymentRequest(orderId: "eyJhbGciOiJFQ0RILUVTIiwiZXBrIj",
paymentTokenId: "6fcb2418-ba44-4af2-8b54-711efb494b54")
SPaymentRequest *request = [[SPaymentRequest alloc] initWithOrderId: @""
paymentToken: @""];
// или
SPaymentRequest *request = [[SPaymentRequest alloc] initWithOrderId: @""
paymentTokenid: @""];
Вызов метода pay
После инициализации структуры запроса необходимо вызвать сам метод pay
и передать в его параметр созданную ранее структуру. После того как метод отработает окно SDK будет закрыто.
- Swift
- Objective-C
SPay.pay(with: request) { state, info in
switch state {
case .success:
print("Успешный результат")
case .waiting:
print("Необходимо проверить статус оплаты")
case .cancel:
print("Пользователь отменил оплату")
case .error:
print("(info) - описание ошибки")
@unknown default:
print("Неопределенная ошибка")
}
}
[SPay payWith:request completion:^(enum SPayState state, NSString * _Nonnull info) {
switch(state) {
case SPayStateSuccess:
NSLog(@"Успешный результат");
break;
case SPayStateWaiting:
NSLog(@"Необходимо проверить статус оплаты");
break;
case SPayStateCancel:
NSLog(@"Отмена");
break;
case SPayStateError:
NSLog(@"%@ - описание ошибки", info);
break;
}
}];