Требования

  1. Вы должны быть клиентом ePay
  2. Вы должны получить интеграционные данные:
TerminalIDИдентификатор магазина
ClientIDИдентификатор клиента
ClientSecretСекретный ключ
  1. Deployment target вашего проекта должен быть iOS 11 или выше.

Тестовые данные

ClientIDtest
ClientSecretyF587AV9Ms94qN2QShFzVR3vFnWkhjbAK3sG
TerminalID67e34d63-102f-4bd1-898e-370781d0074d

Подключение

1. Импорт SDK

  1. Загрузите EpaySDK.framework по ссылке: IOS framework
  2. Распакуйте архив
  3. Скопируйте распакованную SDK в корневую папку вашего проекта

Screenshot 2023-08-10 at 08.19.59

  1. Перейдите в General основного таргета приложения. Найдите раздел 'Frameworks, Libraries and Embedded Content' и нажмите на плюс

Screenshot 2023-08-10 at 08.21.54

  1. В появившемся окне выберите 'Add Other → Add Files'

Screenshot 2023-08-10 at 08.22.18

  1. В корневой вашего проекта найдите 'EpaySDK.framework' и добавьте его в проект

Screenshot 2023-08-10 at 08.24.15

  1. Убедитесь что SDK появился с Embed = Embed & Sign

Screenshot 2023-08-10 at 08.24.44

2. Настройка авторизации

Создайте инстанс конфигов авторизации. Вы можете хранить инстанс в константах, или создавать при непосредственной инициализации Платежной страницы или Страницы Перевода.

Импортируйте модуль EpaySDK import EpaySDK

Создайте инстанc конфига авторизации

let config = AuthConfig(
 merchantId: <Идентификатор магазина TerminalID, полученнный от epay>,
 merchantName: <Наименование Магазина>,
 clientId: <Идентификатор клиента ClientID, полученнный от epay>,
 clientSecret: <Секретный ключ ClientSecret, полученнный от epay>
)

3. Подготовка Invoice модели

Готовим модель Invoice в зависимости от типа платежа/перевода. Подробнее на страницах Платежной страницы и Страницы Перевода

4. Запуск страницы оплаты

После инициализации модели 'Invoice', необходимо настройки авторизации 'AuthConfig' и созданный 'Invoice' передать в конструктор 'PaymentModel'. Последнее далее передается в 'LaunchScreenViewController'.

import EpaySDK

let pm = PaymentModel(authConfig: <Ранее настроенный AuthConfig>, 
invoice: <инстанс Invoice созданный пунктом выше>)
let launchScreenVC = LaunchScreenViewController(paymentModel: pm)
launchScreenVC.setEnvironmetType(type: .dev) //type: .prod для продуктовной среды

Запуск ViewController-а SDK

Навигация в SDK работает на основе 'UINavigationController'. Если вы уже на базе 'UINavigationController', то передайте в 'navigationController' ViewContoller SDK

 navigationController?.pushViewController(launchScreenVC, animated: true)

Иначе, если вы работаете со 'storyboards', то вам необходимо инициализировать инстанс 'UINavigationController', присвоить стартовой страницей 'LaunchScreenViewController' с SDK, и отобразить в storyboard navigationController. Пример:

class ViewController: UIViewController {  
	var customNavigationController: UINavigationController?

 @objc fun launchPaymentVC(paymentModel: PaymentModel) {
	let launchScreenVC = LaunchScreenViewController(paymentModel: pm)
  launchScreenVC.setEnvironmetType(type: .dev) //type: .prod для продуктовной среды
  launchScreenVC.modalPresentationStyle = .fullScreen
  self.customNavigationController = UINavigationController(rootViewController: launchScreenVC)
  self.customNavigationController?.modalPresentationStyle = .fullScreen
	self.present(self.customNavigationController ?? launchScreenVC, animated: true)
}

}

5. Настройка обработки ответов от EpaySDK

Добавьте Observer для обработки ответа от EpaySDK

NotificationCenter.default.addObserver(
	self, 
	selector: #selector(handleSdkResponse), 
	name: Notification.Name("sdk_response"), 
	object: nil
)

Важно: Тип уведомления должен быть 'sdk_response', но вы можете изменить название метода обработчика 'handleSdkResponse'

6. Обработка ответа

Создайте функцию для обработки уведомления по результату обработки платежа/перевода (функция 'handleSdkResponse' с предыдущего пункта).

Формат ответа:

 isSuccessful: Bool,
 paymentReference: String,
 errorCode: Int,
 errorMessage: String    

Пример обработчика:

@objc func handleSdkResponse(_ notification: Notification) {
  navigationController?.popToViewController(self, animated: true) // 1
 //self.customNavigationController?.dismiss(animated: true) // если у вас созданный под SDK UINavigationController
 let isSuccessful = notification.userInfo?["isSuccessful"] as? Bool // 2
 if isSuccessful == true { // 3
    let reference = notification.userInfo?["paymentReference"] as? String
  } else { // 4
    let errorCode = notification.userInfo?["errorCode"] as? Int
    let errorMessage = notification.userInfo?["errorMessage"] as? String
  }  
}

Где шаги:

  1. Выход из SDK
  2. Определение статуса платежа
  3. Если успех, то получить референс платежа
  4. Иначе получить код и текст ошибки