PKPaymentRequest 未强制执行 phone 账单地址要求
PKPaymentRequest not enforcing phone requirement for billing address
我们正在创建 PKPaymentRequest
并将 requiredBillingAddressFields
属性 设置为 PKAddressFieldPostalAddress | PKAddressFieldPhone
。系统强制执行地址要求,但 忽略 phone 要求。 (在这种情况下强制执行意味着,在用户填写字段之前不允许继续进行 Apple Pay 交易。)
我们的应用程序不需要送货地址,但在调试时我们将 requiredShippingAddressFields
属性 设置为 PKAddressFieldPostalAddress | PKAddressFieldPhone
并发现 phone 数量要求现在已强制执行。
PKPaymentRequest
或 PKAddressField
文档中没有任何内容表明这是预期的行为。关于如何解决这个问题的任何想法?
编辑 - 这是完整的方法:
+ (PKPaymentRequest *)newPayRequestFromBasket:(WFBasket *)basket
{
PKPaymentRequest *request = [PKPaymentRequest new];
request.supportedNetworks = [WFApplePayManager supportedPaymentNetworks];
request.countryCode = [WFAppTargetDispatcher currentAppTarget].storeConfig.countryCode;
request.currencyCode = [WFAppTargetDispatcher currentAppTarget].storeConfig.currencyCode;
request.merchantIdentifier = [WFAppTargetDispatcher currentAppTarget].storeConfig.merchantIdentifier;
request.merchantCapabilities = PKMerchantCapability3DS; // Support of 3DS is mandatory
int64_t orderId = basket.orderId;
request.applicationData = [NSData dataWithBytes:&orderId length:sizeof(orderId)];
request.paymentSummaryItems = [WFApplePayManager allSummaryItemsFromBasket:basket];
request.requiredBillingAddressFields = [WFApplePayManager requiredBillingFields]; // = PKAddressFieldPostalAddress | PKAddressFieldPhone
return request;
}
API 有点令人困惑,但账单地址就是账单地址。它没有 phone 字段。如果您想获得用户的 phone 号码,您应该使用 requiredShippingAddressFields
。
如果您需要多个运输字段,Swift 的文档不多。这是执行此操作的代码。
Swift 3
var pkAddress = PKAddressField()
pkAddress.insert(.name)
pkAddress.insert(.email)
request.requiredShippingAddressFields = pkAddress
我们正在创建 PKPaymentRequest
并将 requiredBillingAddressFields
属性 设置为 PKAddressFieldPostalAddress | PKAddressFieldPhone
。系统强制执行地址要求,但 忽略 phone 要求。 (在这种情况下强制执行意味着,在用户填写字段之前不允许继续进行 Apple Pay 交易。)
我们的应用程序不需要送货地址,但在调试时我们将 requiredShippingAddressFields
属性 设置为 PKAddressFieldPostalAddress | PKAddressFieldPhone
并发现 phone 数量要求现在已强制执行。
PKPaymentRequest
或 PKAddressField
文档中没有任何内容表明这是预期的行为。关于如何解决这个问题的任何想法?
编辑 - 这是完整的方法:
+ (PKPaymentRequest *)newPayRequestFromBasket:(WFBasket *)basket
{
PKPaymentRequest *request = [PKPaymentRequest new];
request.supportedNetworks = [WFApplePayManager supportedPaymentNetworks];
request.countryCode = [WFAppTargetDispatcher currentAppTarget].storeConfig.countryCode;
request.currencyCode = [WFAppTargetDispatcher currentAppTarget].storeConfig.currencyCode;
request.merchantIdentifier = [WFAppTargetDispatcher currentAppTarget].storeConfig.merchantIdentifier;
request.merchantCapabilities = PKMerchantCapability3DS; // Support of 3DS is mandatory
int64_t orderId = basket.orderId;
request.applicationData = [NSData dataWithBytes:&orderId length:sizeof(orderId)];
request.paymentSummaryItems = [WFApplePayManager allSummaryItemsFromBasket:basket];
request.requiredBillingAddressFields = [WFApplePayManager requiredBillingFields]; // = PKAddressFieldPostalAddress | PKAddressFieldPhone
return request;
}
API 有点令人困惑,但账单地址就是账单地址。它没有 phone 字段。如果您想获得用户的 phone 号码,您应该使用 requiredShippingAddressFields
。
如果您需要多个运输字段,Swift 的文档不多。这是执行此操作的代码。
Swift 3
var pkAddress = PKAddressField()
pkAddress.insert(.name)
pkAddress.insert(.email)
request.requiredShippingAddressFields = pkAddress