Apple pay PKPaymentauthorizationViewController всегда возвращает ноль при загрузке платежного запроса

Я получаю экземпляр контроллера представления платежа PK, возвращаемый как ноль. Что не так с этим кодом?

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

person Itzdsp    schedule 20.07.2015    source источник


Ответы (3)


Прежде чем получить доступ к PKPaymentAuthorizationViewController, вы должны правильно настроить Apple Pay на своем устройстве iPhone. Если вы не настроили Apple Pay на своем устройстве, вы получите значение nil для PKPaymentAuthorizationViewController. Вы даже можете найти исключение в консоли с указанием "This device cannot make payment."

Чтобы настроить Apple Pay на вашем устройстве, выполните следующие действия:

  • Перейдите в Настройки.
  • Выберите вариант Passbook и Apple Pay (если этот параметр не отображается в настройках, перейдите в раздел Основные -> Язык и регион, измените свой регион на США или Великобританию, после этого вы сможете увидеть параметр Passbook и Apple Pay в Настройках)
  • Откройте приложение Passbook на главном экране и настройте действующую кредитную/дебетовую карту (только для США/Великобритании).
  • После проверки добавленной карты запустите приложение, и вы получите действительный экземпляр PKPaymentAuthorizationViewController.

Надеюсь, это поможет.

person Pradeep Singh    schedule 27.07.2015
comment
Спасибо, Прадип. На данный момент устройство настроено правильно и мы используем его в повседневной жизни. canMakePayment возвращает True. - person Itzdsp; 27.07.2015
comment
Спасибо, это полезно. - person Lee Jeff; 25.02.2016
comment
Я пытаюсь использовать тестер Sanbox, как подробно описано здесь:developer.apple.com/support/ apple-pay-sandbox, но в моем случае это не работает. Это всегда дает мне нулевую ценность - person Mehul Thakkar; 24.10.2016
comment
@MehulThakkar Я столкнулся с той же проблемой, не могу заставить карты песочницы работать с регионом Великобритании, вам удалось решить вашу проблему? - person Dávid Pásztor; 08.08.2017
comment
У меня это не сработало. Я сделал много изменений, но ничего не изменилось. - person Anand Nimje; 05.12.2017

У меня была аналогичная проблема. Похоже, вы включили его, но для всех, кто борется с этим, моя проблема изначально не заключалась в предоставлении мерчанткапабилити в запрос.

Быстрый:

request.merchantCapabilities = PKMerchantCapability.capability3DS

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

person JPritchard9518    schedule 20.03.2019

Если вы создаете вспомогательные сети с необработанным значением, убедитесь, что они сделаны с правильным использованием заглавных букв.

// 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
}
person PSchuette    schedule 27.01.2020