ApplePay PKPaymentAuthorizationViewController始终显示处理

Sha*_*Liu 2 ios swift applepay

在此输入图像描述我想在我的应用程序中使用Apple Pay.它可以很好地呈现PKPaymentAuthorizationViewController.但是,在我填写信用卡和结算信息后,它只显示了一个旋转轮和"处理",如图所示.

用于呈现Apple Pay视图控制器的代码如下:

let request = Stripe.paymentRequestWithMerchantIdentifier(DH_APPLEPAY_ID)
request.paymentSummaryItems = [PKPaymentSummaryItem(label: label, amount: amountDecimal)]

request.requiredBillingAddressFields = PKAddressField.All
request.requiredShippingAddressFields = PKAddressField.PostalAddress | PKAddressField.Email
request.countryCode = "US"
request.currencyCode = "USD"
request.merchantCapabilities = PKMerchantCapability.CapabilityEMV | PKMerchantCapability.Capability3DS
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]

if Stripe.canSubmitPaymentRequest(request) {

    let paymentController = PKPaymentAuthorizationViewController(paymentRequest: request)

    paymentController.delegate = self

    self.navigationController?.presentViewController(paymentController, animated: true, completion: nil)
} else {
    //popup
    DHUtils.alert("Apple Pay", message: "Please add your credit card to Passbook.", inViewController: self)
}
Run Code Online (Sandbox Code Playgroud)

func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!)代表永远不会被调用.

证书状态看起来很好.我在这里想念它是为了什么?

Rus*_*abh 8

应该有一个需要调用的完成块.它应该在PKPaymentAuthorizationViewController上的委托方法didAuthorizePayment中,您需要使用此完成块并将成功或失败消息传递给它.看起来应该有点像这样

extension BuySwagViewController: PKPaymentAuthorizationViewControllerDelegate {
  func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!) {
    completion(PKPaymentAuthorizationStatus.Success)
  }

  func paymentAuthorizationViewControllerDidFinish(controller: PKPaymentAuthorizationViewController!) {
    controller.dismissViewControllerAnimated(true, completion: nil)
  }
}
Run Code Online (Sandbox Code Playgroud)

在完成块中,您应该传递PKPaymentAuthorizationStatus.Success或PKPaymentAuthorizationStatus.Failure,具体取决于您是否能够处理付款.

另外,您可以在这里参考Ray Wenderlich教程.http://www.raywenderlich.com/87300/apple-pay-tutorial


Whi*_*ter 5

我的问题是有这个委托方法:

func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController, didSelectPaymentMethod paymentMethod: PKPaymentMethod, completion: ([PKPaymentSummaryItem]) -> Void) {

}
Run Code Online (Sandbox Code Playgroud)

将其取下,它应该会停止无休止的旋转。