无法提供Apple Pay授权控制器

时间:2017-02-17 18:34:50

标签: swift swift3 ios10 applepay ios10.2

当我尝试使用present(completion: _)呈现PKPaymentAuthorizationController时,它会在没有任何进一步信息的情况下失败。

以下是我如何呈现它:

let paymentSummaryItems: [PKPaymentSummaryItem] = <HIDDEN>

let paymentRequest = PKPaymentRequest()
paymentRequest.paymentSummaryItems = paymentSummaryItems
paymentRequest.merchantIdentifier = <HIDDEN>
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.countryCode = "US"
paymentRequest.currencyCode = "USD"
paymentRequest.supportedNetworks = [.visa, .amex, .masterCard, .discover]
paymentRequest.requiredShippingAddressFields = [.email]

let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self

paymentController.present { success in
    if success {
      print("Presented payment controller")
    } else {
      print("Failed to present payment controller")
    }
}

每次尝试时,都会收到消息&#34;无法显示付款控制器&#34;,并且没有Apple Pay授权模式。

我添加了PKPaymentAuthorizationController.canMakePayments()项检查,并返回true。我不确定会出现什么问题。相同的代码(具有不同的merchantIdentifier)可以在我的其他Apple Pay项目中使用,没有任何问题。

3 个答案:

答案 0 :(得分:1)

如果PKPaymentRequest对象的任何属性都有错别字,则将导致此行为。请仔细检查以下属性是否正确:

  • merchantID应该与您在Capabilities中的商人ID相匹配。
  • currencyCode应该是三个字母的ISO 4217货币代码。
  • countryCode应该是两个字母的ISO 3166国家/地区代码。
  • decimalNumbers in paymentSummaryItems

以我为例,我试图仅使用带有硬编码的商人ID的功能进行测试,结果发现它的拼写错误。在这种情况下,PKPaymentRequestPKPaymentAuthorizationController(或PKPaymentAuthorizationViewController)将被成功初始化,但是当您显示控制器时,它根本不会显示。

答案 1 :(得分:0)

对于今后遇到这个问题的人来说,我想通了。

事实证明我的PKPaymentSummaryItems数组中有一个NSDecimalNumbers存在问题,它没有正确转换为小数,导致amount设置为NaN。一旦我修好它,控制器就会出现。

答案 2 :(得分:0)

我使用以下步骤修复它:其中1个可能是正确答案。

  • 在App目标功能中,启用Apple钱包和Apple支付
  • 在Apple付款清单中包含正确的商家ID
  • 更改权利中的商家ID
  • 如果有任何错误,请启用&#34;自动管理签名&#34;配置文件(取消选中/检查是否需要)。

App target capabilities screenshot