{"templateId":"markdown","versions":[{"version":"v0-beta","label":"Beta (v0)","link":"/products/native-api/docs/guides/google-pay","default":true,"active":true,"folderId":"e4cb5a06"}],"sharedDataIds":{"sidebar":"sidebar-products/native-api/@v0-beta/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","code-group"]},"type":"markdown"},"seo":{"title":"Google Pay","description":"Official Banxa API documentation – on-ramp and off-ramp transfers with identity verification and compliance.","llmstxt":{"title":"Banxa Developer Documentation","description":"Integrate crypto-fiat exchange with Banxa's licensed infrastructure: payments, KYC, compliance, and settlement handled. 150+ countries, 45 global licences.","details":{"content":"Two integration products: **Banxa Native API** for partners who manage their own KYC and want full UX control (headless, HMAC server-to-server, no Banxa-hosted screens); **Banxa Hosted Checkout** for partners who want Banxa to handle KYC and payments (three paths: Referral URL, API, or React Native SDK). Both use the same sandbox and production environments at `https://api.banxa-sandbox.com` and `https://api.banxa.com`.\n\n## Constraints\n\n- **Authentication**: HMAC credentials must be stored server-side only, never expose in frontend, mobile, or client-side code. HMAC is required for all Native API calls and for KYC sharing in Hosted Checkout; `x-api-key` is used for all other Hosted Checkout endpoints.\n- **`externalCustomerId`**: Required on every buy and sell order. Use a stable opaque identifier, never PII.\n- **`identityReference`**: Must remain constant for the same user across all requests. Must not contain PII. If you attempt to create an identity for an email that already exists, you will receive a 422 / code 81, so retrieve the existing record rather than retrying creation. Use `GET /eapi/v0/identities/{identityReference}?email=user@example.com` to look up the real `identityReference` linked to an email.\n- **`quoteId`**: Only supported by `POST /eapi/v0/ramps` (bank transfer). The React Native SDK and Embedded Payment Button do not accept a `quoteId`, so use indicative pricing (`GET /eapi/v0/price`) for SDK and Embedded Payment Button flows.\n- **Quotes**: Indicative prices are not rate-locked, so refresh close to order creation to minimise rate drift. Locked quotes (`GET /eapi/v0/quote`) expire after approximately 3 minutes and are only valid for bank transfer ramp creation.\n- **Eligibility gate**: Never create a ramp or invoke the SDK when `paymentReady` is `false`. Always check eligibility and satisfy all requirements before payment execution.\n- **Webhooks**: Verify all inbound webhook signatures with HMAC-SHA256 before processing. Return HTTP 200 immediately and process asynchronously.\n- **Product selection**: Banxa Native is for partners who manage their own KYC. Banxa Hosted Checkout is for partners who do not do KYC. These are separate products with separate flows: do not mix endpoints across products.\n- **SDK scope**: The React Native SDK has no `banxa.customerIdentity` module. Identity and KYC are handled through the Native API only. `primerCallbacks` and `primerSettings` are Native context only and must not be referenced in Hosted Checkout integrations.\n- **Payment method naming**: Never use \"eAPI\" or \"EAPI\" as a product name. The correct name is \"Banxa Native API\". The URL path prefix `/eapi/` is correct and should not be changed.\n"},"hide":false,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"google-pay","__idx":0},"children":["Google Pay"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay lets users pay with a card already saved to their device — no card entry, no redirect. The payment sheet is native and dismisses back into your app once the transaction is confirmed."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Identity creation, KYC, eligibility, and OTP must be completed before reaching the payment step. See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/guides/foundations"},"children":["Integration Guide"]}," if you haven't done this yet. This guide picks up from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentReady: true"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"choose-your-approach","__idx":1},"children":["Choose your approach"]},{"$$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":"Approach"},"children":["Approach"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Best for"},"children":["Best for"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#react-native-sdk"},"children":["React Native SDK"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["React Native mobile apps (Android only)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#embedded-payment-button"},"children":["Embedded Payment Button"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Web apps (Vanilla JS, React, Vue)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JS SDK"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Web apps — coming soon"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"react-native-sdk","__idx":2},"children":["React Native SDK"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay via the React Native SDK is Android only."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"android-app-approval","__idx":3},"children":["Android app approval"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When your Android app presents Google Pay directly, Google requires app-level approval before you can process live payments. This is separate from any approval Banxa holds."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Banxa's website approval does not cover your app"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Banxa has Google Pay approval for its own website. That approval applies only when a user is redirected to an external browser or Custom Chrome Tab — not when Google Pay is presented inside your app. If you are integrating via the React Native SDK, your app requires its own approval."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To apply:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Integrate Google Pay in your app following ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://developers.google.com/pay/api/android/guides/tutorial"},"children":["Google's integration requirements"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Complete the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://developers.google.com/pay/api/android/guides/test-and-deploy/request-prod-access"},"children":["Google Pay API production access request"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Google will review your integration and confirm approval"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can develop and test against Google Pay's test environment while your approval is in progress. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#testing"},"children":["Testing"]}," below."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"execute-payment","__idx":4},"children":["Execute payment"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once your app has Google Pay approval (or is in test mode), trigger the payment sheet after your backend confirms ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentReady: true"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","header":{"controls":{"copy":{}}},"source":"import {\n  isPrimerCheckoutWebViewResult,\n} from '@banxa-official/react-native-sdk';\n\nconst result = await banxa.buy.createOrderAndShowPrimerCheckout(orderRequest, {\n  paymentMethod: 'googlePay',\n  callbacks: {\n    onCheckoutComplete: () => {\n      // Google Pay confirmed — transaction is in progress\n    },\n    onError: (error) => {\n      // Google Pay unavailable or failed — see error handling below\n    },\n    onDismiss: () => {\n      // User dismissed the payment sheet without completing\n    },\n  },\n});\n\nif (isPrimerCheckoutWebViewResult(result)) {\n  // Google Pay unavailable for this session — SDK fell back to hosted WebView\n  render(<CheckoutWebView {...result.webViewProps} />);\n}\n","lang":"typescript"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["orderRequest"]}," must include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalCustomerId"]}," — pass the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["identityReference"]}," you used for eligibility."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"error-handling","__idx":5},"children":["Error handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]}," is called when Google Pay is unavailable for the current session. Common causes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User has not set up Google Pay on their device"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No cards added to Google Pay"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["None of the user's cards match supported networks"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Device doesn't support Google Pay"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"testing","__idx":6},"children":["Testing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay provides a test environment that returns simulated payment results without processing real transactions. Use this during development before your production approval is confirmed."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","header":{"controls":{"copy":{}}},"source":"const banxa = new Banxa({\n  environment: 'sandbox',\n  // ...\n});\n","lang":"typescript"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay can be tested on a physical Android device or on an Android emulator with Google Play Services installed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"troubleshooting","__idx":7},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The error codes below are Primer errors surfaced through the SDK."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Google Pay button does not appear"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay is not available for the current user or session. Common reasons:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User has not set up Google Pay on their device"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No cards added to Google Pay"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["None of the user's cards match supported networks"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Device does not have Google Play Services"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK filters Google Pay from available payment methods in these cases. Only show a Google Pay option when the SDK confirms it is available."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Google Pay sheet appears in test but fails in production"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your app has not yet received Google Pay production approval. Ensure your production access request has been approved by Google before releasing to users."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[unable-to-present-payment-method]"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay is not available for this session. See causes above."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[payment-cancelled]"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The user dismissed the Google Pay sheet without completing payment. No action required — handle via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onDismiss"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]}," in your callbacks."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"going-live","__idx":8},"children":["Going live"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before releasing to production:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm your Google Pay production approval is active"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Switch to production credentials in the SDK"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm with your Banxa integration contact that your account is provisioned for production"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"embedded-payment-button","__idx":9},"children":["Embedded Payment Button"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Embedded Payment Button renders Google Pay inside a web component — no SDK install required. It is a web integration for Vanilla JS, React, and Vue apps. No additional Google Pay setup is required — Banxa's approval covers the web integration."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Before you start:"]}," Contact your Banxa integration contact to get provisioned. The button-only setting must be enabled on your environment before this works."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Google Pay is Android devices only"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Google Pay only works on Android devices. Do not show the Google Pay button on Apple devices — if a user on an Apple device triggers the payment sheet, the payment will fail. Detect the device and render only the appropriate payment method."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Environment-level setting"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The button-only configuration applies to your entire environment. If it is enabled, the standard full checkout widget will no longer render for that environment. If you need both — for example, the button on one surface and full checkout on another — you will need a separate environment provisioned by Banxa."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"install-the-web-component","__idx":10},"children":["Install the web component"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"npm install @banxa-official/embedded-checkout-web-component\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Import the package once to register the custom element:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"import '@banxa-official/embedded-checkout-web-component';\n","lang":"js"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"create-an-order","__idx":11},"children":["Create an order"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once your backend confirms ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentReady: true"]}," from eligibility, create an order. This returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkoutUrl"]}," which you pass to the web component."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /{partner}/v2/buy\nContent-Type: application/json\nx-api-key: YOUR_API_KEY\n\n{\n  \"externalCustomerId\": \"user-123\",\n  \"fiat\": \"AUD\",\n  \"crypto\": \"BTC\",\n  \"walletAddress\": \"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq\",\n  \"fiatAmount\": \"500.00\",\n  \"redirectUrl\": \"https://app.yourcompany.com/complete\"\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"embed-the-component","__idx":12},"children":["Embed the component"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pass the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkoutUrl"]}," as the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source"]}," attribute:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"html","header":{"controls":{"copy":{}}},"source":"<banxa-checkout source=\"https://checkout.banxa.com/...\"></banxa-checkout>\n","lang":"html"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The component stays hidden until the checkout page signals it is ready — at that point it resizes to fit the payment button and becomes visible."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Lifecycle callbacks"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Assign functions to these properties on the element instance:"]},{"$$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":"Property"},"children":["Property"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When called"},"children":["When called"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onLoading"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Checkout is loading"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onReady"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Component is ready and visible"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPaymentPending"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payment initiated, awaiting confirmation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onComplete"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payment completed successfully"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onError"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An error occurred"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each callback receives a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["detail"]}," object, not a DOM event."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"framework-examples","__idx":13},"children":["Framework examples"]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"html","data-title":"Vanilla JS","header":{"title":"Vanilla JS","controls":{"copy":{}}},"source":"<script type=\"module\">\n  import '@banxa-official/embedded-checkout-web-component';\n</script>\n\n<banxa-checkout id=\"checkout\" source=\"https://checkout.banxa.com/...\"></banxa-checkout>\n\n<script>\n  const el = document.getElementById('checkout');\n  el.onLoading = (detail) => console.log('loading', detail);\n  el.onReady = (detail) => console.log('ready', detail);\n  el.onPaymentPending = (detail) => console.log('payment pending', detail);\n  el.onComplete = (detail) => console.log('complete', detail);\n  el.onError = (detail) => console.log('error', detail);\n</script>\n","lang":"html"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"jsx","data-title":"React","header":{"title":"React","controls":{"copy":{}}},"source":"import { useEffect, useRef } from 'react';\nimport '@banxa-official/embedded-checkout-web-component';\n\nexport function Checkout() {\n  const checkoutRef = useRef(null);\n\n  useEffect(() => {\n    const el = checkoutRef.current;\n    if (!el) return;\n\n    el.onLoading = (detail) => console.log('loading', detail);\n    el.onReady = (detail) => console.log('ready', detail);\n    el.onPaymentPending = (detail) => console.log('payment pending', detail);\n    el.onComplete = (detail) => console.log('complete', detail);\n    el.onError = (detail) => console.log('error', detail);\n  }, []);\n\n  return <banxa-checkout ref={checkoutRef} source=\"https://checkout.banxa.com/...\" />;\n}\n","lang":"jsx"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"vue","data-title":"Vue","header":{"title":"Vue","controls":{"copy":{}}},"source":"<template>\n  <banxa-checkout\n    source=\"https://checkout.banxa.com/...\"\n    @loading=\"onLoading\"\n    @ready=\"onReady\"\n    @paymentPending=\"onPaymentPending\"\n    @complete=\"onComplete\"\n    @error=\"onError\"\n  />\n</template>\n\n<script setup>\nimport '@banxa-official/embedded-checkout-web-component';\n\nconst onLoading = (event) => console.log('loading', event.detail);\nconst onReady = (event) => console.log('ready', event.detail);\nconst onPaymentPending = (event) => console.log('payment pending', event.detail);\nconst onComplete = (event) => console.log('complete', event.detail);\nconst onError = (event) => console.log('error', event.detail);\n</script>\n","lang":"vue"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"going-live-1","__idx":14},"children":["Going live"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before releasing to production:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm with your Banxa integration contact that your environment is provisioned for the Embedded Payment Button"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Switch to production credentials for order creation"]}]}]},"headings":[{"value":"Google Pay","id":"google-pay","depth":1},{"value":"Choose your approach","id":"choose-your-approach","depth":2},{"value":"React Native SDK","id":"react-native-sdk","depth":2},{"value":"Android app approval","id":"android-app-approval","depth":3},{"value":"Execute payment","id":"execute-payment","depth":3},{"value":"Error handling","id":"error-handling","depth":3},{"value":"Testing","id":"testing","depth":3},{"value":"Troubleshooting","id":"troubleshooting","depth":3},{"value":"Going live","id":"going-live","depth":3},{"value":"Embedded Payment Button","id":"embedded-payment-button","depth":2},{"value":"Install the web component","id":"install-the-web-component","depth":3},{"value":"Create an order","id":"create-an-order","depth":3},{"value":"Embed the component","id":"embed-the-component","depth":3},{"value":"Framework examples","id":"framework-examples","depth":3},{"value":"Going live","id":"going-live-1","depth":3}],"frontmatter":{"title":"Google Pay","description":"How to add Google Pay to a Banxa Native integration — React Native SDK and Embedded Payment Button.","seo":{"title":"Google Pay"}},"lastModified":"2026-06-18T06:30:54.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/native-api/docs/guides/google-pay","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}