微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我们的应用程序已具有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

解决方法

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?