Overview

Set the PrimerDelegate in order to receive different callbacks from Primer SDK.

primerDidCompleteCheckoutWithData

1
primerDidCompleteCheckoutWithData(_:additionalInfo:)
swift
copy

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.

Parameters

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

primerDidTokenizePaymentMethod

1
func primerDidTokenizePaymentMethod(_:decisionHandler:)
swift
copy

This method will be called with the when the payment method has been 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 only on the manual flow, or when vaulting.

Parameters

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.

.fail(withErrorMessage:)

Call .fail when you want to show the error screen, or finalize the flow with error in case you have hidden the error screen.

.continueWithNewClientToken(_:)

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

Example

12345678910111213141516171819202122232425262728
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate {     // ...     // 👇 Add this    func primerDidTokenizePaymentMethod(_ 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

primerDidResumeWith

1
func primerDidResumeWith(_:decisionHandler:)
swift
copy

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

⚠️ This method will be called only on the manual flow when the payment is in a .PENDING state..

Parameters

parameters

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.

.fail(withErrorMessage:)

Call .fail when you want to show the error screen, or finalize the flow with error in case you have hidden the error screen.

.continueWithNewClientToken(_:)

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

Example

12345678910111213141516171819202122232425262728
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate {     // ...     // 👇 Add this    func primerDidResumeWith(_ 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

primerClientSessionWillUpdate

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 primerClientSessionWillUpdate()
swift
copy

primerClientSessionDidUpdate

1
func primerClientSessionDidUpdate(_ clientSession: PrimerClientSession)
swift
copy

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.

Parameters

clientSessionPrimerClientSessionRequired

primerWillCreatePaymentWithData

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.

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

Parameters

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

12345678910111213
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate {     // ...     // 👇 Add this    func primerWillCreatePaymentWithData(_ data: PrimerCheckoutPaymentMethodData, decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void)            }}
swift
copy

primerDidEnterResumePendingWithPaymentAdditionalInfo

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

This method will be called when the payment cannot get settled at this time, and will get settled in the future (e.g. a voucher)

additionalInfoPrimerCheckoutAdditionalInfo

direct subclasses

XenditCheckoutVoucherAdditionalInfo

parameters

expiresAtStringRequired

couponCodeStringRequired

retailerNameStringRequired

PromptPayCheckoutAdditionalInfo

parameters

expiresAtStringRequired

qrCodeUrlString

qrCodeBase64StringRequired

MultibancoCheckoutAdditionalInfo

parameters

expiresAtString

entityString

referenceString

primerDidFailWithError

1
func primerDidFailWithError(_ error: Error, data: PrimerCheckoutData?, decisionHandler: @escaping ((PrimerErrorDecision) -> Void))
swift
copy

This method will be called when an error occurs. It may return PrimerCheckoutData if the occurs after the payment creation. Make sure you call the decisionHandler to finalize the flow.

Parameters

errorErrorRequired

dataPrimerCheckoutDataOptional

parameters

additionalInfoPrimerCheckoutAdditionalInfo

direct subclasses

XenditCheckoutVoucherAdditionalInfo

parameters

expiresAtStringRequired

couponCodeStringRequired

retailerNameStringRequired

PromptPayCheckoutAdditionalInfo

parameters

expiresAtStringRequired

qrCodeUrlString

qrCodeBase64StringRequired

MultibancoCheckoutAdditionalInfo

parameters

expiresAtString

entityString

referenceString

decisionHandlerPrimerErrorDecisionRequired

enum cases

fail(withErrorMessage:)

Call with your custom error message.

Example

12345678910111213
// 👇 Add thisimport PrimerSDK // 👇 Conform to PrimerDelegateclass MyViewController: UIViewController, PrimerDelegate {     // ...     // 👇 Add this    func primerDidFailWithError(_ error: Error, data: PrimerCheckoutData?, decisionHandler: @escaping ((PrimerErrorDecision) -> Void)) {        }}
swift
copy

primerDidDismiss

This method will be called to notify you that the Primer SDK has been dismissed.

1
func primerDidDismiss()
swift
copy