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

Posted

技术标签:

【中文标题】以编程方式将信用卡/银行卡添加到用户的苹果钱包【英文标题】:Programmatically add a credit/bank card to a user's apple wallet 【发布时间】:2021-02-05 12:47:38 【问题描述】:

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

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

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

我正在这里阅读文档

https://developer.apple.com/documentation/passkit/pkaddpaymentpas-s-request?language=objc

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

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

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

这个问题是我能找到的最接近我所问的问题。有一些 cmets 询问服务器端的实现,但答案不明确

PKAddPassPaymentRequest not able to send a Request

【问题讨论】:

@s-p-balu-kommur 你似乎有这方面的经验。有什么想法吗? @luca-taccagni 以及 请参考:developer.apple.com/library/archive/documentation/… ***.com/questions/58626074/… 【参考方案1】:

您可以通过在服务器端创建 .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

【讨论】:

我将用 C# 编写这个,但我可以通过查看这个 php 项目来获得我需要的东西。链接和这个 php 项目给了我很多工作。我会告诉你。谢谢! 如果您觉得合适,请接受答案 如果这是正确的答案,我会的。看起来这是常规通行证,而不是付款通行证。支付通行证不能带pkpass。这就是我问这个问题的原因。付款通行证似乎与普通通行证有很大不同 此解决方案不起作用,因为它适用于常规通行证而不是付款通行证。付款通行证的工作流程非常不同。【参考方案2】:

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

【讨论】:

以上是关于以编程方式将信用卡/银行卡添加到用户的苹果钱包的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将支付卡添加到苹果钱包中

如何从 ios 应用程序将信用卡/借记卡添加到苹果钱包

关于Uber优步无法解除默认绑定支付方式和百度钱包无法解除银行卡/信用卡绑定的问题

信用卡术语

KARSAFE钱包的防盗刷功能是啥

是否可以从 PayPal 账户向银行账户或信用卡转账?