OGeek|极客世界-中国程序员成长平台

标题: ios - Braintree Apple Sandbox Pay 扫描指纹 iOS 后显示付款未完成错误 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 22:43
标题: ios - Braintree Apple Sandbox Pay 扫描指纹 iOS 后显示付款未完成错误

我已经实现了支持 Apple Pay 的 Braintree。但我面临一个问题。一切运行正常,但每当我尝试付款时,它都会显示“付款未完成”的标志。我已检查我的域是否已通过验证。我用下面的代码调用了 Apple Pay 按钮。

- (PKPaymentRequest *)paymentRequest
{
    PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init];
    paymentRequest.merchantIdentifier = @"merchant.myIdentifier";
    //paymentRequest.merchantIdentifier = @"merchant.mysandboxIdentifier";
    paymentRequest.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard];
    paymentRequest.merchantCapabilities = PKMerchantCapability3DS;
    paymentRequest.countryCode = @"US"; // e.g. US
    paymentRequest.currencyCode = @"USD"; // e.g. USD
//    self.requiredShippingAddressFields = PKAddressFieldPostalAddress;
//    paymentRequest.requiredShippingAddressFields = PKAddressFieldAll;

//    paymentRequest.shippingMethods = [self ShipingMethod];

//    paymentRequest.shippingContact = [self ShipingAddress"Delivered" :paymentRequest];
   paymentRequest.paymentSummaryItems = [self PaymentSummaryItems];
    return paymentRequest;
}


- (IBAction)applePayButtonTouchUpInsideid)sender
{

    self.navigationController.navigationItem.backBarButtonItem.enabled = NO;
    self.iconLoadingIndicator.hidden = NO;
    [self.iconLoadingIndicator startAnimating];

    backBtn.enabled = NO;
    self.applePayBtn.enabled = NO;
    self.creditCardBtn.enabled = NO;
    self.checkoutBtn.enabled = NO;

    if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa,PKPaymentNetworkDiscover]]) // Returns FALSE
    {
        if ([PKPaymentAuthorizationViewController canMakePayments])
        {
            PKPaymentRequest *paymentRequest = [self paymentRequest];
            PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
            if (vc)
            {
                self.payment_mode = kApplePayMode;
                vc.delegate = self;
                [self.navigationController presentViewController:vc animated:YES completion:nil];

            }
            else
            {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle"" message"Something went wrong. Please Try Again." delegate:self cancelButtonTitle"OK" otherButtonTitles:nil, nil];
                [alert show];
               [self StopLoader];
            }
        }
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle"" message"Your card does not support Apple Pay." delegate:self cancelButtonTitle"OK" otherButtonTitles:nil, nil];
        [alert show];

       [self StopLoader];
    }
}

此代表未调用,因为它卡在付款未完成过程中。 enter image description here

- (void)paymentAuthorizationViewControllerPKPaymentAuthorizationViewController *)controller
                       didAuthorizePaymentPKPayment *)payment
                                   handlervoid (^)(PKPaymentAuthorizationResult *result))completion API_AVAILABLE(ios(11.0), watchos(4.0));
{
    isApplePayInitiatingPayment = YES;

    // Example: Tokenize the Apple Pay payment
    BTApplePayClient *applePayClient = [[BTApplePayClient alloc]
                                        initWithAPIClient:self.braintreeClient];
    [applePayClient tokenizeApplePayPayment:payment
                                 completion:^(BTApplePayCardNonce *tokenizedApplePayPayment,
                                              NSError *error)
     {
         if (tokenizedApplePayPayment)
         {
             // On success, send nonce to your server for processing.
             // If applicable, address information is accessible in `payment`.
             NSLog(@"nonce = %@", tokenizedApplePayPayment.nonce);
             self.wcitiesBraintreeCreateTransaction = [[WcitiesBraintreeCreateTransaction alloc] init];
             [self.wcitiesBraintreeCreateTransaction CreateTransaction:self.totalPrice OneTimeNonce:tokenizedApplePayPayment.nonce paypal_payer_id"" payment_mode:kApplePayMode :^(NSMutableArray *result, NSError *error)
              {
                  if (result.count>0)
                  {
                      self.transaction_id = [result objectAtIndex:0];
                      [self generateClientOrder:NO];
                  }
                  else
                  {
                      UIAlertView *alert = [[UIAlertView alloc] initWithTitle"" message:@"Transaction failure. Please try again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                      [alert show];
                      [self StopLoader];
                  }
              }];


             // Then indicate success or failure via the completion callback, e.g.
             PKPaymentAuthorizationResult *result = [[PKPaymentAuthorizationResult alloc] initWithStatusKPaymentAuthorizationStatusSuccess errors:nil];
             completion(result);
         } else {
             // Tokenization failed. Check `error` for the cause of the failure.

             // Indicate failure via the completion callback:
             PKPaymentAuthorizationResult *result = [[PKPaymentAuthorizationResult alloc] initWithStatusKPaymentAuthorizationStatusFailure errors:nil];
             completion(result);
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Transaction failure. Please try again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
             [alert show];
             [self StopLoader];
         }
     }];
}



Best Answer-推荐答案


尝试使用 Apple 提供的其他测试信用卡。 https://developer.apple.com/apple-pay/sandbox-testing/

我也遇到了这个问题,并通过尝试不同的卡直到其中一张起作用来解决它。

关于ios - Braintree Apple Sandbox Pay 扫描指纹 iOS 后显示付款未完成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833666/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4