以编程方式将信用卡/银行卡添加到用户的Apple钱包

时间:2020-10-22 13:28:15

标签: ios applepay wallet apple-wallet

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

我们的应用程序已具有com.apple.developer.payment-pass-provisioning权利。我能够填充配置并调用PKAddPaymentPassViewController。模态加载正确,一旦用户单击下一步,我将收到证书,随机数和nonceSignature的响应。

我现在正在尝试调用PKAddPaymentPassRequest,它要求使用字段ActivationData,encryptedPassData,wrappedKey,ephemeralPublicKey

我在这里阅读文档

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

我的理解是,应用程序需要将证书,随机数和nonceSignature传递给我们的api,然后使用这些证书对信用卡信息进行加密。我们的api将以ActivationData,encryptedPassData,wrappedKey,ephemeralPublicKey进行响应,然后应用可以使用该数据调用PKAddPaymentPassRequest以完成该过程。

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

是否有任何示例代码使用证书并生成加密的PassData和其他字段?我看到在developer.apple.com上有一些通行证示例代码,但是没有关于支付通行证的示例代码。

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

PKAddPassPaymentRequest not able to send a Request

2 个答案:

答案 0 :(得分: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()

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

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

答案 1 :(得分:0)

实施细节被视为机密,您必须与苹果联系以获取适当的文档