我在启动PKPaymentAuthorizationViewController时遇到问题,在其中一个设备中返回nil。
设备区域设置为英国,我已在Apple Wallet中添加了英国发行的卡片。
PKPaymentRequest配置如下:
let request = PKPaymentRequest()
request.merchantIdentifier = "mymerchantid"
request.supportedNetworks = [PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkAmex]
request.merchantCapabilities = PKMerchantCapability.Capability3DS
request.countryCode = "US"
request.currencyCode = "USD"
let price: <NSDecimalNumber>
let item : PKPaymentSummaryItem = PKPaymentSummaryItem(label: "amount", amount: price, type: .Pending)
request.paymentSummaryItems = [
item
]
let paymentAuthorizationVC = PKPaymentAuthorizationViewController(paymentRequest: request) // Returning Nil
if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(SupportedPaymentNetworks) // Returns true
设备:iPhone 6 操作系统:10.2.2
注意:同一个应用程序在同一个应用程序的其他设备上启动了相同的卡。
尝试如下面的链接和其他一些博客中提到的 - 没有运气 Apple pay PKPaymentauthorizationViewController always returning nil when loaded with Payment request
寻找建议。
答案 0 :(得分:2)
我遇到了同样的问题,原因是当它不包含在支持的支付网络中时,使用Discover卡进行测试。确保您传递了用户群可能使用的所有信用卡类型。
尝试更改此行:
request.supportedNetworks = [PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkAmex]
以下内容:
request.supportedNetworks = [PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkAmex, PKPaymentNetwork.discover]
在Swift3中,PKPaymentAuthorizationViewController
init()
的声明未定义为可选,即使它失败时返回nil
。