Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apple pay PKPaymentauthorizationViewController always returning nil when loaded with Payment request

I am getting the PK Payment auth view controller instance returned as nil. What is wrong with this code?

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];
    }
}
like image 375
Itzdsp Avatar asked Dec 24 '22 16:12

Itzdsp


1 Answers

Before accessing the PKPaymentAuthorizationViewController, you should configure Apple Pay properly on your iPhone device. If you have not configured Apple Pay on your device you'll get nil value for PKPaymentAuthorizationViewController. You can even find an exception on the console stating "This device cannot make payment."

To configure Apple Pay on your device follow the below steps:

  • Go to Settings.
  • Select Passbook and Apple Pay option (if this option is not visible in settings, go to General -> Language & Region, change your region to US or UK, after this you'll be able to see the Passbook & Apple Pay option in Settings)
  • Open Passbook application from your home screen and configure a valid credit/debit card (US/UK based card only).
  • After verifying the added card, run your application you'll get a valid PKPaymentAuthorizationViewController instance.

Hope this will help.

like image 66
Pradeep Singh Avatar answered Dec 28 '22 09:12

Pradeep Singh