Stripe SCA необходимо обработать следующее действие
Раньше я использую строку в этом приложении, но все, что сделано внутренним разработчиком, но теперь полоса меняет свою реализацию и поддерживает изменение европейских платежей (поддержка 3D Secure Authentication) с помощью SCA, поэтому теперь мне нужно добавить библиотеку в свой локальный код, но я застрял на этом месте.
Я получил идентификатор клиента с сервера, но обработка следующего действия даст мне примерно такую ошибку.
Error Domain=STPPaymentHandlerErrorDomain Code=1 "Произошла непредвиденная ошибка - попробуйте еще раз через несколько секунд" UserInfo={com.stripe.lib:ErrorMessageKey= PaymentIntent требует, чтобы перед использованием STPPaymentHandler был подключен PaymentMethod или Source., NSLocalizedDescription= Произошла непредвиденная ошибка - повторите попытку через несколько секунд}
Я не нашел здесь соответствующих документов
Вот мой код
//Api called on server for client id
MyAPIClient.sharedClient.createAndConfirmPaymentIntent(paymentResult,
amount: self.paymentContext.paymentAmount,
returnURL: "payments-example://stripe-redirect",
shippingAddress: self.paymentContext.shippingAddress,
shippingMethod: self.paymentContext.selectedShippingMethod) { (clientSecret, error) in
guard let clientSecret = clientSecret else {
completion(.error, error ?? NSError(domain: StripeDomain, code: 123, userInfo: [NSLocalizedDescriptionKey: "Unable to parse clientSecret from response"]))
return
}
STPPaymentHandler.shared().handleNextAction(forPayment: clientSecret, authenticationContext: paymentContext, returnURL: "payments-example://stripe-redirect") { (status, handledPaymentIntent, actionError) in
switch (status) {
case .succeeded:
guard let handledPaymentIntent = handledPaymentIntent else {
completion(.error, actionError ?? NSError(domain: StripeDomain, code: 123, userInfo: [NSLocalizedDescriptionKey: "Unknown failure"]))
return
}
if (handledPaymentIntent.status == .requiresConfirmation) {
// Confirm again on the backend
MyAPIClient.sharedClient.confirmPaymentIntent(handledPaymentIntent) { clientSecret, error in
guard let clientSecret = clientSecret else {
completion(.error, error ?? NSError(domain: StripeDomain, code: 123, userInfo: [NSLocalizedDescriptionKey: "Unable to parse clientSecret from response"]))
return
}
// Retrieve the Payment Intent and check the status for success
STPAPIClient.shared().retrievePaymentIntent(withClientSecret: clientSecret) { (paymentIntent, retrieveError) in
guard let paymentIntent = paymentIntent else {
completion(.error, retrieveError ?? NSError(domain: StripeDomain, code: 123, userInfo: [NSLocalizedDescriptionKey: "Unable to parse payment intent from response"]))
return
}
if paymentIntent.status == .succeeded {
completion(.success, nil)
}
else {
completion(.error, NSError(domain: StripeDomain, code: 123, userInfo: [NSLocalizedDescriptionKey: "Authentication failed."]))
}
}
}
} else {
// Success
completion(.success, nil)
}
case .failed:
completion(.error, actionError)
case .canceled:
completion(.userCancellation, nil)
}
}
1 ответ
Мое решение было позвонить paymentManager.confirmPayment(withParams: params, authenticationContext: self)
вместо того handleNextAction