Overview
Set the PrimerDelegate
in order to receive different callbacks from Primer SDK.
primerDidCompleteCheckoutWithData
1
primerDidCompleteCheckoutWithData(_:additionalInfo:)
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 }}
primerDidTokenizePaymentMethod
1
func primerDidTokenizePaymentMethod(_:decisionHandler:)
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()) } } } }}
primerDidResumeWith
1
func primerDidResumeWith(_:decisionHandler:)
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()) } } } }}
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()
primerClientSessionDidUpdate
1
func primerClientSessionDidUpdate(_ clientSession: PrimerClientSession)
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)
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) }}
primerDidEnterResumePendingWithPaymentAdditionalInfo
1
func primerDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)
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))
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)) { }}
primerDidDismiss
This method will be called to notify you that the Primer SDK has been dismissed.
1
func primerDidDismiss()