Overview

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.

primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData

This method will be called with the when the payment has been completed, returning the payment’s data.

⚠️ This method won’t be called when you are using manual payment handling, or the vault manager.

SWIFT
func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData)

Parameters

Example

SWIFT
// 👇 Add this
import PrimerSDK

// 👇 Conform to PrimerDelegate
class MyViewController: UIViewController, PrimerDelegate {

	// ...

    // 👇 Add this
	func primerDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
        // Do something with the payment's data
    }
}

primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods

This method will return the payment methods that should be displayed based on the current client session data.

SWIFT
func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod])

Parameters

primerHeadlessUniversalCheckoutDidTokenizePaymentMethod

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.

SWIFT
func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(
    _ paymentMethodTokenData: PrimerPaymentMethodTokenData,
    decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
)

Parameters

Example

SWIFT
// 👇 Add this
import PrimerSDK

// 👇 Conform to PrimerHeadlessUniversalCheckoutDelegate
class 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())
                }
            }
        }
    }
}

primerHeadlessUniversalCheckoutDidResumeWith

This method will be called providing a resumeToken so you can resume the payment.

This method will be called when you are using PrimerPaymentHandling.MANUAL flow and when the payment is in a PENDING state.

SWIFT
func primerHeadlessUniversalCheckoutDidResumeWith(
    _ resumeToken: String,
    decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
)

Parameters

Example

SWIFT
// 👇 Add this
import PrimerSDK

// 👇 Conform to PrimerHeadlessUniversalCheckoutDelegate
class 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())
                }
            }
        }
    }
}

primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo

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.auto flow.

SWIFT
func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)

Parameters

primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo

This callback is trigger when the payment is not authorized as it’s an asynchronous alternative payment method, such as a voucher payment method.

This method will be called only when using the PrimerPaymentHandling.auto flow.

SWIFT
func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)

Parameters

primerHeadlessUniversalCheckoutDidFail

This method will be called when an error occurs. It may return PrimerCheckoutData if the error occurs after the payment creation.

SWIFT
func primerHeadlessUniversalCheckoutDidFail(withError err: Error, checkoutData: PrimerCheckoutData?)

Parameters

primerHeadlessUniversalCheckoutWillUpdateClientSession

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.

SWIFT
func primerHeadlessUniversalCheckoutWillUpdateClientSession()

primerHeadlessUniversalCheckoutDidUpdateClientSession

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.

SWIFT
func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession)

Parameters

primerHeadlessUniversalCheckoutWillCreatePaymentWithData

This method will be called with just before the payment gets created, and lets you decide whether you want to proceed with the payment creation.

⚠️ This method will be called only when checking out using the auto flow.

SWIFT
func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(
    _ data: PrimerCheckoutPaymentMethodData,
    decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void
)

Parameters

Example

SWIFT
// 👇 Add this
import PrimerSDK

// 👇 Conform to PrimerHeadlessUniversalCheckoutDelegate
class MyViewController: UIViewController, PrimerHeadlessUniversalCheckoutDelegate {

	// ...

    // 👇 Add this
	func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(
        _ data: PrimerCheckoutPaymentMethodData,
        decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void
    ) {

    }
}