pscbonline-ios/README.md

8.9 KiB
Raw Permalink Blame History

ПСКБ Платежи iOS SDK

Platform

Библиотека является дополнением к API системы интернет-эквайринга ПСКБ "Платежи" и позволяет подключить приём платежей по картам в мобильных приложениях iOS с минимальными усилиями.

Возможности

На текущий момент библиотека поддерживает:

  • Apple Pay
  • Оплата картами

Подключение зависимостей

  1. Установите CocoaPods 1.10.0 или выше
gem install cocoapods

Официальная документация по установке CocoaPods

  1.  Создайте в своём приложении Podfile

Это также можно сделать при помощи команды pod init , находясь в директории своего проекта. (В таком случае будет создан Podfile с настройками по умолчанию)

  1. Добавьте зависимости в Podfile
platform :ios, '10.0'

target '<Target name>' do
  use_frameworks!
  
  pod 'PSCBOnline', :git => "https://git2dev.pscb.ru/pscb-dev/pscbonline-ios", :tag => "1.0.0"

end

<Target name> - Название проекта вашего приложения в XCode

  1. Выполните команду pod install

Интеграция

  1. Для работы с библиотекой импортируйте зависимости в нужный файл проекта:
import PSCBOnline
  1. Создайте экземпляр PSCBOnlineClient с вашими настройками:
let apiClient = PSCBOnlineClient(
    environment: .sandbox, 
    marketPlaceId: "<Your MarketPlace ID>", 
    signingKey: "<Your Signing Key>"
)

environment -  окружение, в рамках которого библиотека взаимодействует с сервисом. .sandbox - тестовое окружение; .production - продуктовое. Your MarketPlace ID - ваш идентификатор в системе ПСКБ-Онлайн. Your Signing Key - ваш ключ подписи запросов к системе.

  1. Создайте экземпляр Payment
let payment = Payment(amount: Decimal(1000.00), orderId: "Order-ID")

amount - сумма в рублях. (На текущий момент другая валюта не поддерживается.) orderId - уникальный идентификатор заказа в рамках магазина.

Для детальной информации, какие параметры принимает смотрите документацию Payment.


Дальнейшая интеграция отличается от способа оплаты.

Доступные способы оплаты

Сейчас в SDK доступна оплата:

  • Банковкой кратой
  • Apple Pay

Для их настройки реализации смотрите дальше.

Приём оплаты банковскимикартами

  1. Для приёма оплаты картами нужно создать экземпляр класса CardData.
let card = CardData(
    pan: "4761349750010326",
    expiryYear: 2022,
    expiryMonth: 12,
    cvCode: "851"
)
  1. Создать токен запроса, используя экземпляр PSCBOnlineClient, созданный ранее.
let request = try! client.makeRequestWithCardData(card: card, payment: payment)
  1. Отправить токен запроса на сервер ПСКБ-Онлайн.
// Send request to backend
client.send(request, responseHandler: { (error, response) in
    guard nil == error && nil != response else {
        print("Error sending request: \(String(describing: error))")
        return
    }
    
    print("Successful request:")
    print(response!)
})

В случае успешного выполнения запроса, response будет содержать информацию о принятом платеже, его ID, состояние и прочие данные.

Приём оплаты Apple Pay

Для приёма платежей через Apple Pay вы должны зарегестрировать Merchant ID в Apple.

Помимо merchant ID необходимо настроить сертификат обработки запросов (Payment Processing Certificate) и передать его ПСКБ-Онлайн. Этим сертификатом Apple будет шифровать данные банковских карт перед отправкой на сервер ПСКБ-Онлайн.

Все пререквизиты описаны на сайте официальной документации Apple.

Также вы можете ознакомиться сподробной инструкцией на сайте документации ПСКБ Онлайн.


После выполнения пререквизитов, в коде необходимо:

  1. Импортировать PassKit:
import PassKit
  1. Создать экземпляр класса PKPaymentAuthorizationController и настроить делегирующий класс PKPaymentAuthorizationControllerDelegate:

Пример:

import PassKit
import PSCBOnline
 
class ApplePayHandler: NSObject {
    
    public func handleApplePay(payment: Payment) {
        // Позиции оплаты для представления пользователя
        let items = [PKPaymentSummaryItem(label: "Shoes", amount: NSDecimalNumber(intergerLiteral: 1000))]
        
        // Запрос на оплату для PKPaymentAuthorizationController
        let paymentRequest = PSCBAPI.makePaymentRequest(merchantId: "<Your Apple Merchant ID>", items: [])
        
        // Вызов модуля оплаты
        let authorizationController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
        
        authorizationController?.delegate = self
        authorizationController?.present(completion: { presented in
         if presented {
             print("Controller presented")
         } else {
             print("Controller could not be presented")
         }
        })
    }
}

extension ApplePayHandler: PKPaymentAuthorizationControllerDelegate {
    
    public func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController,
                                               didAuthorizePayment payment: PKPayment,
                                               handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
        
        // 1.
        // Вызывается после авторизации платежа плательщиком биометрическими данными или паролем
    }
    
    public func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
        // 2.
        // Вызывается после того, как платёж совершён или пользователь закрыл модуль оплаты.
    }
    
}

<Your Apple Merchant ID> - Ваш идентификатор мерчанта.

  1. Далее в примере выше в п.1 и п.2 реализовать необходимую логику отправки запроса на сервер ПСКБ-Онлайн. Для пункта 1 - это создание токена запроса (используя client.makeRequestWithPayment(pkPayment, pscbPayment) и отправка его на сервер:
// Request token
let request = try! client.makeRequestWithPayment(pkPayment: pkPayment, pscbPayment: payment)

// Sending request to backend
client.send(request, responseHandler: { (error, response) in
    if (error == nil && response != nil) {
        completion(PKPaymentAuthorizationResult(status: .success, errors: nil))
    } else {
        print("Error sending payment: \(String(describing: error))")
        completion(PKPaymentAuthorizationResult(status: .failure, errors: nil))
    }
})
  1. А для пункта 2 - обработка закрытия модуля оплаты.

Описание классов и параметров