如何解决如何使用 Stripe API 确认 Apple Pay 付款
所以几天后,我终于能够在今天早上创建令牌以及付款方式和付款意图设置。现在我对如何使用 Apple Pay 实际确认付款感到困惑,在非 Apple Pay 结账流程中,我有这个功能:
func paymentContext(_ paymentContext: STPPaymentContext,didCreatePaymentResult paymentResult: STPPaymentResult,completion: @escaping STPPaymentStatusBlock) {
guard let paymentIntentClientSecret = paymentIntentClientSecret else {
return;
}
// Collect card details
let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret)
paymentIntentParams.configure(with: paymentResult)
// Submit the payment
let paymentHandler = STPPaymentHandler.shared()
paymentHandler.confirmPayment(paymentIntentParams,with: self) { (status,paymentIntent,error) in
switch (status) {
case .Failed:
self.displayFailureAlert(title: "Payment Failed",message: "There was an error trying to complete the payment,please try again later.")
self.paymentInProgress = false
break
case .canceled:
self.displayCancelleDalert(title: "Payment Canceled",message: "The payment has been cancelled.")
self.paymentInProgress = false
break
case .succeeded:
self.displaySuccessAlert(title: "Payment Succeeded",message: "The payment was successful!")
self.paymentInProgress = false
break
@unkNown default:
fatalError()
break
}
}
}
这很好用。 STPApplePayContext
中的参数与 STPPaymentContext
中的参数略有不同,我无法对其使用完全相同的功能。这是我用于 Apple Pay 结账的功能:
func applePayContext(_ context: STPApplePayContext,didCreatePaymentMethod paymentMethod: STPPaymentMethod,paymentinformation: PKPayment,completion: @escaping STPIntentClientSecretCompletionBlock) {
guard let paymentIntentClientSecret = paymentIntentClientSecret else {
return;
}
let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret)
let error = NSError()
completion(paymentIntentClientSecret,error)
}
这就是我到目前为止所做的一切,我尝试执行 STPapiclient.shared.confirmPaymentIntent(with:)
但没有任何改变,有什么建议吗?
解决方法
基本上你需要关注the instructions starting at step 7 of Stripe's documentation。
具体来说,您需要在您的服务器上创建一个 Payment Intent,将其客户端密钥传递给您的应用,然后按如下方式实现委托方法:
extension CheckoutViewController {
func applePayContext(_ context: STPApplePayContext,didCreatePaymentMethod paymentMethod: STPPaymentMethod,paymentInformation: PKPayment,completion: @escaping STPIntentClientSecretCompletionBlock) {
let clientSecret = ... // Retrieve the PaymentIntent client secret from your backend (see Server-side step above)
// Call the completion block with the client secret or an error
completion(clientSecret,error);
}
func applePayContext(_ context: STPApplePayContext,didCompleteWith status: STPPaymentStatus,error: Error?) {
switch status {
case .success:
// Payment succeeded,show a receipt view
break
case .error:
// Payment failed,show the error
break
case .userCancellation:
// User cancelled the payment
break
@unknown default:
fatalError()
}
}
}
另见 the documentation for STPApplePayContext,它给出了简化的高级指令:
- 使用描述付款请求(金额、行项目、所需送货信息等)的 PKPaymentRequest 初始化此类
- 调用presentApplePayOnViewController:completion:显示Apple Pay表并开始付款过程3(可选):如果您需要响应用户更改其送货信息/送货方式,请实施可选的委托方法
- 当用户点击“购买”时,此类使用您在 applePayContext:didCreatePaymentMethod:completion: 委托方法中提供的 PaymentIntent 来完成支付
- 在支付完成/错误并解除工作表后,此类会在 applePayContext:didCompleteWithStatus: 委托方法中通知您
您将在成功处理程序中使用 retrievePaymentIntent
获得付款响应,调用此函数后您将获得所有与付款相关的信息,您也可以使用 Strip API 获取带有交易 ID 的数据。
func applePayContext(_ context: STPApplePayContext,error: Error?) {
switch status {
case .success:
// Payment succeeded,show a receipt view
context.apiClient.retrievePaymentIntent(withClientSecret: clientSecret) { (paymentIntent,error) in
print(paymentIntent?.allResponseFields ?? "")
}
break
case .error:
// Payment failed,show the error
break
case .userCancellation:
// User cancelled the payment
break
@unknown default:
fatalError()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。