{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["sub-heading","admonition"]},"type":"markdown"},"seo":{"title":"How it works","description":"Transform your commerce with PXP's unified platform—seamless payments, real-time insights, and global growth in one powerful integration.","lang":"en-UK","siteUrl":"https://developer.pxp.io","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"how-it-works","__idx":0},"children":["How it works"]},{"$$mdtype":"Tag","name":"SubHeading","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Learn about PXP's Aeropay component for Android."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Aeropay is a US pay-by-bank payment method. PXP's Aeropay button component for Android renders a payment button and guides shoppers through identity verification, bank account selection, and transaction submission in a modal bottom sheet."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With the Aeropay component, you can benefit from:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pay-by-bank checkout:"]}," Allow shoppers to pay directly from a linked bank account."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Built-in verification:"]}," Collect shopper details and verify new Aeropay users with a one-time passcode (OTP) sent to the shopper's phone."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Bank linking:"]}," Let shoppers link a bank account through the embedded Aerosync experience."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Faster returning-shopper flows:"]}," Use a verified Aeropay user ID to skip data collection and OTP verification."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Flexible transaction processing:"]}," Support authorisations, purchases, estimated authorisations, and payouts."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customisable presentation:"]}," Configure the button, popup, form fields, OTP screen, and bank selection screen."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Aeropay supports ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USD"]}," transactions with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ecom"]}," entry type. Your session must include Aeropay pay-by-bank funding configuration: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["allowedFundingTypes.payByBanks.aeropay.externalMerchantId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["allowedFundingTypes.payByBanks.aeropay.configurationId"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"shopper-journeys","__idx":2},"children":["Shopper journeys"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The component adapts the checkout flow based on whether the shopper has a verified Aeropay user ID."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Provide shopper details through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig.onGetShopper"]}," when initialising ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpCheckout"]},". Component-only settings such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["skipConsumerDataCollection"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["consumerDataCollectionConfig"]}," are configured on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayButtonComponentConfig"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Journey"},"children":["Journey"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"SDK config"},"children":["SDK config"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Component config"},"children":["Component config"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Experience"},"children":["Experience"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["New shopper"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," for prefill"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Don't set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]},"."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The shopper provides their details, verifies their identity with an OTP, and selects or links a bank account."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["New shopper with known details"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," returns all required fields"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["skipConsumerDataCollection = true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The component prefills valid shopper details. When data collection is skipped, the flow starts with OTP verification."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Returning shopper"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not required for opening the popup"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," to a verified, active Aeropay user ID."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The shopper goes directly to bank selection without completing data collection or OTP verification."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"payment-flow","__idx":3},"children":["Payment flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Aeropay payment flow has five steps."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-component-initialisation","__idx":4},"children":["Step 1: Component initialisation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you create the component, the SDK:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Validates the session and transaction configuration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirms that the currency is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USD"]}," and the entry type is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ecom"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirms that the session contains the Aeropay funding configuration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Makes the Aeropay button available to render with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content()"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If session funding, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionData.intent.aeropay"]},", currency, or entry type are invalid, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createComponent(ComponentType.AERO_PAY_BUTTON, …)"]}," throws a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BaseSdkException"]}," (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0113"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0114"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0115"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0116"]},") and the button isn't created. Handle these at creation time. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayButtonComponentConfig.onError"]}," is for runtime failures after the component exists (e.g., invalid prefilled shopper data with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK1300"]},")."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-shopper-identification","__idx":5},"children":["Step 2: Shopper identification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When the shopper taps the button, the SDK runs optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCustomValidation"]},", then checks the component configuration:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," contains a verified, active Aeropay user ID, the SDK opens the bank selection screen."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," isn't set, the SDK gets available shopper details from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig.onGetShopper"]}," (when configured) and starts the new-shopper flow."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For a new shopper, the component collects their first name, last name, email address, and phone number. You can prefill these fields through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig.onGetShopper"]}," when their values are valid. If a supplied name, email address, or phone number is non-empty but invalid, the SDK invokes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayButtonComponentConfig.onError"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BaseSdkException"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errorCode"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK1300"]},") and doesn't open the popup."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-user-verification","__idx":6},"children":["Step 3: User verification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The component creates the Aeropay user and sends an OTP to the shopper's phone. After the shopper enters the correct code, the SDK calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserVerificationSuccess"]}," with the verified user details."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Store the returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user.id"]}," securely if you want to use the returning-shopper flow on future visits."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4-bank-selection","__idx":7},"children":["Step 4: Bank selection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The component loads the shopper's linked bank accounts. The shopper can select an existing account or link a new one through Aerosync."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For payouts, the bank-linking option is hidden by default. Assign a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BankSelectionConfig"]}," and set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["allowLinkBankOnPayout"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to let shoppers link a bank account during a payout flow:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.bankSelectionConfig = BankSelectionConfig(allowLinkBankOnPayout = true)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-5-transaction-submission","__idx":8},"children":["Step 5: Transaction submission"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After the shopper selects a bank account and confirms the transaction, the SDK:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreAuthorisation"]}," (required for submission). Return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to submit; otherwise the flow stops."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Builds and submits the pay-by-bank transaction to PXP."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostAuthorisation"]}," (optional) after a successful ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MerchantSubmitResult"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]}," (optional) when submission returns a failed result or network error."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configure ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreAuthorisation"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayButtonComponentConfig"]}," and return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to allow the SDK to submit the transaction. If the callback isn't set, or it returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},", the SDK doesn't call the PXP API and the popup stays open. For callback details, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/events"},"children":["Events"]}," and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/implementation"},"children":["Implementation"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"// Required for payment submission — return true to proceed.\n// If omitted or returns false, the SDK does not submit and the popup stays open.\nconfig.onPreAuthorisation = { true }\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always verify the transaction on your backend before fulfilling an order or confirming a payout."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"consumer-data-collection","__idx":9},"children":["Consumer data collection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," isn't set, the SDK uses the result from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig.onGetShopper"]}," to determine how the data collection screen behaves:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Shopper data"},"children":["Shopper data"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Component behaviour"},"children":["Component behaviour"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," isn't provided"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Shows all fields as empty and editable."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Some required fields are provided"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prefills and disables the valid provided fields unless you include them in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["consumerDataCollectionConfig.editableFields"]},". Missing fields remain empty and editable."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All required fields are provided"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prefills and disables all fields when they're valid, unless you include them in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["consumerDataCollectionConfig.editableFields"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All required fields are provided and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["skipConsumerDataCollection"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Creates the Aeropay user in the background and opens the OTP verification screen when all fields are valid. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["editableFields"]}," must be omitted, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},", or empty."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The required shopper details are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["firstName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phoneNumber"]},". Providing all four fields doesn't skip the data collection screen by itself. You must also set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["skipConsumerDataCollection"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," and omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["editableFields"]}," or set it to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," or an empty list."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phoneNumber"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," must be a valid US E.164 value (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+15550123456"]},") when prefilled. Invalid non-empty values trigger ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK1300"]}," before the popup opens. When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["skipConsumerDataCollection"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", the phone number must also normalise to a non-empty E.164 value or the skip path isn't taken."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["editableFields"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," or empty, prefilled fields are read-only. Add a field to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["editableFields"]}," only when the shopper needs to change it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"returning-shoppers","__idx":10},"children":["Returning shoppers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For a returning shopper, pass the verified Aeropay user ID to the component as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]},". The SDK validates that the user is active before opening bank selection."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the user isn't active, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayButtonComponentConfig.onError"]}," receives ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK1307"]},". If the get-user API returns a recognised failure (including user not found), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]}," receives ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK1308"]},". Network or transport errors on the same call use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0500"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SDK0000"]},". The popup doesn't open in these cases. Your application should then offer an appropriate recovery path, such as starting a new-shopper flow."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"transaction-intents","__idx":11},"children":["Transaction intents"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configure the Aeropay intent in both the session request and the SDK's transaction data:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Intent"},"children":["Intent"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorisation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Authorise funds for later capture."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Purchase"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Complete the payment immediately."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EstimatedAuthorisation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Submit an authorisation for an estimated amount."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Payout"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Send funds to the shopper's selected bank account."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the session request, set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionMethod.intent.aeropay"]},". When initialising the SDK, set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionData.intent.aeropay"]}," to the corresponding ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AeropayIntentType"]}," value. Button and action labels adapt for payout flows, for example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Withdraw by Bank"]}," instead of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Pay by bank"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"whats-next","__idx":12},"children":["What's next?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Continue with the Aeropay integration guides:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/onboarding"},"children":["Onboarding"]},":"]}," Configure Aeropay in the Unity Portal."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/implementation"},"children":["Implementation"]},":"]}," Integrate and render the Aeropay button."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/configuration"},"children":["Configuration"]},":"]}," Customise the component's appearance and behaviour."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/aeropay/events"},"children":["Events"]},":"]}," Handle component callbacks and transaction results."]}]}]},"headings":[{"value":"How it works","id":"how-it-works","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"Shopper journeys","id":"shopper-journeys","depth":2},{"value":"Payment flow","id":"payment-flow","depth":2},{"value":"Step 1: Component initialisation","id":"step-1-component-initialisation","depth":3},{"value":"Step 2: Shopper identification","id":"step-2-shopper-identification","depth":3},{"value":"Step 3: User verification","id":"step-3-user-verification","depth":3},{"value":"Step 4: Bank selection","id":"step-4-bank-selection","depth":3},{"value":"Step 5: Transaction submission","id":"step-5-transaction-submission","depth":3},{"value":"Consumer data collection","id":"consumer-data-collection","depth":2},{"value":"Returning shoppers","id":"returning-shoppers","depth":2},{"value":"Transaction intents","id":"transaction-intents","depth":2},{"value":"What's next?","id":"whats-next","depth":2}],"frontmatter":{"seo":{"title":"How it works"}},"lastModified":"2026-08-13T10:57:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/checkout/components/android/aeropay/how-it-works","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}