Невозможно получить доступ к номеру телефона, имени, улице, от PKContact внутри метода делегирования PKPaymentAuthorizationViewController didSelectShippingContact - PullRequest
3 голосов
/ 29 января 2020

Я интегрирую Apple Pay, используя PKPaymentAuthorizationViewController и его методы делегирования. Когда пользователь меняет адрес, запускается следующий метод делегата:

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingContact:(PKContact *)contact completion:(void (^)(PKPaymentAuthorizationStatus status, NSArray<PKShippingMethod *> *shippingMethods, NSArray<PKPaymentSummaryItem *> *summaryItems))completion

Когда я пытаюсь получить доступ к номеру телефона из «контакта», он всегда пуст и также имя (имя, фамилия и т. Д. * 1028). *.) также пусты. Но выбранный контакт доставки имеет всю информацию, такую ​​как имя, номер телефона, почтовый адрес.

PKPaymentRequest *pkPaymentRequest = [[PKPaymentRequest alloc] init];
pkPaymentRequest.merchantIdentifier = merchantId;
pkPaymentRequest.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkDiscover];
pkPaymentRequest.merchantCapabilities = PKMerchantCapability3DS;
pkPaymentRequest.countryCode = @"US";
pkPaymentRequest.currencyCode = @"USD";
pkPaymentRequest.requiredShippingContactFields = [NSSet setWithArray:@[PKContactFieldPostalAddress, PKContactFieldName, PKContactFieldPhoneNumber]];

Это адрес, который я использовал на данный момент: enter image description here

Найдите отладочную информацию на скриншотах ниже, где показано, что в объекте PKContact "contact" отсутствует необходимая информация.

enter image description here

enter image description here

enter image description here

1 Ответ

1 голос
/ 03 февраля 2020

Я нашел решение, надеюсь, что это может помочь кому-то, как я.

https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypayment/1916097-shippingcontact

Приведенная выше ссылка дала мне подсказки, что я не могу получить полная информация об адресе в методе делегата didSelectShippingContact. Вместо этого он будет предоставлен только после авторизации платежа пользователем с помощью Touch ID, Face ID или пароля в методе делегата didAuthorizePayment. Здесь у нас есть объект PKPayment (payment), этот объект состоит из всех полей адреса / контакта, которые мне требуются для дальнейшей обработки для завершения платежной транзакции.

enter image description here

...