Set the PrimerHeadlessUniversalCheckoutDelegate in order to receive callbacks from Primer SDK.
Callbacks can be used for managing the customer journey and trigger actions after specific events throughout the payment journey. See below for a breakdown of all callbacks supported within the Primer SDK.
// 👇 Add thisimport PrimerSDK// 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate { // ... // 👇 Add this func primerDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) { // Do something with the payment's data }}
This method will be called with the when the payment method has been is tokenized, returning the payment method’s tokenization data. Use the token to create a payment on your backend. Make sure that you call the decisionHandler once your operation has been completed.
⚠️ This method will be called when you are using manual payment handling, or the vault manager.
// 👇 Add thisimport PrimerSDK// 👇 Conform to PrimerHeadlessUniversalCheckoutDelegateclass MyViewController: UIViewController, PrimerHeadlessUniversalCheckoutDelegate { // ... // 👇 Add this func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod( _ paymentMethodTokenData: PrimerPaymentMethodTokenData, decisionHandler: @escaping (PrimerResumeDecision) -> Void ) { // Create your payment createPayment(with: paymentMethodTokenData.token) { res, err in if let err = err { // 👇 Call the decisionHandler to show the error screen with your custom error message decisionHandler(.fail(withErrorMessage: "Oh no, something went wrong creating the payment...")) } else if let res = res { if let newClientToken = res.requiredAction?.clientToken { // 👇 Call the decisionHandler with the new client token to continue the flow decisionHandler(.continueWithNewClientToken(requiredAction.clientToken)) } else { // 👇 Call the decisionHandler to show the success screen decisionHandler(.succeed()) } } } }}
// 👇 Add thisimport PrimerSDK// 👇 Conform to PrimerHeadlessUniversalCheckoutDelegateclass MyViewController: UIViewController, PrimerHeadlessUniversalCheckoutDelegate { // ... // 👇 Add this func primerHeadlessUniversalCheckoutDidResumeWith( _ resumeToken: String, decisionHandler: @escaping (PrimerResumeDecision) -> Void ) { // Resume your payment resumePayment(with: resumeToken) { res, err in if let err = err { // 👇 Call the decisionHandler to show the error screen with your custom error message decisionHandler(.fail(withErrorMessage: "Oh no, something went wrong creating the payment...")) } else if let res = res { if let newClientToken = res.requiredAction?.clientToken { // 👇 Call the decisionHandler with the new client token to continue the flow decisionHandler(.continueWithNewClientToken(requiredAction.clientToken)) } else { // 👇 Call the decisionHandler to show the success screen decisionHandler(.succeed()) } } } }}
This callback is trigger when the payment is not authorized as it’s an asynchronous alternative payment method, such as a voucher payment method, but the payment has stayed in a pending state.
This method will be called only when using the PrimerPaymentHandling.autoflow.
This method will be called to notify you that the client session will be updated, e.g.
a surcharge needs to be applied when a payment method has been chosen.
This method will be called to notify you that the client session has been updated, e.g.
surcharge has been applied when a payment method has been chosen.