Требования
- Вы должны быть клиентом ePay
- Вы должны получить интеграционные данные:
TerminalID | Идентификатор магазина |
ClientID | Идентификатор клиента |
ClientSecret | Секретный ключ |
- Deployment target вашего проекта должен быть iOS 11 или выше.
Тестовые данные
ClientID | test |
ClientSecret | yF587AV9Ms94qN2QShFzVR3vFnWkhjbAK3sG |
TerminalID | 67e34d63-102f-4bd1-898e-370781d0074d |
Подключение
1. Импорт SDK
- Загрузите EpaySDK.framework по ссылке: https://github.com/HFSEpayment/EpaySDK
- Распакуйте архив
- Скопируйте распакованную SDK в корневую папку вашего проекта
- Перейдите в General основного таргета приложения. Найдите раздел 'Frameworks, Libraries and Embedded Content' и нажмите на плюс
- В появившемся окне выберите 'Add Other → Add Files'
- В корневой вашего проекта найдите 'EpaySDK.framework' и добавьте его в проект
- Убедитесь что SDK появился с Embed = Embed & Sign
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
}
}
Где шаги:
- Выход из SDK
- Определение статуса платежа
- Если успех, то получить референс платежа
- Иначе получить код и текст ошибки
7. Настройка оплаты или перевода
Далее, чтобы выполнить прямую операцию, вам необходимо подготовить модель оплаты и запустить нужный вам тип операции. Узнайте больше на странице оформления заказа и передаточные страницы страниц.