Требования

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

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

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

Подключение

1. Импорт SDK

  1. Загрузите EpaySDK.framework по ссылке: https://github.com/HFSEpayment/EpaySDK
  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

js     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. Иначе получить код и текст ошибки

7. Настройка оплаты или перевода

Далее, чтобы выполнить прямую операцию, вам необходимо подготовить модель оплаты и запустить нужный вам тип операции. Узнайте больше на странице оформления заказа и передаточные страницы страниц.