WFPClient 0.2.3

WFPClient 0.2.3

Oleh Hudeichuk 维护。



WFPClient 0.2.3

WayForPay-Swift-Client

使用 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"),
        ]
    )
]

使用 Cocoapods 安装

pod "WFPClient", '0.2.2'

导入

import WFPClient

使用

  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 时,您将收到 WFPChargeResponse 结构体,其中保证有
wfpChargeResponse.reason     /// String
wfpChargeResponse.reasonCode /// WFPReasonCode - enum со всеми кодами ошибок и их описаниями description

根据这些信息,您可以确定选择哪个完成状态,并确定您的后续操作

这就完成啦:)

如何使用 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

  • 4.2 然后再次转到 Identifiers 页面,在右侧选择列表 Merchant IDs,点击您刚刚创建的 MerchantID

  • 4.3 在那里,您可以使用之前通过电子邮件发送的请求文件创建证书 apple_pay_way_for_pay_4