6

我正在为来自美国以外的美国客户使用 Apple Pay 开发应用程序。我正在使用 Braintree + Apple Pay。我们支持真实信用卡到 Passbook,但我们无法验证它们。

我成功生成了客户端令牌,self.braintree并尝试了 BT 的两种集成方式。

  1. BTPaymentProvider - 我们对支付方式创建的抽象。

    if(self.braintree && ![self.braintree isKindOfClass:[NSNull class]])
    {
        self.provider = [braintree paymentProviderWithDelegate:self];
        if ([self.provider canCreatePaymentMethodWithProviderType:BTPaymentProviderTypeApplePay])
        {
            self.provider.paymentSummaryItems = @[[PKPaymentSummaryItem summaryItemWithLabel:@"XXXX" amount:[NSDecimalNumber decimalNumberWithString:@"1"]]];
        }
        [self.provider createPaymentMethod:BTPaymentProviderTypeApplePay];
    }
    

    但它没有推动“ PKPaymentAuthorizationViewController”。追踪它也不例外。

  2. PassKit - Apple 的 ApplePay API。

    if([PKPaymentAuthorizationViewController canMakePayments]) // It returns TRUE
    {
        PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init];
        paymentRequest.countryCode = @"US";
        paymentRequest.currencyCode = @"USD";
        paymentRequest.merchantCapabilities = PKMerchantCapabilityEMV | PKMerchantCapability3DS;
        paymentRequest.merchantIdentifier = MERCHANTID;
        paymentRequest.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
        paymentRequest.paymentSummaryItems = @[ [PKPaymentSummaryItem summaryItemWithLabel:@"TEST" amount:[NSDecimalNumber decimalNumberWithString:@"1"]] ];
    
        if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]]) // Returns FALSE
        {
            PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
            vc.delegate = self;
            [self presentViewController:vc animated:YES completion:nil];
        }
    }
    

    这给出了“vc”是nil

纠正我,如果它是错误的。如何在真实设备上进行测试?

4

3 回答 3

10

您的应用程序的 Apple Pay 权利可能设置不正确。

我注意到在未设置权利时canMakePayments退货YEScanMakePaymentsUsingNetworks:退货。NO

(我还注意到,YES当您设置PKPaymentRequest的商家 ID 与您的 Apple Pay 授权的商家 ID 不匹配时,它们都可以返回。在这种情况下,您PKPaymentAuthorizationViewController将不为零,但显示它会在控制台)。

因此,要验证是否为您的应用配置了 Apple Pay,请确保目标设置的 Capabilities 部分中的“Apple Pay”为“On”,并且它具有商家标识符(如果您没有,则需要设置该标识符) '还没有)。

然后:

  • 如果使用您的BTPaymentProvider集成方法,请确保在 Braintree 控制面板中正确设置了证书和商家标识符。
  • 如果使用您的直接PassKit集成方法,请确保您将merchantIdentifier属性设置为权利中匹配的商家标识符。
于 2015-01-23T19:21:39.903 回答
3
于 2015-01-23T14:11:14.960 回答
-1

在 BraintreeSDK 的 3.9.3 版本中,我发现了一个错误,其中反序列化时发现卡BTClientTokenApplePayPaymentNetworksValueTransformer没有案例。这会产生一个数组,该数组包含其supportedNetworks 中的一个实例。将该数组传递给结果为否。此方法包含错误:BTConfiguration.applePaySupportedNetworksPKPaymentRequestNSNullPKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks

- (id)transformedValue:(id)value {
    if ([PKPaymentRequest class]) {
        if ([value isEqualToString:@"amex"]) {
            return PKPaymentNetworkAmex;
        } else if ([value isEqualToString:@"visa"]) {
            return PKPaymentNetworkVisa;
        } else if ([value isEqualToString:@"mastercard"]) {
            return PKPaymentNetworkMasterCard;
        }
    }

    return [NSNull null];
}
于 2016-11-09T23:39:20.873 回答