当我尝试使用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")
}
}
每次我尝试时,都会收到“无法显示付款控制器”的消息,并且不会显示Apple Pay Authorization模式。
我添加了PKPaymentAuthorizationController.canMakePayments()
检查,并返回true。我不确定会出现什么问题。相同的代码(使用不同的merchantIdentifier
)可以在我的其他Apple Pay项目中运行,没有任何问题。
如果你在PKPaymentRequest
对象的任何属性上有拼写错误,那将导致此行为。请仔细检查以下属性是否正确:
merchantID
应与您的商家ID匹配。currencyCode
应该是三个字母的ISO 4217货币代码。countryCode
应该是两个字母的ISO 3166国家代码。decimalNumbers
在paymentSummaryItems中在我的情况下,我试图用硬编码的商家ID测试该功能,结果发现它拼写错误。在这种情况下,PKPaymentRequest
和PKPaymentAuthorizationController
(或PKPaymentAuthorizationViewController
)将成功初始化,但是当你呈现控制器时,它根本就不会出现。
对于今后遇到这个问题的人,我想通了。
事实证明我的PKPaymentSummaryItems数组中的一个NSDecimalNumbers存在问题,它没有正确转换为小数并导致amount
被设置为NaN
。一旦我修好它,控制器出现正常。