Skip to content

pikassa-payments/pikassa-sdk-ios

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pikassa SDK

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

  1. Установите CocoaPods
gem install cocoapods
  1. Создайте файл Podfile

CocoaPods предоставляет команду pod init для создания Podfile с настройками по умолчанию.

  1. Добавьте зависимости в Podfile
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!

target 'Your Target Name' do
  pod 'PikassaSDK',
    :git => 'https://github.com/pikassa-payments/pikassa-sdk-ios.git',
    :tag => 'tag'
end

Your Target Name - название таргета в Xcode для вашего приложения.
tag - версия SDK. Актуальную версию можно узнать на github в разделе releases.

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

Пример использования

Работа с библиотекой осуществляется через объект Pikassa, у которого доступны 2 метода: setup(), sendPaymentData().

  1. Для начала необходимо вызвать метод setup:
Pikassa.setup("your_api_key")

где "your_api_key" - ключ доступа к API.

  1. После инициализации можно вызвать метод отправки данных:
func sendPaymentData(
    method: PaymentMethods,
    invoiceId: String,
    didSuccessBlock: ((PayResponse) -> Void)?,
    didFailBlock: ((Error) -> Void)?)

где method - один из поддерживаемых способов оплаты (далее, в п. 3) invoiceId - номер счета на оплату didSuccessBlock - результат успешной передачи карточных данных, возвращает информацию с сервера в случае успеха (PayResponse), didFailBlock - ошибка при передаче данных, возвращает стандартную ошибку (Error).

  1. На данный момент поддерживаются два метода оплаты - картой (с готовой структурой BankCardDetails) и с кастомным словарем полей:
public enum PaymentMethods {
    case bankCard(details: BankCardDetails)
    
    case custom(details: [String: String])
}
  1. Описание полей BankCardDetails pan - номер карты cardHolder - владелец карты; expYear - год окончания срока действия карты (формат "YY"); expMonth - месяц окончания срока действия карты (формат "mm"); cvc - код с обратной стороны (3 цифры);

И пример вызова:

let cardDetails: BankCardDetails = BankCardDetails(
            pan: "4444 4444 4444 4444",
            cardHolder: "CARD HOLDER",
            cvc: "999",
            expYear: "2024",
            expMonth: "11")
        
        Pikassa.sendPaymentData(
            method: PaymentMethods.bankCard(details: cardDetails),
            invoiceId: "<invoice id>",
            didSuccessBlock: { ... },
            didFailBlock: { ... })
  1. Для вызова передачи платежных данных с кастомными полями для вызова обязательным является наличие параметра "paymentMethod" в передаваемом словаре:
        Pikassa.sendPaymentData(
            method: PaymentMethods.custom([ "paymentMethod": "Mobile", "phone" : "+79999999999"]),
            invoiceId: "<invoice id>",
            didSuccessBlock: { ... },
            didFailBlock: { ... })

Перечень методов оплаты

  1. В случае успеха выполнения отправки данных, в didSuccessBlock приходит ответ PayResponse, структура которого выглядит следующим образом:
public struct PayResponse: Decodable {
    public let uuid: String
    public let requestId: String
    public let redirect: Redirect?
}

uuid - идентификатор платежа; requestId - идентификатор запроса redirect - ссылка для перенаправления пользователя. Например, для карт может потребоваться перенаправление пользователя на страницу ввода кода 3DS. Может быть нулевым, если аутентификация не нужна при платеже. В случае, если ненулевое поле, то структура следующая:

public struct Redirect: Decodable {
    public let url: String
    public let method: String             //метод оплаты
    public let params: [[String: String]] //дополнительные возвращаемые параметры
}

Здесь основным параметром является url, в котором хранится ссылка на редирект, по которому нужно пройти для подтверждения платежа.

  1. В случае неуспешного выполнения отправки данных в didFailBlock приходит стандартный интерфейс ошибки Error.

В случае если он приводится к классу PikassaError, причину ошибки можно понять по полю code (возможные коды ошибок)

В остальных случаях обрабатывать также как обычные системные ошибки (например для ошибок сети приводить к NSError и сравнивать domain с NSURLErrorDomain)