{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["sub-heading","br","details","admonition"]},"type":"markdown"},"seo":{"title":"Events","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":"events","__idx":0},"children":["Events"]},{"$$mdtype":"Tag","name":"SubHeading","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Implement callbacks to customise your Paze payment flow for Android."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Paze component emits callbacks based on shopper interaction and payment flow state. Use them to inject business logic and UX customisations at critical moments. While the SDK handles checkout, decryption, and authorisation, you retain control over approval gates, error handling, and backend integration."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Callbacks enable you to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Validate business rules before payments proceed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Display custom error, failure, or success messages."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Integrate with fraud detection or customer management systems."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Control how shoppers experience successful and failed transactions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Handle Paze Custom Tab checkout and decryption flow requirements."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sdk-data-callbacks","__idx":2},"children":["SDK data callbacks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configure these callbacks on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig"]},", not on the Paze button component. The Paze button calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," when building the Unity transaction request after decryption."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," (recommended): Called during authorisation to retrieve shopper data for the transaction payload."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"ongetshopper","__idx":3},"children":["onGetShopper"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK calls this callback when building the transaction request, after decryption and before Unity authorisation. If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," is not set, the SDK uses ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionData.shopper"]}," when present."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configuration","__idx":4},"children":["Configuration"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"val sdkConfig = PxpSdkConfig(\n    environment = Environment.TEST,\n    session = sessionData,\n    transactionData = transactionData,\n    clientName = \"Your Merchant\",\n    siteName = \"Your Store\",\n    ownerType = \"MerchantGroup\",\n    ownerId = \"MERCHANT-1\",\n    onGetShopper = {\n        Shopper(\n            id = \"shopper-123\",\n            firstName = \"John\",\n            lastName = \"Doe\",\n            email = \"customer@example.com\",\n        )\n    },\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"return-value","__idx":5},"children":["Return value"]},{"$$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":{"align":"left","data-label":"Property"},"children":["Property"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["A unique shopper identifier. Return your customer account ID or a persistent guest session ID."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["firstName"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The shopper's given name."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastName"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The shopper's family name."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The shopper's email address."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phoneNumber"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The contact phone number for the transaction shopper profile."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dateOfBirth"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The date of birth, when required by your integration or risk screening rules."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["houseNumberOrName"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The first line of the shopper's address."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["street"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The street name or remaining address line."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["city"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The city or locality."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["postalCode"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The postal or ZIP code."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["countryCode"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The country code in ISO 3166-1 alpha-2 format (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"US\""]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["state"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The state, province, or region."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All properties are optional in the type, but you should always return an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," so transactions can be linked to your customer records."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Paze wallet identity (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emailAddress"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phoneNumber"]}," on the component) is separate from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]},". Component identity is forwarded to Paze during create-session when provided. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," supplies the shopper object sent to Unity during authorisation."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"shipping-countries","__idx":6},"children":["Shipping countries"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For shipping constraints on Paze checkout, set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["acceptedShippingCountries"]}," on the component config. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/paze/configuration"},"children":["Configuration"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"paze-specific-events","__idx":7},"children":["Paze-specific events"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Configure these callbacks on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PazeButtonComponentConfig"]}," before calling ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createComponent<PazeButtonComponent>(...)"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"callback-order","__idx":8},"children":["Callback order"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For a successful payment, callbacks fire in this order:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onInit"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPresentmentResolved"]}," after presentment validation succeeds, when the component ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content()"]}," is composed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPazeButtonClicked"]}," when the shopper taps the button (after checkout validation, before the Custom Tab opens)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutComplete"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]}," after the Custom Tab returns."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]}," after the complete API succeeds and the response is decoded."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreDecryption"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostDecryption"]}," (if SDK decryption proceeds)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreAuthorisation"]}," → Unity authorisation (the SDK calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionData.shopper"]}," here) → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostAuthorisation"]}," (if registered) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]}," handles presentment, checkout, complete, and decryption errors. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]}," handles authorisation submission failures, including invalid Kount ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["riskScreeningData"]},". Shopper cancellation is surfaced through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]},", not ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreDecryption"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},", the SDK skips steps 5–6. Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]}," to receive the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["securedPayload"]}," for backend decryption instead."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["SDK initialisation callbacks are configured on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PxpSdkConfig"]},". The Paze button calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]}," during authorisation. Paze component callbacks handle checkout, decryption, and authorisation events. Several Paze callbacks are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["suspend"]}," functions and can perform asynchronous work before the SDK continues."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"oninit","__idx":9},"children":["onInit"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called after presentment validation succeeds, immediately before ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPresentmentResolved"]}," on success."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onInit = {\n    Log.d(\"Paze\", \"Component ready\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpresentmentresolved","__idx":10},"children":["onPresentmentResolved"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when presentment resolves."]},{"$$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":"Parameter"},"children":["Parameter"]},{"$$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":["customTabAvailable"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["Boolean"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When presentment succeeds, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," when a Custom Tab can launch; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," when no compatible browser is installed (the button remains visible). When presentment validation fails, the button is hidden and this callback receives ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," (see ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]},")."]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPresentmentResolved = { customTabAvailable ->\n    if (!customTabAvailable) {\n        showCustomTabWarning()\n    }\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpazebuttonclicked","__idx":11},"children":["onPazeButtonClicked"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when the shopper taps the button, after checkout validation succeeds and before the Custom Tab opens. Checkout validation failures surface through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]},", not this callback. Use it for analytics, clearing error messages, or showing a loading state."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPazeButtonClicked"]}," is a component callback. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PazeButtonClicked"]}," analytics event is separate — it fires after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPazeButtonClicked"]}," completes and immediately before the Custom Tab opens. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/paze/analytics#when-each-event-fires"},"children":["Analytics"]},"."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPazeButtonClicked = {\n    clearErrorMessages()\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK opens the Custom Tab after this callback completes. There is no return value — you cannot cancel checkout from this callback. Disable the button in your UI until prerequisites are met. To block after the shopper returns from Paze, return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutComplete"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"oncheckoutcomplete","__idx":12},"children":["onCheckoutComplete"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when checkout returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COMPLETE"]},", before the SDK calls the complete API."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to approve and continue (default when omitted). Return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," to reject; the SDK calls ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]},"."]},{"$$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":"Parameter"},"children":["Parameter"]},{"$$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":["result"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeCheckoutResult"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The checkout result data."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.result"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeCheckoutResultType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The checkout outcome from Paze. In this callback, the value is always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COMPLETE"]},", meaning the shopper finished checkout in the Custom Tab and Paze returned review data. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCOMPLETE"]}," is delivered through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]}," instead."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.checkoutDecodedResponse"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeCheckoutReviewData?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Decoded session and masked card data when complete."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.checkoutDecodedResponse?.maskedCard?.panLastFour"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The last four digits of the selected card."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.checkoutDecodedResponse?.maskedCard?.paymentCardBrand"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The card brand returned by Paze (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VISA"]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.reason"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An optional reason from Paze."]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onCheckoutComplete = { result ->\n    val decoded = result.checkoutDecodedResponse ?: return@onCheckoutComplete false\n    validateCheckoutOnBackend(\n        sessionId = decoded.sessionId,\n        cardLastFour = decoded.maskedCard.panLastFour,\n    )\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"oncheckoutincomplete","__idx":13},"children":["onCheckoutIncomplete"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when checkout ends without completion, the shopper cancels, the Custom Tab closes without a redirect, or you return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutComplete"]},". When you reject in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutComplete"]},", the reason is set from the SDK's localised merchant-validation message."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onCheckoutIncomplete = { result ->\n    if (result.reason?.contains(\"cancel\", ignoreCase = true) == true) {\n        return@onCheckoutIncomplete\n    }\n    showError(\"Checkout was not completed. Please try again.\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"oncomplete","__idx":14},"children":["onComplete"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when the complete API succeeds and the response is decoded. Runs before ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreDecryption"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.completeDecodedResponse?.securedPayload"]}," for manual decryption when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreDecryption"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onComplete = { result ->\n    Log.d(\"Paze\", \"Payload ID: ${result.completeDecodedResponse?.payloadId}\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpredecryption","__idx":15},"children":["onPreDecryption"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]},", before the SDK decrypts the secured payload."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to allow SDK decryption (default when omitted). Return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," to handle decryption on your backend — the SDK skips decrypt and authorisation; use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]}," to forward the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["securedPayload"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["SDK-managed (recommended):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPreDecryption = { true }\nconfig.onPostDecryption = { decryptedPayload ->\n    val masked = decryptedPayload.fundingData.networkToken.take(6) + \"...\"\n    Log.d(\"Paze\", \"Decrypted token prefix: $masked\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Merchant-managed:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPreDecryption = { false }\nconfig.onComplete = { result ->\n    val securedPayload = result.completeDecodedResponse?.securedPayload ?: return@onComplete\n    sendToBackendForDecryption(securedPayload)\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/checkout/components/android/paze/implementation#backend-decryption"},"children":["Backend decryption"]}," for PXP API endpoints."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpostdecryption","__idx":16},"children":["onPostDecryption"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called after Unity successfully decrypts the network token. Skipped when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPreDecryption"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"."]},{"$$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":"Parameter"},"children":["Parameter"]},{"$$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":["decryptedPayload.shopper"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeDecryptTokenShopper"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Customer name, email, and phone from the decrypt response."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["decryptedPayload.billingAddress"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeDecryptTokenBillingAddress?"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Billing address when returned by Paze."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["decryptedPayload.fundingData"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["PazeDecryptTokenFundingData"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Network token, expiry, card network, and related fields."]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPostDecryption = { decrypted ->\n    Log.d(\"Paze\", \"Card network: ${decrypted.fundingData.cardNetwork}\")\n    val maskedToken = decrypted.fundingData.networkToken.take(6) + \"...\"\n    Log.d(\"Paze\", \"Token prefix: $maskedToken\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpreauthorisation","__idx":17},"children":["onPreAuthorisation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called before the transaction is submitted to Unity."]},{"$$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":{"align":"left","data-label":"Return value"},"children":["Return value"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Behaviour"},"children":["Behaviour"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Proceed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Continue without extra data (default when omitted)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Cancel"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Abort authorisation silently. The SDK does not call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TransactionInitData(...)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Continue with risk screening or other init data."]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPreAuthorisation = {\n    if (!validateOrderDetails()) {\n        PazePreAuthorisationResult.Cancel\n    } else {\n        PazePreAuthorisationResult.TransactionInitData(\n            PazeTransactionInitData(\n                riskScreeningData = buildRiskScreeningData(),\n            ),\n        )\n    }\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onpostauthorisation","__idx":18},"children":["onPostAuthorisation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when the SDK receives a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MerchantSubmitResult"]},". Only invoked when this callback is registered on the config. Verify the transaction outcome on your backend — the Unity response may report an error state while still returning transaction identifiers. Hard submission failures route to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]},", not this callback."]},{"$$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":"Parameter"},"children":["Parameter"]},{"$$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":["result.merchantTransactionId"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your transaction identifier."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.systemTransactionId"]},{"$$mdtype":"Tag","name":"Break","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Details","attributes":{},"children":["String"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The system transaction identifier generated by PXP."]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onPostAuthorisation = { result ->\n    verifyPaymentOnBackend(systemTransactionId = result.systemTransactionId)\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onsubmiterror","__idx":19},"children":["onSubmitError"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called when authorisation submission fails, including invalid Kount ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["riskScreeningData"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ValidationException"]},"). Cast to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FailedSubmitResult"]}," for error details."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onSubmitError = { result ->\n    val failed = result as? FailedSubmitResult\n    showError(failed?.errorReason ?: \"Payment failed\")\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onerror","__idx":20},"children":["onError"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Called on presentment, checkout, complete, or decryption errors. Shopper cancellation is surfaced through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]},", not ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"config.onError = { error ->\n    when (error.errorCode) {\n        \"SDK1202\", \"SDK1202A\" -> showError(\"Paze is not configured for this session.\")\n        \"SDK1210\", \"SDK1212\" -> showError(\"Please check your contact details and try again.\")\n        \"SDK1213\" -> showError(\"Paze is only available for USD transactions.\")\n        \"SDK1233\" -> showError(\"Token decryption failed. Please try again.\")\n        \"SDK1200\", \"SDK1214\" -> showError(\"Paze checkout failed. Please try again.\")\n        else -> showError(error.message ?: \"Payment could not be completed.\")\n    }\n}\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"event-data-structures","__idx":21},"children":["Event data structures"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"shopper","__idx":22},"children":["Shopper"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returned by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onGetShopper"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class Shopper(\n    val id: String? = null,\n    val firstName: String? = null,\n    val lastName: String? = null,\n    val email: String? = null,\n    val phoneNumber: String? = null,\n    val dateOfBirth: String? = null,\n    // address fields...\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pazecheckoutresult","__idx":23},"children":["PazeCheckoutResult"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutComplete"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onCheckoutIncomplete"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class PazeCheckoutResult(\n    val result: PazeCheckoutResultType,\n    val reason: String?,\n    val checkoutDecodedResponse: PazeCheckoutReviewData?,\n)\n\ndata class PazeCheckoutReviewData(\n    val sessionId: String?,\n    val maskedCard: PazeMaskedCard,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pazemaskedcard","__idx":24},"children":["PazeMaskedCard"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Included on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkoutDecodedResponse"]}," when checkout completes:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class PazeMaskedCard(\n    val digitalCardId: String?,\n    val panLastFour: String,\n    val paymentAccountReference: String?,\n    val panExpirationMonth: String?,\n    val panExpirationYear: String?,\n    val paymentCardDescriptor: String,\n    val paymentCardType: String,\n    val paymentCardBrand: String,\n    val paymentCardNetwork: String,\n    val digitalCardData: PazeDigitalCardData,\n    val billingAddress: PazeCheckoutAddress?,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pazecompleteresult","__idx":25},"children":["PazeCompleteResult"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class PazeCompleteResult(\n    val completeDecodedResponse: PazeCompleteDecoded?,\n    val decryptedPayload: PazeDecryptTokenResponseSuccess?,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["At ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["decryptedPayload"]}," is always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},". Decrypted token data is passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostDecryption"]}," when SDK decryption proceeds."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class PazeCompleteDecoded(\n    val payloadId: String?,\n    val sessionId: String?,\n    val securedPayload: String?,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pazedecrypttokenresponsesuccess","__idx":26},"children":["PazeDecryptTokenResponseSuccess"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostDecryption"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class PazeDecryptTokenResponseSuccess(\n    val shopper: PazeDecryptTokenShopper,\n    val billingAddress: PazeDecryptTokenBillingAddress?,\n    val fundingData: PazeDecryptTokenFundingData,\n)\n\ndata class PazeDecryptTokenShopper(\n    val firstName: String?,\n    val lastName: String?,\n    val fullName: String,\n    val emailAddress: String,\n    val phoneCountryCode: String?,\n    val phoneNumber: String?,\n    val countryCode: String?,\n    val languageCode: String?,\n)\n\ndata class PazeDecryptTokenBillingAddress(\n    val addressLine1: String,\n    val city: String,\n    val state: String,\n    val countryCode: String,\n    val postalCode: String,\n)\n\ndata class PazeDecryptTokenFundingData(\n    val networkToken: String,\n    val expirationMonth: String,\n    val expirationYear: String,\n    val accountReference: String?,\n    val cardNetwork: String,\n    val tokenUsageType: String?,\n    val dynamicDataExpiration: String?,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"merchantsubmitresult","__idx":27},"children":["MerchantSubmitResult"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPostAuthorisation"]}," when the SDK receives the Unity authorisation response. Verify the outcome on your backend; hard failures route to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class MerchantSubmitResult(\n    val merchantTransactionId: String,\n    val systemTransactionId: String,\n) : SubmitResult()\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"failedsubmitresult","__idx":28},"children":["FailedSubmitResult"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Typical type received in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSubmitError"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"data class FailedSubmitResult(\n    val errorCode: String?,\n    val errorReason: String?,\n    val correlationId: String?,\n    val httpStatusCode: Int?,\n    val details: List<String>?,\n)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"basesdkexception","__idx":29},"children":["BaseSdkException"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"open class BaseSdkException(\n    message: String,\n    cause: Throwable? = null,\n    val errorCode: String,\n)\n","lang":"kotlin"},"children":[]}]},"headings":[{"value":"Events","id":"events","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"SDK data callbacks","id":"sdk-data-callbacks","depth":2},{"value":"onGetShopper","id":"ongetshopper","depth":3},{"value":"Configuration","id":"configuration","depth":4},{"value":"Return value","id":"return-value","depth":4},{"value":"Shipping countries","id":"shipping-countries","depth":3},{"value":"Paze-specific events","id":"paze-specific-events","depth":2},{"value":"Callback order","id":"callback-order","depth":3},{"value":"onInit","id":"oninit","depth":3},{"value":"onPresentmentResolved","id":"onpresentmentresolved","depth":3},{"value":"onPazeButtonClicked","id":"onpazebuttonclicked","depth":3},{"value":"onCheckoutComplete","id":"oncheckoutcomplete","depth":3},{"value":"onCheckoutIncomplete","id":"oncheckoutincomplete","depth":3},{"value":"onComplete","id":"oncomplete","depth":3},{"value":"onPreDecryption","id":"onpredecryption","depth":3},{"value":"onPostDecryption","id":"onpostdecryption","depth":3},{"value":"onPreAuthorisation","id":"onpreauthorisation","depth":3},{"value":"onPostAuthorisation","id":"onpostauthorisation","depth":3},{"value":"onSubmitError","id":"onsubmiterror","depth":3},{"value":"onError","id":"onerror","depth":3},{"value":"Event data structures","id":"event-data-structures","depth":2},{"value":"Shopper","id":"shopper","depth":3},{"value":"PazeCheckoutResult","id":"pazecheckoutresult","depth":3},{"value":"PazeMaskedCard","id":"pazemaskedcard","depth":3},{"value":"PazeCompleteResult","id":"pazecompleteresult","depth":3},{"value":"PazeDecryptTokenResponseSuccess","id":"pazedecrypttokenresponsesuccess","depth":3},{"value":"MerchantSubmitResult","id":"merchantsubmitresult","depth":3},{"value":"FailedSubmitResult","id":"failedsubmitresult","depth":3},{"value":"BaseSdkException","id":"basesdkexception","depth":3}],"frontmatter":{"seo":{"title":"Events"}},"lastModified":"2026-07-01T14:12:29.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/checkout/components/android/paze/events","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}