0

背景: iOS 8.2,8.3 に同じコードを使用しましたが、正常に動作していました。

PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
paymentPane.delegate = self;

[self presentViewController:paymentPane animated:TRUE completion:nil];

支払いリクエストコード:

        PKPaymentRequest *request = [[PKPaymentRequest alloc] init];


        NSString *chargeApplePay=[NSString stringWithFormat:@"%.02f",pay];

        PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"Grand Total"
                                                                          amount:[NSDecimalNumber decimalNumberWithString:chargeApplePay]];

        request.paymentSummaryItems = @[total];
        request.countryCode = @"US";
        request.currencyCode = @"USD";
        request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
        request.merchantIdentifier = @"valid.com.myIdentifier";
        request.merchantCapabilities = PKMerchantCapability3DS;

質問:現在、iOS 8.4 で paymentPane を提示しようとすると、何らかの理由でその値が nil になっています。

致命的な例外: NSInvalidArgumentException アプリケーションが target に nil モーダル ビュー コントローラーを提示しようとしました。

グーグルで、stackoverflowからの回答を使用して、私がすでに試したこと。

  • 使用済み小切手

    [PKPaymentAuthorizationViewController    canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]] 
    

    [PKPaymentAuthorizationViewController canMakePayments]

  • マーチャント ID が有効かどうかを確認しています。

  • リクエストに使用したすべてのコードが有効かどうかを確認しています。
4

2 に答える 2

2
  1. Credit cardデバイスに情報を追加したかどうかを確認しますPassbook

  2. お使いのデバイスを使用して支払いができるかどうかを確認します。

    目標 C :

    if ([PKPaymentAuthorizationViewController canMakePayments]) {
        NSLog(@"Can Make Payments");
    }
    else {
        NSLog(@"Can't Make payments");
    }
    
    スウィフト:
    if PKPaymentAuthorizationViewController.canMakePayments() {
        NSLog(@"Can Make Payments");
    }
    else {
        NSLog(@"Can't Make Payments");
    }
    

  3. 許可された を使用して支払いができるかどうかを確認しますpayment networks

    目的 C:
    NSArray *paymentNetworks = [NSArray arrayWithObjects:PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkAmex, nil];
    if ([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:paymentNetworks]) {
        NSLog(@"Can Make payment with your card");
    }
    else {
        NSLog(@"Card is not supporting");
    }
    スウィフト:
    let paymentNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]
    if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks) {
        NSLog(@"Can Make payment with your card");
    }
    else {
        NSLog(@"Card is not supporting");
    }
于 2015-08-17T12:08:06.737 に答える
0

Xcode デバッガー内で実行しているときにも、同様の問題が発生しました。回避策として、Xcode でアプリを停止してから、iPhone または iPad でアプリを手動で開始します。

これの欠点の 1 つは、問題をデバッグできないことです。私は NSLog に頼ってコンソールログを読む必要がありました。

于 2015-08-05T09:49:05.370 に答える