Coder Social home page Coder Social logo

wayforpay-swift-client's Introduction

WayForPay-Swift-Client

Install with Swift Package Manager

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

Install with Cocoapods

pod "WFPClient", '0.2.3'

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 выбирать и определить ваши дальнейшие действия

wayforpay-swift-client's People

Contributors

nerzh avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

rsimenok

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.