ApplePay PKPaymentAuthorizationViewController 始终显示正在处理
ApplePay PKPaymentAuthorizationViewController always shows processing
我正在尝试在我的应用程序中使用 Apple Pay。呈现 PKPaymentAuthorizationViewController 效果很好。然而,当我填写信用卡和账单信息后,它只是显示了一个纺车和'processing',如图所示。
呈现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)
}
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!)
委托永远不会被调用。
证书状态看起来没问题。我在这里想念什么才能让它发挥作用?
应该有一个您需要调用的完成块。它应该在 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)
}
}
在完成块中,您应该传递 PKPaymentAuthorizationStatus.Success 或
PKPaymentAuthorizationStatus.Failure 取决于您是否能够处理付款。
此外,您可以在这里参考 Ray Wenderlich 教程。 http://www.raywenderlich.com/87300/apple-pay-tutorial
我的问题是这个委托方法:
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController, didSelectPaymentMethod paymentMethod: PKPaymentMethod, completion: ([PKPaymentSummaryItem]) -> Void) {
}
删除它,它应该停止无限旋转。
呈现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)
}
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!)
委托永远不会被调用。
证书状态看起来没问题。我在这里想念什么才能让它发挥作用?
应该有一个您需要调用的完成块。它应该在 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)
}
}
在完成块中,您应该传递 PKPaymentAuthorizationStatus.Success 或 PKPaymentAuthorizationStatus.Failure 取决于您是否能够处理付款。
此外,您可以在这里参考 Ray Wenderlich 教程。 http://www.raywenderlich.com/87300/apple-pay-tutorial
我的问题是这个委托方法:
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController, didSelectPaymentMethod paymentMethod: PKPaymentMethod, completion: ([PKPaymentSummaryItem]) -> Void) {
}
删除它,它应该停止无限旋转。