WFPClient 0.2.3

WFPClient 0.2.3

Maintained by Oleh Hudeichuk.



WFPClient 0.2.3

WayForPay-Swift-Client

Install with Swift Package Manager

dependencies: [
    .package(name: "WFPClient", url: "https://github.com/nerzh/WayForPay-Swift-Client.git", from: "0.2.0"),
],
targets: [
    .target(
        name: "YourProject",
        dependencies: [
            .product(name: "WFPClient", package: "WFPClient"),
        ]
    )
]

Install with Cocoapods

pod "WFPClient", '0.2.2'

Import

import WFPClient

Usage

  1. Создаем объект request
let request: WFPChargeRequest = .init(transactionType: .CHARGE,
                                      merchantAccount: "мерчант из кабинета WayForPay",
                                      merchantDomainName: "https://адрес вашего сайта",
                                      orderReference: "id заказа с вашей базы",
                                      orderDate: "дата заказа",
                                      currency: .UAH,
                                      clientFirstName: "Имя клиента",
                                      clientLastName: "Фамилия клиента",
                                      clientCountry: "Ukraine",
                                      clientEmail: "почтовый ящик клиента",
                                      clientPhone: "телефон клиента",
                                      merchantTransactionType: .SALE,
                                      merchantTransactionSecureType: .NON3DS)
  1. Создаем объект client, среди необязательных параметров есть httpClient, он наследуется от протокола WFPHttpClientPrtcl и требует реализовать всего один метод с помощью которого отправляется запрос на сервер WayForPay, по умолчанию запрос отправляется с помощью URLSession, если хотите можете реализовать свой и передеать его как параметр клиенту
let client = WFPClient.init(apiURL: URL(string: "https://api.wayforpay.com/api")!,
                            request: request,
                            secretKey: "секретный ключ из кабинета WayForPay для генерации подписи к запросу")
  1. Так как информация о продукте по протоколу добавляется последовательно в три массива и кейс, в котором ими туда сюда надо будет манипулировать выглядит довольно странно, я сделал два метода:
  • собственно добавить продукт к запросу
client.addProduct(name: "Test Product", price: 100.50, count: 2)
client.addProduct(name: "Test Product 2", price: 2.50, count: 1)
  • и на всякий случай метод удаления всех продуктов из запроса
client.deleteProducts()
  1. Сумма считается автоматичекси, но если ваша итоговая сумма отличается, можно задать
client.request.amount = 199.99
  1. Генерируем подпись. Подпись надо генерировать после того, как в запросе будут заполнены все поля
client.generateSignature()
  1. Теперь после того, как в методе делегата вы получили PaymentToken, добавляем его к запросу и можно отправлять запрос на оплату в WayForPay и в зависимости от ответа сервера вызывать handler complete
func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                                        didAuthorizePayment payment: PKPayment,
                                        handler completion: @escaping (PKPaymentAuthorizationResult) -> Void
) {
    
    client.addApplePaymentData(paymentData: payment.token.paymentData)
    
    do {
        try client.sendPaymentRequest { (result) in
            switch result {
            case let .success(wfpChargeResponse):
                if wfpChargeResponse.reasonCode == WFPReasonCode.Ok {
                    completion(PKPaymentAuthorizationResult(status: .success, errors: nil))
                } else {
                    completion(PKPaymentAuthorizationResult(status: .failure, errors: nil))
                }
            case .failure(error):
                completion(PKPaymentAuthorizationResult(status: .failure, errors: nil))
            }
        }
    } catch {
        completion(PKPaymentAuthorizationResult(status: .failure, errors: nil))
    }
}
  1. В ответ на sendPaymentRequest от WayForPay вы получите структуру WFPChargeResponse в которой гарантированно будут
wfpChargeResponse.reason     /// String
wfpChargeResponse.reasonCode /// WFPReasonCode - enum со всеми кодами ошибок и их описаниями description

в зависимости от которых вы сможете определить какой completion status выбирать и определить ваши дальнейшие действия

Вот и всё :)

Инструкция - как настроить оплату с помощью Apple Pay и WayForPay-Swift-Client через платежный шлюз WayForPay напрямую с iOS.

  1. Вам необходимо зарегистрироваться на сайте https://wayforpay.com

  2. Вам необходимо добавить магазин и пройти его активацию.

  3. После того, как ваш магазин будет активирован надо запросить по почте [email protected] запрос на получение сертификата.

  4. После того как вам на почту прийдет файл запроса для того, чтобы создать сертификат вам в начале потребуется создать MerchantID indentifier:

apple_pay_way_for_pay_1

apple_pay_way_for_pay_2

  • 4.1 Description может быть любой, Identifier поговаривают, что должен быть как домен сайта закрепленного за приложением, например такой: если ваш домен https://example.com.ua, то мерчант merchant.ua.com.example apple_pay_way_for_pay_3

  • 4.2 Далее переходите снова на страницу Identifiers, справа выбераете список Merchant IDs и тыкаете в ваш только созданный MerchantID apple_pay_way_for_pay_3_1

  • 4.3 Там вы уже сможете создать сертификат с помощью файла запроса, который вам прислала поддержка WayForPay ранее на почту apple_pay_way_for_pay_4