Apple付费PKPaymentauthorizationViewController在加载付款请求时始终返回nil

时间:2015-07-20 20:35:32

标签: ios objective-c applepay

我将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];
    }
}

3 个答案:

答案 0 :(得分:6)

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

的例外情况

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

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

希望这会有所帮助。

答案 1 :(得分:0)

我有一个类似的问题。似乎您已包含它,但是对于其他为此苦苦挣扎的人来说,我的问题并不是最初向请求提供vendorCapabilities。

迅速:

request.merchantCapabilities = PKMerchantCapability.capability3DS

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

答案 2 :(得分:0)

如果要使用原始值实例化支持网络,请确保使用正确的大写字母来完成它们。

// 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
}