2

我在一家银行工作,我正在从事一个以编程方式将用户的信用卡/银行卡添加到他们的苹果钱包的项目。该卡已由我们的银行发行。

我们的应用程序已经拥有 com.apple.developer.payment-pass-provisioning 的权利。我能够填充配置并调用 PKAddPaymentPassViewController。模式加载正确,一旦用户单击下一步,我就会收到证书、nonce 和 nonceSignature 的响应。

我现在正在尝试调用需要字段 activationData、encryptedPassData、wrappedKey、ephemeralPublicKey 的 PKAddPaymentPassRequest

我在这里阅读文档

https://developer.apple.com/documentation/passkit/pkaddpaymentpassrequest?language=objc

我的理解是应用程序需要将证书、nonce 和 nonceSignature 传递给我们的 api,然后使用这些证书来加密信用卡信息等。我们的 api 将响应 activationData、encryptedPassData、wrappedKey、ephemeralPublicKey 然后应用程序可以调用带有该数据的 PKAddPaymentPassRequest 以完成该过程。

我不知道从 api 方面开始。如何使用证书正确生成所需的加密字符串?支付通行证的 json 格式是什么?有很多不同通行证的例子,但没有支付通行证。

是否有任何示例代码可以获取证书并生成 encryptedPassData 和其他字段?我在 developer.apple.com 上看到了一些通行证示例代码,但没有任何支付通行证的示例代码。

这个问题是我能找到的最接近我所问的问题。有一些评论询问服务器端实现,但答案尚不清楚

PKAddPassPaymentRequest 无法发送请求

4

2 回答 2

2

您可以通过在服务器端创建 .pkpass 将信用卡添加到苹果钱包中

并在 ios 端下载该文件,它将添加到 ios 钱包

这是使用完成处理程序从服务器下载 .pkpass(存折文件)并显示 pkpassviewcontroller 以进一步添加到苹果钱包的代码。

  import PassKit


let url : NSURL! = NSURL(string: "YOUR .pkpass URL GOES HERE")
        let request: NSURLRequest = NSURLRequest(url:
            url as URL)
        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)

    let task : URLSessionDataTask = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in

        var error: NSError?
        let pass = try? PKPass(data: data!, error: &error)
        if error != nil {
            DispatchQueue.main.async {
                let alertView = UIAlertView(title: "Error", message: (error?.localizedDescription)!, delegate: nil, cancelButtonTitle: "OK", otherButtonTitles: "Cancel")
                alertView.show()
            }
        }
        else {
            let passLibrary = PKPassLibrary()
            if passLibrary.containsPass(pass!) {
                DispatchQueue.main.async {
                    let alertView = UIAlertView(title: "Already Exist", message: "This pass already added in wallet. Thanks!", delegate: nil, cancelButtonTitle: "OK", otherButtonTitles: "Cancel")
                    alertView.show()
                    self.hideLoading()
                }
            } else {
                let pkvc = PKAddPassesViewController(pass: pass!)
                pkvc.delegate = self
                self.present(pkvc, animated: true, completion: {() -> Void in
                    // Do any cleanup here
                    self.hideLoading()
                })

            }
        }

    })
    task.resume()

为 iOS 钱包应用程序创建通行证的 PHP 库

https://github.com/flexible-agency/php-pkpass

于 2020-10-26T13:27:29.610 回答
0

实施细节被认为是保密的,您必须联系苹果以获得适当的文档

于 2020-11-17T22:44:43.930 回答