6

米国外からの米国クライアント向けに Apple Pay を使用してアプリを開発しています。Braintree + Apple Pay を使用しています。Passbook では実際のクレジット カードをサポートしていますが、検証することはできません。

クライアント トークンの生成に成功し、self.braintreeBT の両方の統合方法を試しました。

  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

3
于 2015-01-23T14:11:14.960 に答える
-1

BraintreeSDK のバージョン 3.9.3 で、デシリアライズ時にDiscover CardBTClientTokenApplePayPaymentNetworksValueTransformerのケースがないというバグが見つかりました。これにより、サポートされているネットワーク内の のインスタンスを含む配列が生成されます。その配列を に渡すと、結果は NO になります。このメソッドにはバグが含まれています: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 に答える