【问题标题】:ApplePay iOS error - This device cannot make paymentsApplePay iOS 错误 - 此设备无法付款
【发布时间】:2014-10-20 23:15:52
【问题描述】:

将 ApplePay 与我的测试应用程序集成时,我收到错误:

此设备无法付款

我已经设置了一张要使用的卡,并在销售点终端对其进行了测试 - 在那里工作正常。

应该工作(但不工作)的代码行是:

PKPaymentAuthorizationViewController *auth = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];

【问题讨论】:

    标签: ios


    【解决方案1】:

    Apple 的文档在详细列出集成步骤方面严重不足。

    Apple 的 Getting Started with Apple Pay 文档提到了这些要点:

    先决条件

    除了使用 PassKit 框架实现 Apple Pay 之外,您还必须:

    • 使用支付处理器或网关设置帐户(如果您还没有) 一个
    • 通过Certificates, Identifiers & Profiles注册商户标识符
    • 提交Certificate Signing Request 以获取用于加密和解密支付令牌的公钥和私钥
    • (缺少步骤)将证书包含在您的钥匙串中
    • 在您的应用程序中包含 Apple Pay 授权。

    就我而言,我忘记了第 3 步。解决方法是使用在第 2 步中创建的商家 ID 提交新的 CSR,并将生成的证书包含在您的钥匙串中。

    编辑:但等等,还有更多!

    您还需要前往 Apple 会员中心的 AppID 部分并编辑该应用的 App ID 以包含您刚刚创建的商家帐户 ID。否则,您的应用将不会被配置为使用商家 ID。之后,转到 Xcode 首选项并刷新您的配置文件(或根据需要手动下载并安装它们)。

    这些步骤应该可以让您摆脱“此设备无法付款”错误。

    【讨论】:

    • 嗨。我也面临和你一样的问题。我已经完成了该过程的 4 步。但我的应用程序仍然无法正常工作。请帮助我。谢谢。这是我的视频记录:recordit.co/5N6tnRJdJy
    • @haotc92 请查看编辑,我添加了更多步骤。当您尝试展示它时,您的 *authVC 看起来也为零。尝试以下方法: 1. 确保将 authVC 分配给强属性,以便它不会在创建后立即释放。 2.设置断点并确保authVC在创建时不为nil。如果为 nil,则可能表明 paymentRequest 有问题。
    • 如果设备无法付款,authVC init 方法将返回 nil。在尝试实例化视图控制器之前,应该使用 PKPaymentAuthorizationViewController canMakePayments 来检查能力。
    • 在完成上述所有步骤后,我仍然遇到问题(在英国)。我手机上的所有应用程序都没有显示 Apple Pay 选项:\
    • 如何在我的钥匙串中包含证书? @y2chaits
    【解决方案2】:

    确保您在 Passbook 上设置的信用卡经过验证...否则,PKPaymentAuthorizationViewController 将返回 nil。

    【讨论】:

    【解决方案3】:
    request.supportedNetworks = [NSArray arrayWithObjects:PKPaymentNetworkAmex,PKPaymentNetworkDiscover,PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay, nil];
    

    确定你的卡在那些对象中!

    【讨论】:

      【解决方案4】:

      您可能想检查您的卡是否真的可用。我的钱包中有三张卡时遇到了这个问题。两张借记卡(Interac-For Canada)和一张 Visa 卡。我忘记了钱包中的 Visa 已过期,并且应用内 Apple Pay 尚不支持 Interac,这迫使 Passkit 返回 Nil PKPaymentAuthorizationControllerInstance。为了解决这个问题,我在 iPhone 的 Wallet 应用程序中检查了支持的支付类型,如下所示:

      func checkApplePayCapabilities() -> Dictionary<String, Any>? {
          var mar = Array<String>()
          var methods : Dictionary<String, String> = ["visa":"no","mastercard":"no","amex":"no","interac":"no","debit":"no"]
          let payload = Dictionary<String, Any>()
          guard PKPaymentAuthorizationViewController.canMakePayments() else {
              return nil
          }
          guard #available(iOS 10, *) else {
              return nil
          }
          if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [PKPaymentNetwork.amex]) {
              print("can make amex")
              methods["amex"] = "yes"
              mar.insert("visa", at: mar.count)
          }
          if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [PKPaymentNetwork.visa]) {
              print("can make visa")
              methods["visa"] = "yes"
              mar.insert("visa", at: mar.count)
          }
          if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [PKPaymentNetwork.masterCard]) {
              print("can make mastercard")
              methods["mastercard"] = "yes"
              mar.insert("mastercard", at: mar.count)
          }
          if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [PKPaymentNetwork.interac]) {
              print("can make interac")
              methods["interac"] = "yes"
              mar.insert("interac", at: mar.count)
          }
          guard mar.isEmpty else {
              return payload
          }
          return nil
      }
      

      它应该只返回在应用程序中可用的卡片。当然,您可以添加任何其他付款方式,或者创建一个您想要的方法数组并使用 for 循环运行它。

      【讨论】:

        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 2016-03-02
        • 2021-05-27
        • 2011-12-14
        • 1970-01-01
        • 2012-07-16
        • 2022-06-14
        • 2016-01-04
        相关资源
        最近更新 更多