Pikassa SDK
- Установите CocoaPods
gem install cocoapods
- Создайте файл Podfile
CocoaPods предоставляет команду
pod init
для создания Podfile с настройками по умолчанию.
- Добавьте зависимости в
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.
- Выполните команду
pod install
Работа с библиотекой осуществляется через объект Pikassa
, у которого доступны 2 метода: setup(), sendPaymentData()
.
- Для начала необходимо вызвать метод
setup
:
Pikassa.setup("your_api_key")
где "your_api_key"
- ключ доступа к API.
- После инициализации можно вызвать метод отправки данных:
func sendPaymentData(
method: PaymentMethods,
invoiceId: String,
didSuccessBlock: ((PayResponse) -> Void)?,
didFailBlock: ((Error) -> Void)?)
где method
- один из поддерживаемых способов оплаты (далее, в п. 3) invoiceId
- номер счета на оплату didSuccessBlock
- результат успешной передачи карточных данных, возвращает информацию с сервера в случае успеха (PayResponse
), didFailBlock
- ошибка при передаче данных, возвращает стандартную ошибку (Error
).
- На данный момент поддерживаются два метода оплаты - картой (с готовой структурой
BankCardDetails
) и с кастомным словарем полей:
public enum PaymentMethods {
case bankCard(details: BankCardDetails)
case custom(details: [String: String])
}
- Описание полей
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: { ... })
- Для вызова передачи платежных данных с кастомными полями для вызова обязательным является наличие параметра "paymentMethod" в передаваемом словаре:
Pikassa.sendPaymentData(
method: PaymentMethods.custom([ "paymentMethod": "Mobile", "phone" : "+79999999999"]),
invoiceId: "<invoice id>",
didSuccessBlock: { ... },
didFailBlock: { ... })
- В случае успеха выполнения отправки данных, в 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, в котором хранится ссылка на редирект, по которому нужно пройти для подтверждения платежа.
- В случае неуспешного выполнения отправки данных в didFailBlock приходит стандартный интерфейс ошибки Error.
В случае если он приводится к классу PikassaError, причину ошибки можно понять по полю code (возможные коды ошибок)
В остальных случаях обрабатывать также как обычные системные ошибки (например для ошибок сети приводить к NSError и сравнивать domain с NSURLErrorDomain)