PaySelection PayApp SDK позволяет интегрировать прием платежей в мобильное приложение для платформы iOS.
Для работы PaySelection PayApp SDK необходима iOS версии 13.0 или выше
dependencies: [
.package(url: "https://github.com/Payselection/Payselection-PayApp-SDK-iOS", from: "3.3.2"),
]
- Sources/PayselectionPayAppSDK - Исходный код SDK
Вы можете с помощью SDK:
- создать заказ и совершить платеж картой
- получить статуса транзакции
- Создайте экземпляр структуры с данными из личного кабинета мерчанта
let merchantId = "20337" // Site ID
let pubkey = "04a36ce5163f6120972a6bf46a76600953ce252e8d513e4eea1f097711747e84a2b7bf967a72cf064fedc171f5effda2b899e8c143f45303c9ee68f7f562951c88" // Публичный ключ
let pubkeyRSA = "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFxbk56eXlwR1R6cENZeDlzMnh6RQpaQ3B4eVkyL2YrbWljb0drWW1rV0M5Szl2SlIvcEtUL0VOUThCT1hIRkFBYW5Mb05PNzVLcmJUQ3Z5Y2pXbkJGCnhYQlJZY2NWeGsxaVB0c0VKbkNlcThmYXMwa2dYMFgzLzFnTFdvbkhheVdTUUl5emFTMXMrWUdsNEJyd2s5c08KTTQyZlk0dkM1WGptU1YxUDNlN2pvNUN1d2hxL2ljUkxZbTg1MXBYRTRiZ3FZYS96NEsrbXhUcWJvdC94b3lhTQpxSmlIOS9EUnQveTc0Z2t6Q0VIRThGQ0M4TkJlVXZUckRWbnlSQ0dtSlpVTDh0QnhPd1N3Ty94M1lzZi9CNU9vCkVjbllWdjVSQmF1MDl4VmFGTFN5QkZiRUsvZnRDUktFeUNQbnpYS2FnbTQ3T2dROEIvTkdhQ0cxRmdVOUhJb2gKd093TmsycWY1NTRPR21Oa0E3MnZCR1E0RTZ4TldUSnFJQWhOTUJQTjFMZGdRNXZTamszTUVJRHQ3Y3FEZzhFRwpCNU0vVS9VT2lVU2tXWmFtR3pXOVZFbkJhRFdWZFpxVVpTc0d0aCtJM093NGRPUUxiZG4rdzljYlpHLzR2VmwvCmFKdTdlQlZ2WVhEL0o0TnIzMk5RZ1o2YzlpMCtNU3RwWFUxMlJ4bzhJK1hCNVpZUTkzNE5iVXJoeDBuMlJhQk0KbGtlSTFtbE1ncWI3ME9BRk5zaDUyNUFIL3k5OVpJTzhsR0RqVEpSdDlKZzdGNVFmUEVWekRIbXdxdy9FaFFjQwpjVG5QaGRLOE53NDJ3QldIVDhXYXg4Y1NxYTdwRytTM2JOYkZvUVJlU1dvK2pzV0JNOU1NemJvckNqYWE1UzRNCnNCV0UyN2FRSElVMU5sTGNqK0laUldzQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo" // Публичный ключ RSA
let merchantCreds = MerchantCredentials(merchantId: merchantId,
publicKey: pubkey
publicRSAKey: pubkeyRSA)
- Создайте экземпляр PayselectionAPI для работы с API
let api = PayselectionAPI(merchantCredentials: merchantCreds)
- Cоздайте экземпляр структуры CustomerInfo с информацией о клиенте.
let customerInfo = CustomerInfo(email: "user@example.com",
receiptEmail: "user@example.com",
isSendReceipt: true,
phone: "+19991231212",
language: "en",
address: "string",
town: "string",
zip: "string",
country: "USA",
ip: "8.8.8.8", // обязательное поле
userId: "string")
- Создайте экземпляр структуры PaymentFormData с информацией о транзакции и данными карты, передав туда customerInfo, а также экземпляры ReceiptData и ExtraData, если требуется. Внимание! Необходимо валидировать передаваемые данные, иначе сервер вернет ошибку. Подробнее о форматах можно прочесть в документации Payselection API.
let messageExpiration = String(Int64(Date().timeIntervalSince1970 * 1000 + 86400000)) // 24 часа
let cardDetails = CardDetails(cardNumber: "4129436949329530",
expMonth: "01",
expYear: "25",
cardholderName: "Card Holder",
cvc: "411")
let paymentFormData = PaymentFormData(type: .cryptogram(cardDetails),
amount: "123",
currency: "RUB",
messageExpiration: messageExpiration, // строковое значение времени в миллисекундах, пример получения указан выше
orderId: "", // уникальный номер заказа. Можно использовать UUID().uuidString,
description: "My Transaction", // строка должна быть не пустой, иначе сервер вернет ошибку
customerInfo: customerInfo,
receiptData: receiptData,
extraData: extraData,
rebillFlag: false)
- Вызовите метод pay
api.pay(paymentFormData) { result in
switch result {
case .success(let payResult):
// в результате ответа приходят: transactionId, transactionSecretKey и redirectUrl
// "transactionSecretKey" служит параметром запроса получения статуса по transactionId
// "redirectUrl", ссылка на веб-интерфейс платежной системы
print(payResult)
case .failure(let error):
print(error)
}
}
- Отобразите WebView с полученной ссылкой на веб-интерфейс платежной системы (параметр "redirectUrl" возвращается в ответе метода "pay") удобным для вас способом. Для этого создайте объект класса ThreeDsProcessor:
let threeDsProcessor = ThreeDsProcessor()
и реализуйте протокол ThreeDsListenerDelegate для получения объекта WKWebView и прослушивания статуса транзакции:
threeDsProcessor.delegate = yourClassInstance
extension YourClassName: ThreeDsListenerDelegate {
func willPresentWebView(_ webView: WKWebView) {
self.webViewVC = YourWebViewController(webView: webView)
self.present(webViewVC, animated: true)
}
func onAuthorizationCompleted() {
self.webViewVC.dismiss(animated: true) // закройте web view в случае успеха
}
func onAuthorizationFailed(error: Error) {
self.webViewVC.dismiss(animated: true) // закройте web view в случае неудачи
print(error) // обработайте ошибку, если потребуется
}
}
совершите подтверждение платежа:
guard let url = URL(string: payResult.redirectUrl) else { return }
threeDsProcessor.confirm3DSpayment(withUrl: url)
- Получение статуса одной транзакции
api.getTransactionStatus(transactionId: payResult.transactionId,
transactionKey: payResult.transactionSecretKey) { result in
switch result {
case .success(let statusResult):
print(statusResult)
case .failure(let error):
print(error)
}
}
По возникающим вопросам техничечкого характера обращайтесь на support@payselection.com