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.

1
func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData)
swift
copy

Parameters

Properties

additionalInfoPrimerCheckoutAdditionalInfo

direct subclasses

XenditCheckoutVoucherAdditionalInfo

parameters

expiresAtStringRequired

couponCodeStringRequired

retailerNameStringRequired

PromptPayCheckoutAdditionalInfo

parameters

expiresAtStringRequired

qrCodeUrlString

qrCodeBase64StringRequired

MultibancoCheckoutAdditionalInfo

parameters

expiresAtString

entityString

referenceString

Example

12345678910111213
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate {     // ...     // 👇 Add this    func primerDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {        // Do something with the payment's data    }}
swift
copy

primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods

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

1
func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod])
swift
copy

Parameters

Properties

paymentMethodTypeStringRequired

supportedPrimerSessionIntents[PrimerSessionIntent]Required

enum cases

.checkout

Use checkout when you want go through the checkout flow

.vault

Use vault when you want to vault a payment mehtod, so you can use the token to pay another time.

paymentMethodManagerCategoriesenum StringRequired

enum cases

.cardComponents

.nativeUI

.rawData

requiredInputDataClassPrimerRawData.TypeOptional

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.

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

Parameters

Properties

paymentMethodTokenDataPrimerPaymentMethodTokenData

parameters

analyticsIdString

idString

paymentInstrumentDataPaymentInstrumentData

parameters

paymentMethodConfigIdString

paymentMethodTypeString

sessionInfoSessionInfo

first6DigitsString

last4DigitsString

expirationMonthString

expirationYearString

cardholderNameString

networkString

isNetworkTokenizedString

binDataBinData

threeDSecureAuthenticationThreeDS.AuthenticationDetails

paypalBillingAgreementIdString

externalPayerInfoExternalPayerInfo

shippingAddressShippingAddress

klarnaCustomerTokenString

sessionDataSessionData

hashedIdentifierString

mncInt

mccInt

mxInt

currencyCodeCurrency

productIdString

paymentInstrumentTypePaymentInstrumentType

cases

paymentCard

offSession

cardOffSession

payPalOrder

payPalBillingAgreement

applePay

googlePay

klarna

klarnaPaymentSession

klarnaCustomerToken

apayaToken

hoolah

unknown

threeDSecureAuthenticationThreeDS.AuthenticationDetails

tokenStringRequired

tokenTypeTokenType

cases

multiUse

singleUse

vaultDataVaultData

decisionHandlerenum PrimerResumeDecisionRequired

cases

succeed()

Call .succeed when you want to show the success screen, or finalize the flow successfully in case you have hidden the success screen.

.continueWithNewClientToken(_:)

Call .continueWithNewClientToken when the payment has entered in a PENDING state and a required action client token has been provided.

Example

12345678910111213141516171819202122232425262728293031
// 👇 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())                }            }        }    }}
swift
copy

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.

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

Parameters

Properties

resumeTokenStringRequired

decisionHandlerenum PrimerResumeDecisionRequired

cases

succeed()

Call .succeed when you want to show the success screen, or finalize the flow successfully in case you have hidden the success screen.

.continueWithNewClientToken(_:)

Call .continueWithNewClientToken when the payment has entered in a PENDING state and a required action client token has been provided.

Example

12345678910111213141516171819202122232425262728293031
// 👇 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())                }            }        }    }}
swift
copy

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.

1
func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)
swift
copy

Parameters

Properties

additionalInfoPrimerCheckoutAdditionalInfo

direct subclasses

XenditCheckoutVoucherAdditionalInfo

parameters

expiresAtStringRequired

couponCodeStringRequired

retailerNameStringRequired

PromptPayCheckoutAdditionalInfo

parameters

expiresAtStringRequired

qrCodeUrlString

qrCodeBase64StringRequired

MultibancoCheckoutAdditionalInfo

parameters

expiresAtString

entityString

referenceString

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.

1
func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)
swift
copy

Parameters

Properties

additionalInfoPrimerCheckoutAdditionalInfo

direct subclasses

XenditCheckoutVoucherAdditionalInfo

parameters

expiresAtStringRequired

couponCodeStringRequired

retailerNameStringRequired

PromptPayCheckoutAdditionalInfo

parameters

expiresAtStringRequired

qrCodeUrlString

qrCodeBase64StringRequired

MultibancoCheckoutAdditionalInfo

parameters

expiresAtString

entityString

referenceString

primerHeadlessUniversalCheckoutDidFail

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

1
func primerHeadlessUniversalCheckoutDidFail(withError err: Error)
swift
copy

Parameters

Properties

errErrorRequired

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.

1
func primerHeadlessUniversalCheckoutWillUpdateClientSession()
swift
copy

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.

1
func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession)
swift
copy

Parameters

clientSessionPrimerClientSessionRequired

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.

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

Parameters

Properties

paymentMethodTokenDataPrimerPaymentMethodTokenData

parameters

analyticsIdString

idString

paymentInstrumentDataPaymentInstrumentData

parameters

paymentMethodConfigIdString

paymentMethodTypeString

sessionInfoSessionInfo

first6DigitsString

last4DigitsString

expirationMonthString

expirationYearString

cardholderNameString

networkString

isNetworkTokenizedString

binDataBinData

threeDSecureAuthenticationThreeDS.AuthenticationDetails

paypalBillingAgreementIdString

externalPayerInfoExternalPayerInfo

shippingAddressShippingAddress

klarnaCustomerTokenString

sessionDataSessionData

hashedIdentifierString

mncInt

mccInt

mxInt

currencyCodeCurrency

productIdString

paymentInstrumentTypePaymentInstrumentType

cases

paymentCard

offSession

cardOffSession

payPalOrder

payPalBillingAgreement

applePay

googlePay

klarna

klarnaPaymentSession

klarnaCustomerToken

apayaToken

hoolah

unknown

threeDSecureAuthenticationThreeDS.AuthenticationDetails

tokenStringRequired

tokenTypeTokenType

cases

multiUse

singleUse

vaultDataVaultData

decisionHandlerenum PrimerPaymentCreationDecisionRequired

cases

.continuePaymentCreation()

Call .continuePaymentCreation when you want to continue with the payment creation.

.abortPaymentCreation(withErrorMessage:)

Call .abortPaymentCreation when you want to abort the payment. Optionally you can provide an error message to get presented on the error screen.

Example

12345678910111213141516171819
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerHeadlessUniversalCheckoutDelegateclass MyViewController: UIViewController, PrimerHeadlessUniversalCheckoutDelegate {     // ...     // 👇 Add this    func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(        _ data: PrimerCheckoutPaymentMethodData,         decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void    ) {            }}  export const _frontmatter = {}
swift
copy