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)
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 }}
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])
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)
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()) } } } }}
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)
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()) } } } }}
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?)
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?)
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)
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()
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)
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)
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 = {}