pscbonline-ios/README.md

218 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ПСКБ Платежи iOS SDK
[![Platform](https://img.shields.io/badge/Support-iOS%2010.0+-brightgreen.svg)](https://img.shields.io/badge/Support-iOS%2010.3+-brightgreen.svg)
Библиотека является дополнением к API системы интернет-эквайринга [ПСКБ "Платежи"](https://online.pscb.ru)
и позволяет подключить приём платежей по картам в мобильных приложениях iOS с минимальными усилиями.
## Возможности
На текущий момент библиотека поддерживает:
- Apple Pay
- Оплата картами
## Подключение зависимостей
1. Установите CocoaPods 1.10.0 или выше
```zsh
gem install cocoapods
```
[Официальная документация по установке CocoaPods](https://guides.cocoapods.org/using/getting-started.html)
2.  Создайте в своём приложении `Podfile`
Это также можно сделать при помощи команды `pod init` , находясь в директории своего проекта. (В таком случае будет создан `Podfile` с настройками по умолчанию)
3. Добавьте зависимости в `Podfile`
```ruby
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
4. Выполните команду `pod install`
## Интеграция
1. Для работы с библиотекой импортируйте зависимости в нужный файл проекта:
```swift
import PSCBOnline
```
2. Создайте экземпляр `PSCBOnlineClient` с вашими настройками:
```swift
let apiClient = PSCBOnlineClient(
environment: .sandbox,
marketPlaceId: "<Your MarketPlace ID>",
signingKey: "<Your Signing Key>"
)
```
> `environment` -  окружение, в рамках которого библиотека взаимодействует с сервисом. `.sandbox` - тестовое окружение; `.production` - продуктовое.
> `Your MarketPlace ID` - ваш идентификатор в системе ПСКБ-Онлайн.
> `Your Signing Key` - ваш ключ подписи запросов к системе.
3. Создайте экземпляр `Payment`
```swift
let payment = Payment(amount: Decimal(1000.00), orderId: "Order-ID")
```
> `amount` - сумма в рублях. (_На текущий момент другая валюта не поддерживается._)
> `orderId` - уникальный идентификатор заказа в рамках магазина.
_Для детальной информации, какие параметры принимает смотрите документацию `Payment`._
----
Дальнейшая интеграция отличается от способа оплаты.
## Доступные способы оплаты
Сейчас в SDK доступна оплата:
- Банковкой кратой
- Apple Pay
Для их настройки реализации смотрите дальше.
### Приём оплаты банковскимикартами
1. Для приёма оплаты картами нужно создать экземпляр класса `CardData`.
```swift
let card = CardData(
pan: "4761349750010326",
expiryYear: 2022,
expiryMonth: 12,
cvCode: "851"
)
```
2. Создать токен запроса, используя экземпляр `PSCBOnlineClient`, созданный ранее.
```swift
let request = try! client.makeRequestWithCardData(card: card, payment: payment)
```
3. Отправить токен запроса на сервер ПСКБ-Онлайн.
```swift
// 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](https://developer.apple.com/documentation/passkit/apple_pay/setting_up_apple_pay_requirements).
Также вы можете ознакомиться сподробной инструкцией на сайте документации [ПСКБ Онлайн](https://docs.pscb.ru/oos/advanced.html#dopolnitelnye-opcii-apple-pay).
---
После выполнения пререквизитов, в коде необходимо:
1. Импортировать `PassKit`:
```swift
import PassKit
```
2. Создать экземпляр класса `PKPaymentAuthorizationController` и настроить делегирующий класс `PKPaymentAuthorizationControllerDelegate`:
Пример:
```swift
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>` - Ваш идентификатор мерчанта.
3. Далее в примере выше в п.1 и п.2 реализовать необходимую логику отправки запроса на сервер ПСКБ-Онлайн.
Для пункта 1 - это создание токена запроса (используя `client.makeRequestWithPayment(pkPayment, pscbPayment)` и отправка его на сервер:
```swift
// 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))
}
})
```
4. А для пункта 2 - обработка закрытия модуля оплаты.
## Описание классов и параметров