4

我将 PK Payment auth 视图控制器实例返回为 nil。这段代码有什么问题?

if([PKPaymentAuthorizationViewController canMakePayments])
{
    if ([PKPaymentAuthorizationViewController    canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]]) 
    {
        PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
        request.currencyCode = @"USD";
        request.countryCode = @"US";
        request.merchantCapabilities = 0;
        request.requiredBillingAddressFields=PKAddressFieldAll;
        request.merchantIdentifier = @"merchant.com.domain.mine";
        PKPaymentSummaryItem *item = [[PKPaymentSummaryItem alloc] init];
        item.label=@"Merchant";
        item.amount=[NSDecimalNumber decimalNumberWithString:@"10"];
        request.paymentSummaryItems=@[item];
        PKPaymentAuthorizationViewController *viewController =  [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
        viewController.delegate = self;
        [self presentViewController:viewController animated:YES   completion:nil];
    }
}
4

3 回答 3

8

在访问之前PKPaymentAuthorizationViewController,您应该在您的 iPhone 设备上正确配置 Apple Pay。如果您尚未在设备上配置 Apple Pay,您将nil获得PKPaymentAuthorizationViewController. 您甚至可以在控制台上找到一个异常说明“ This device cannot make payment.

要在您的设备上配置 Apple Pay,请按照以下步骤操作:

  • 转到设置
  • 选择Passbook 和 Apple Pay选项(如果此选项在设置中不可见,请转到General -> Language & Region,将您的地区更改为 US 或 UK,之后您将能够在Settings中看到Passbook 和 Apple Pay选项)
  • 从您的主屏幕打开Passbook应用程序并配置有效的信用卡/借记卡(仅限美国/英国卡)。
  • 验证添加的卡后,运行您的应用程序,您将获得一个有效的PKPaymentAuthorizationViewController实例。

希望这会有所帮助。

于 2015-07-27T09:06:59.893 回答
1

如果您使用原始值实例化支持网络,请确保它们以正确的大小写完成。

// Summarized for posting purposes
let networks = ["AmEx", "Visa", "MasterCard", "Discover"].reduce(into: [PKPaymentNetwork]()) { $0.append(PKPaymentNetwork($1)) }

if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: networks, capabilities: .capability3DS) {
    // Hooray
}
于 2020-01-27T20:42:26.270 回答
1

我有一个类似的问题。看起来你包括了它,但对于其他为此苦苦挣扎的人,我的问题最初不是为请求提供商人能力。

迅速:

request.merchantCapabilities = PKMerchantCapability.capability3DS

https://developer.apple.com/documentation/passkit/pkmerchantcapability?language=objc

于 2019-03-20T17:22:40.953 回答