无法出示 Apple Pay 授权控制器
Unable to present Apple Pay Authorization Controller
当我尝试使用 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")
}
}
每次尝试时,我都会收到消息 "Failed to present payment controller",并且没有出现 Apple Pay 授权模式。
我添加了一个 PKPaymentAuthorizationController.canMakePayments()
检查,结果 returns 为真。我不确定会出什么问题。相同的代码(具有不同的 merchantIdentifier
)在我的其他 Apple Pay 项目中没有问题。
我想通了,以供以后遇到此问题的任何人使用。
原来我的 PKPaymentSummaryItems 数组中的一个 NSDecimalNumbers 有问题,它没有正确转换为小数,导致 amount
被设置为 NaN
。一旦我修复它,控制器就会正常显示。
我使用以下步骤修复了它:其中 1 个可能是正确答案。
- 在App target capabilities中,启用Apple wallet和Apple pay
- 在 Apple 支付列表中包含正确的商家 ID
- 更改权利中的商家 ID
- 如果提供中有任何错误,请启用 "Automatically manage signing" 配置文件(uncheck/check 如果需要)
如果您在 PKPaymentRequest
对象的任何属性中有拼写错误,将导致此行为。请仔细检查以下属性是否正确:
merchantID
应与您在 Capabilities 中的 merchantID 匹配。
currencyCode
应该是三个字母的 ISO 4217 货币代码。
countryCode
应该是两个字母的 ISO 3166 国家代码。
decimalNumbers
在 paymentSummaryItems
就我而言,我试图用硬编码的 merchantID 测试该功能,结果发现它拼错了。在这种情况下,PKPaymentRequest
和 PKPaymentAuthorizationController
(或 PKPaymentAuthorizationViewController
)将成功初始化,但当您显示控制器时,它根本不会显示。
当我尝试使用 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")
}
}
每次尝试时,我都会收到消息 "Failed to present payment controller",并且没有出现 Apple Pay 授权模式。
我添加了一个 PKPaymentAuthorizationController.canMakePayments()
检查,结果 returns 为真。我不确定会出什么问题。相同的代码(具有不同的 merchantIdentifier
)在我的其他 Apple Pay 项目中没有问题。
我想通了,以供以后遇到此问题的任何人使用。
原来我的 PKPaymentSummaryItems 数组中的一个 NSDecimalNumbers 有问题,它没有正确转换为小数,导致 amount
被设置为 NaN
。一旦我修复它,控制器就会正常显示。
我使用以下步骤修复了它:其中 1 个可能是正确答案。
- 在App target capabilities中,启用Apple wallet和Apple pay
- 在 Apple 支付列表中包含正确的商家 ID
- 更改权利中的商家 ID
- 如果提供中有任何错误,请启用 "Automatically manage signing" 配置文件(uncheck/check 如果需要)
如果您在 PKPaymentRequest
对象的任何属性中有拼写错误,将导致此行为。请仔细检查以下属性是否正确:
merchantID
应与您在 Capabilities 中的 merchantID 匹配。currencyCode
应该是三个字母的 ISO 4217 货币代码。countryCode
应该是两个字母的 ISO 3166 国家代码。decimalNumbers
在 paymentSummaryItems
就我而言,我试图用硬编码的 merchantID 测试该功能,结果发现它拼错了。在这种情况下,PKPaymentRequest
和 PKPaymentAuthorizationController
(或 PKPaymentAuthorizationViewController
)将成功初始化,但当您显示控制器时,它根本不会显示。