Follow the steps in this tutorial to integrate a web application with the
Google Pay API, and to configure it to accept payment cards.

- [Step 1: Define your Google Pay API version](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#apiversion).
- [Step 2: Choose a payment tokenization method](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#tokenization).
- [Step 3: Define supported payment card networks](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#supported-card-networks).
- [Step 4: Describe your allowed payment methods.](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#allowed-payment-methods)
- [Step 5: Load the Google Pay API JavaScript library](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#js-load).
- [Step 6: Determine readiness to pay with the Google Pay API](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#isreadytopay).
- [Step 7: Add a Google Pay payment button](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#add-button).
- [Step 8: Create a PaymentDataRequest object](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#paymentdatarequest).
- [Step 9: Register an event handler for user gestures](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#event-handler).
- [Step 10 (optional): Set up Authorize Payments](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#authorize-payments).
- [Step 11 (optional for shipping enabled): Set up Dynamic Price Updates](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#price-updates).
- [Step 12 (optional for promo codes): Set up Promo Codes](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#promo-codes).
- [Put it all together](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#full-example).

  **Note** : See our [live Google Pay demo](https://developers.google.com/pay/api/web/guides/resources/demos.md.txt).

## Step 1: Define your Google Pay API version

Declare the version of the Google Pay API that your site uses.
The major and minor versions are required in the fields of each passed object, and are included in
the response.

The following code sample shows declared API versions:

```javascript
const baseRequest = {
  apiVersion: 2,
  apiVersionMinor: 0
};
```

## Step 2: Request a payment token for your payment provider

Google encrypts information about a payer's selected card for secure processing by a payment
provider.

```javascript
const tokenizationSpecification = {
  type: 'PAYMENT_GATEWAY',
  parameters: {
    'gateway': 'example',
    'gatewayMerchantId': 'exampleGatewayMerchantId'
  }
};
```

Replace <var translate="no">example</var> and <var translate="no">exampleGatewayMerchantId</var> with
the appropriate values for your payment provider. Use the following table to find the specific
`gateway` and `gatewayMerchantId` values for your payment provider:

| Gateway | Parameters and documents |
|---|---|
| 9Pay | ``` "gateway": "ninepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.9pay.vn/google-pay/redirect) |
| 91APP PAYMENTS | ``` "gateway": "payments91app" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.91app.com/zh-tw/admin-api/payments/introduction/) |
| A360 | ``` "gateway": "a360" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ipgtest.posted.co.rs/IPGDemoPlugin/demoPlugin.html?msgName=GPayDocumentation) |
| A-IT | ``` "gateway": "aitecomm" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://a-it.team/solutions/ecommerce) |
| ABA PayWay | ``` "gateway": "ababank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.payway.com.kh/developers/google-pay/) |
| accept.blue | ``` "gateway": "acceptblue" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.accept.blue/google-pay) |
| ACI | ``` "gateway": "aciworldwide" "gatewayMerchantId": "YOUR_ENTITY_ID" ``` [Developer docs](https://docs.aciworldwide.com/tutorials/mobile-sdk/google-pay) |
| ACpay | ``` "gateway": "acpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.acpay.com.tw/google-pay-%E9%96%8B%E7%99%BC%E8%80%85%E6%96%87%E4%BB%B6/) |
| Acquired.com | ``` "gateway": "acquired" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.acquired.com/paymentmethods/googlepay) |
| Adyen | ``` "gateway": "adyen" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" ``` [Developer docs](https://docs.adyen.com/developers/payment-methods/google-pay) |
| African Payment Solution (PTY) Ltd t/a LekkaPay | ``` "gateway": "lekkapay" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" ``` [Developer docs](https://africanpaymentsolutions.com) |
| AI Fintech | ``` "gateway": "aifintech" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" ``` [Developer docs](https://docs.aifintech.com.ua/payment-methods/digital-wallets/google-pay/index.html) |
| Airba Pay | ``` "gateway": "airbapay"" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" ``` [Developer docs](https://api.airbapay.kz/f3/api/v1/images/pay-manuals/Technical_documentation.pdf) |
| Airvend | ``` "gateway": "airvend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://googlepay.airvend.ng/) |
| Airwallex | ``` "gateway": "airwallex" "gatewayMerchantId": "YOUR_MERCHANT_ACCOUNT_NAME" ``` [Developer docs](https://www.airwallex.com/docs/online-payments__global__google-paytm) |
| Akua | ``` "gateway": "akua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://akua.la/) |
| Akurateco | ``` "gateway": "akuratecolab" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.akurateco.com/checkout_integration#google-pay) |
| Alfa-Bank | ``` "gateway": "alfabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pay.alfabank.ru/ecommerce/instructions/merchantManual/pages/index/integration_schemes.html#oplata_s_ispolzovaniem_google_pay) |
| Algoritma | ``` "gateway": "algoritma" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://algoritma.az/en/payment-solutions/) |
| Allinpay | ``` "gateway": "allinpayintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.allinpayintl.com/) |
| AllPayments | ``` "gateway": "allpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://vp.ru/storage/b/2018/05/30/Shljuz_VsePlatezhi._Rukovodstvo_Merchanta.pdf) |
| alticepay | ``` "gateway": "alticepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.wallet.pt/en/procheckout/google-pay.html) |
| Amaryllis | ``` "gateway": "amaryllis" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.amaryllispay.com/) |
| AMO FINTECH LLC | ``` "gateway": "amofintech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://wiki.amofintech.com/uk/GPay) |
| Amwal Pay | ``` "gateway": "amwalalraqamia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Anedot | ``` "gateway": "anedot" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.anedot.com/knowledge/google-pay) |
| ApcoPay | ``` "gateway": "apcopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.apimatic.io/apidocs/apcopayapi/v/1_0#/http/plugins/google-pay) |
| APPEX | ``` "gateway": "epos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://appex.ru/services/internet-acquiring/) |
| Armaghast | ``` "gateway": "armaghast" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.armaghast.club/manual/guides/googlepay/) |
| Armenian Card OJSC | ``` "gateway": "epgarca" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.arca.am/backend/static/documents/1755083114252-file_hy-Google%20Pay-Merchant%20Manual%20(2).pdf) |
| AsiaBill | ``` "gateway": "asiabill" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Assist | ``` "gateway": "assist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.assist.ru/o-podklyuchenii/docs/files/TokenPayeng.pdf) |
| Assist Belarus | ``` "gateway": "belassist" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.assist.ru/pages/viewpage.action?pageId=5767308) |
| Assist Kazakhstan | ``` "gateway": "assistkz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://assist.kz/o-podklyuchenii/docs/files/TokenPayeng.pdf) |
| Aurus | ``` "gateway": "auruspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.aurusinc.com/client_releases/googlepay) |
| Authorize.net | ``` "gateway": "authorizenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.authorize.net/api/reference/features/in-app.html#Google_Pay) |
| Axerve | ``` "gateway": "gestpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.axerve.com/soap/alternative-payments/google-pay/) |
| AXS | ``` "gateway": "axsasia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| azericardgpay | ``` "gateway": "azericardgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.azericard.com/en#googlepay) |
| B2B Soft Pay | ``` "gateway": "b2bsoftpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cdn-b2b-prod.b2bsoft.com/b2b-public-instructions/GPay-Integration/Google-Pay-Integration-Guide-for-Merchants_b2bsoftpay_11062025.pdf) |
| Bancstac | ``` "gateway": "bancstac" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://bancstac.com) |
| Bank 131 | ``` "gateway": "bank131" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.131.ru/docs/ru/payments/payment-integration-google-pay/) |
| Bank Muscat | ``` "gateway": "bankmuscat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://spayuatmars.bmtest.om/Googlepay/integration/index.html) |
| BANK RBK | ``` "gateway": "bankrbkkzpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://backend.bankrbk.kz/storage/documents/files/68ede392bd9dd.pdf) |
| Bank Vostok | ``` "gateway": "bankvostok" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ecom.vostok.bank/documentation/en/ecommerce_documentation.pdf) |
| Barclaycard | ``` "gateway": "barclayssmartpayadvance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.barclaycard.co.uk/content/dam/barclaycard/documents/business/standalone/smartpay/google-pay-integration-guide.pdf) |
| Barion | ``` "gateway": "barion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.barion.com/Google_Pay#) |
| Basis Theory | ``` "gateway": "basistheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.basistheory.com/docs/api/orchestration/google-pay) |
| BCC.KZ | ``` "gateway": "bccpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://documenter.getpostman.com/view/23274245/VVXGTBh1#f0119085-5a9f-41a6-9308-95004c091f66) |
| bePaid | ``` "gateway": "ecomcharge" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.bepaid.by/en/google_pay/integration) |
| Bereke Bank | ``` "gateway": "berekepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sandbox.berekebank.kz/en/integration/api/tokenized_payments.html#google_pay) |
| Better Payment Germany GmbH | ``` "gateway": "betterpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dashboard.betterpayment.de/docs) |
| Billing Systems | ``` "gateway": "billingsystems" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.bisys.ru/doc/shop-api/?shell#gpay) |
| Bindo Labs Limited | ``` "gateway": "bindo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apidoc.bindo.co/#3-google-pay-developer-document) |
| bisys.kz | ``` "gateway": "bisysgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.bisys.kz/doc/kz-shop-api/#gpay-vvedenie) |
| Bizon.one | ``` "gateway": "bizonone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.bizon.one/08.01/api-payment-gateway/google-pay-tm) |
| Bizzon | ``` "gateway": "bizzon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.bizzon.com/hc/en-gb/articles/360011118098-Setting-up-Google-Pay) |
| Blackstone Merchant Services | ``` "gateway": "blackstone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://app.blackstoneonline.com) |
| Blocks | ``` "gateway": "blocks" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://getblocks.notion.site/Integrating-Google-Pay-with-Blocks-5917582a5f644ca0aa1031bb0810a476) |
| Bluefin | ``` "gateway": "bluefin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.bluefin.com/docs/google-pay) |
| Bluefin Europe | ``` "gateway": "bluefineurope" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.bluefin.com/tecs/docs/google-paytm) |
| Blue Media | ``` "gateway": "bluemedia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://bluemedia.pl/developers/google-pay) |
| BlueSnap | ``` "gateway": "bluesnap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.bluesnap.com/docs/google-pay) |
| Blusky Technology Services | ``` "gateway": "bluskysvcpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.bluskysvc.com/google-pay-developer-documentation/) |
| BORICA | ``` "gateway": "borica" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.borica.bg/attachments/BobsProduct/57/docs/Google-Pay-for-Virtual-Merchants-EN.pdf) |
| BoxPay | ``` "gateway": "boxpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.boxpay.tech/docs/checkout-integration/google-pay-integration-guide/) |
| BPC | ``` "gateway": "bpcpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.bpcbt.com/integration/api/tokenized_payments.html#google-pay) |
| BR-DGE | ``` "gateway": "comcarde" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.br-dge.io/docs/features-google-pay) |
| Braintree | ``` "gateway": "braintree" "braintree:apiVersion": "v1" "braintree:sdkVersion": "braintree.client.VERSION" "braintree:merchantId": "YOUR_BRAINTREE_MERCHANT_ID" "braintree:clientKey": "YOUR_BRAINTREE_TOKENIZATION_KEY" ``` [Developer docs](https://www.braintments.com/features/google-pay) |
| Braspag | ``` "gateway": "cielo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://braspag.github.io//en/manual/ewallets) |
| BridgerPay | ``` "gateway": "bridgerpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.bridgerpay.com/docs/google-pay) |
| Bonum | ``` "gateway": "bonumpsp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://psp.bonum.mn/google-pay/) |
| BT Pay | ``` "gateway": "btpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cdn.btpay.bt.com/docs/google-pay-integration.html) |
| Buckaroo | ``` "gateway": "buckaroo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.buckaroo.io/docs/google-pay) |
| Buya | ``` "gateway": "buya" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://getbuya.com/googlepay.html) |
| CAKE | ``` "gateway": "cakepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.cake.vn/bahn/google-pay/) |
| Callpay | ``` "gateway": "callpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://agent.callpay.com/api-documentation) |
| Card Access Services Pty Ltd | ``` "gateway": "cardaccess" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.cardaccess.com.au) |
| CARDAQ | ``` "gateway": "cardaq" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.cardaq.co.uk/Payments/payment-methods) |
| CardCom | ``` "gateway": "cardcom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.cardcom.solutions/hc/he/articles/10268181547154) |
| CardConnect | ``` "gateway": "cardconnect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.cardconnect.com/google-pay) |
| Cardknox | ``` "gateway": "cardknox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.cardknox.com/mobile-wallets/google-pay-hosted-checkout) |
| cardlink | ``` "gateway": "cardlink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.cardlink.gr/documentation_categories/digital-wallets/#Google-Pay%E2%84%A2) |
| Cardstream | ``` "gateway": "crst" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cardstream.com/gateway-capabilities/alternative-payment-methods/google-pay/) |
| Cashflows | ``` "gateway": "cashflowsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.cashflows.com/solutions/google-pay?hs_preview=uhaeAoux-50425444123) |
| Cathay United Bank | ``` "gateway": "cathaybk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.cathaybk.com.tw/) |
| CCAvenue UAE | ``` "gateway": "ccavenueuae" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ccavenue.ae/downloads_mcpg/Google-Pay-CCAvenue-Integration.pdf) |
| CCV | ``` "gateway": "ccv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.myccv.eu/documentation/payment_api/online_payments/payment_methods/google_pay/) |
| Cecabank | ``` "gateway": "cecabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://comercios.ceca.es/webapp/ConsTpvVirtWeb/ConsTpvVirtS?modo=mostrarAyuda&pagina=ayuda_google_pay) |
| Celerispay | ``` "gateway": "celerispay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.celerispay.com/#/Google-pay) |
| CentralPay | ``` "gateway": "centralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc-api.centralpay.net/google-pay) |
| Centrobill LTD | ``` "gateway": "centrobill" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://readme.centrobill.com/docs/get-started-with-google-pay-integration) |
| CetraPay | ``` "gateway": "cetrapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cetrapay.com/gpay/CetraPay_Google_Pay_Integration_Guide.pdf) |
| Chargehive | ``` "gateway": "chargehive" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://chargehive.com/google-pay) |
| CharityEngine | ``` "gateway": "charityengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.charityengine.net/HelpCenter/GooglePay) |
| Chase Merchant Services | ``` "gateway": "chase" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://secure.paymentech.com/devcenter/products) |
| Checkout.com | ``` "gateway": "checkoutltd" "gatewayMerchantId": "YOUR_PUBLIC_KEY" ``` [Developer docs](https://docs.checkout.com/payments/payment-methods/wallets/google-pay) |
| CIBPAY MMC | ``` "gateway": "cibpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://wiki.cibpay.io/en/public-api/google-pay-integration) |
| City Bank PLC | ``` "gateway": "citybank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.citybankplc.com/ctlinks/CityBank_Merchant_Documentaion_GooglePay.pdf) |
| CityPay | ``` "gateway": "citypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://citypay.github.io/api-docs/paylink/#google-pay) |
| Clink | ``` "gateway": "clink" "gatewayMerchantId": "NA" ``` [Developer docs](https://docs.clinkbill.com/guides/payments/google_pay) |
| Cloud9 Payment Gateway (C9PG) | ``` "gateway": "c9pg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://c9pg.com/payment-gateway-integrate/) |
| CloudPayments | ``` "gateway": "cloudpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cloudpayments.ru/wiki/integration/products/googlepay) |
| CloudWalk | ``` "gateway": "cloudwalk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ajuda.infinitepay.io/pt-BR/articles/9741853-como-pagar-um-link-de-pagamento-com-o-google-pay) |
| CNP Processing Kazakhstan | ``` "gateway": "processingkz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.processing.kz/google-pay) |
| Coinflow | ``` "gateway": "coinflow" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://coinflow.cash) |
| Comax (Native Data LTD) | ``` "gateway": "comaxpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://comax-public-files.s3.eu-west-1.amazonaws.com/google_pay_integration_guide_EN.pdf) |
| Computop | ``` "gateway": "computop" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.computop.com/us/solutions/online-payments/e-wallets/google-pay/) |
| ConcordPay | ``` "gateway": "concordpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pay.concord.ua/docs/docs/en/GooglePay/) |
| Conekta | ``` "gateway": "conektagpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.conekta.com/docs/welcome) |
| Connectum | ``` "gateway": "connectum" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://connectum.eu/gpay/) |
| ConnexPay | ``` "gateway": "connexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.connexpay.com/docs/google-pay) |
| CoralPay | ``` "gateway": "coralpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.coralpay.com/developer/docs/google-pay) |
| Corefy | ``` "gateway": "paycoreio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://corefy.com/docs/integration/payment-methods/google-pay/) |
| Coriunder Limited | ``` "gateway": "coriunder" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Corvus Pay | ``` "gateway": "corvuspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cps.corvuspay.com/documentation/documents/Google_Pay_integration_eng.pdf) |
| Credit2000 | ``` "gateway": "credit2000" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.credit2000.co.il/) |
| Credorax | ``` "gateway": "credorax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://epower.credorax.com/) |
| CrossPay | ``` "gateway": "crosspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.crosspay.net/#tag/Google-Paytm) |
| Cross Switch | ``` "gateway": "crossswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cross-switch.com/) |
| CSG Forte | ``` "gateway": "csgforte" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.forte.net/devdocs/a_checkout/digital_wallets.htm?Highlight=digital+wallet#Google) |
| CTBC Bank | ``` "gateway": "ctbcbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ctbcbank.com) |
| CURO Payments | ``` "gateway": "curopayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.curopayments.com/docs/api/?rest_Creditcard#CreditCard-EWallets) |
| CYBERBIZ | ``` "gateway": "cyberbizpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.cyberbiz.io/support/?p=2620) |
| Cybersource | ``` "gateway": "cybersource" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.cybersource.com/en-us/support/technical-documentation/apis-and-integration.html#GooglePay) |
| danube.pay | ``` "gateway": "danubepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.danubepay.com) |
| Datacap Systems, Inc. | ``` "gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://datacapsystems.github.io/Wallet-Google/) |
| Datatrans | ``` "gateway": "datatrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.datatrans.ch/showcase/authorisation/google-pay) |
| Debia | ``` "gateway": "debia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.debia.co/) |
| DECTA | ``` "gateway": "decta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs |
| Dejavoo | ``` "gateway": "denovosystempay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ipospays.com/google-pay-developer-documentation) |
| DEUNA | ``` "gateway": "deuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.deuna.com/docs/integration-google-pay) |
| Deutsche Bank AG | ``` "gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs |
| Deutsche Bank -- Merchant Solutions | ``` "gateway": "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.db.com/apidocumentation/apimerchantsolution/about-this-documentation) |
| DG Financial Technology, Inc. | ``` "gateway": "veritrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.veritrans.co.jp/payment/googlepay.html) |
| Dibsy | ``` "gateway": "dibsy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.dibsy.dev/google-pay) |
| Digital Commerce Bank | ``` "gateway": "dcpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dccentral.dc-payments.ca) |
| Digital Finance | ``` "gateway": "digitalfinance" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.digital-finance.com.ua/services/googlepay/google_pay) |
| Dintero | ``` "gateway": "dintero" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.dintero.com/docs/checkout/google-pay/google-pay-overview) |
| dLocal | ``` "gateway": "dlocal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.dlocal.com/guides/google-pay) |
| DNA Payments | ``` "gateway": "dnapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.dnapayments.com/docs/ecommerce/checkout/integration-guide/google-pay/#card-parameter-support) |
| Dojo | ``` "gateway": "dojo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.connect.paymentsense.cloud/ConnectE/GooglePay) |
| DOKU | ``` "gateway": "dokudjakarta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.doku.com/accept-payments/doku-checkout/additional-feature/google-pay-tm) |
| Doremi-Tech | ``` "gateway": "doremitech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doremi-tech.com/DOREMI-TECH/) |
| Dotpay | ``` "gateway": "dotpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.dotpay.pl/developer/doc/google-pay/en/) |
| e-SiTef - Software Express | ``` "gateway": "softwareexpress" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://esitef-homologacao.softwareexpress.com.br/api/docs/ing/googlepay/) |
| easycard | ``` "gateway": "easycard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://github.com/EasycardNG/API/blob/main/GooglePay.md) |
| EasyPay | ``` "gateway": "easypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apidocs.easypay.ua/) |
| Easypay EU | ``` "gateway": "easypaypt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.easypay.pt/#section/Payment-Methods) |
| EBANX | ``` "gateway": "ebanx" "gatewayMerchantId": "YOUR_PUBLIC_INTEGRATION_KEY" ``` [Developer docs](https://business.ebanx.com/google-pay) |
| EBizCharge | ``` "gateway": "ebizcharge" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ebizcharge.com) |
| eCard | ``` "gateway": "ecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecard.pl/oferta/google-pay) |
| Ecart Pay | ``` "gateway": "ecartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ecartpay.com/docs/google-paytm-integration-guide) |
| Ecentric Payment Systems | ``` "gateway": "ecentric" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecentric.readme.io/docs/google-pay) |
| Ecomm Merchant Solutions | ``` "gateway": "ecommmerchantsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecomm365.vercel.app/developers/google-pay#integrate) |
| ECOMMPAY | ``` "gateway": "ecommpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.ecommpay.com/en/pm_googlepay_gate.html#pm_googlepay_gate) |
| Ecopaynet | ``` "gateway": "ecopaynet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ecopaynet.com/es/metodos-pago/google-pay) |
| ECPay | ``` "gateway": "ecpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| ECRYPT INC | ``` "gateway": "ecrypt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ecrypt.com/google-pay) |
| EdfaPay | ``` "gateway": "edfapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://edfapay.com/) |
| eftcorporation | ``` "gateway": "eftcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.eftcorp.com/docs/payments-use-cases#google_pay) |
| eGHL | ``` "gateway": "eghl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://e-ghl.com/gallery/google-pay-campaign/) |
| Elavon (Converge) | ``` "gateway": "convergepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.elavon.com/docs/converge/1.0.0/integration-guide/processing-options/googlepay) |
| Emerchantpay | ``` "gateway": "emerchantpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.emerchantpay.com/google-pay-integration) |
| emspay | ``` "gateway": "emsonline" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.online.emspay.eu/rest-api/server-to-server/google-pay) |
| Encoded | ``` "gateway": "encoded" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.encoded.co.uk/google-pay/) |
| epay | ``` "gateway": "epay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.epay.eu/get-started/set-up-epay/payment-methods/google-pay) |
| EPAYJSC | ``` "gateway": "epayjsc" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.epayjsc.com/Epay-IntegrationDocument-Google_Pay_20250801.pdf) |
| EpicPay | ``` "gateway": "epicpay" "gatewayMerchantID": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.epicpay.com/Docs/PaymentAPI#Api_Transaction_GooglePay) |
| Espago | ``` "gateway": "espago" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://start.espago.com/en/docs/1330629/google_pay-description) |
| Etisalat | ``` "gateway": "etisalatpaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| EuPlatesc - Europayment Services SRL | ``` "gateway": "euplatesc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://manager.euplatesc.ro/v3/index.php?page=docs&v=gpay) |
| Euronet Merchant Services (epay) | ``` "gateway": "emspi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://epayworldwide.gr/en/googlepay/) |
| Evertec Placetopay S.A.S | ``` "gateway": "placetopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.placetopay.dev/payments/wallets/googlepay/) |
| Evervault | ``` "gateway": "evervault" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.evervault.com/payments/google-pay) |
| EveryPay S.A. | ``` "gateway": "EveryPay S.A." "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.everypay.gr/other-payment-methods/google-pay/) |
| EVONET | ``` "gateway": "cardinfolink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.evonetonline.com/docs/google-pay) |
| EVOPAY | ``` "gateway": "EVOPAY" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cdn.rozetkapay.com/public-docs/index.html) |
| Evo Payment Gateway | ``` "gateway": "evopaymentgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| exactly.com | ``` "gateway": "exactly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://exactly.com/processing/mobile-payments) |
| Exact Payments | ``` "gateway": "exactpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.e-xact.com/hc/en-us/articles/12945346125083-Configuring-Google-Pay-on-Payment-Pages) |
| Fat Zebra | ``` "gateway": "fatzebra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fatzebra.com/docs/web-integration) |
| Fenige | ``` "gateway": "fenige" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paytool-api-dev.fenige.pl/fenige-paytool.html) |
| Fexco payUnite | ``` "gateway": "fexco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://drive.google.com/file/d/1I45gWijqHXo_zxJCWshEp8awuf5EW6FX/view) |
| Fibonatix | ``` "gateway": "fibonatixparagon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paragon.online/#12-1-google-pay) |
| Financial Line | ``` "gateway": "finline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.finline.io/payment-methods/google-pay) |
| Finanso UA | ``` "gateway": "finansoua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://finansoua.com.ua/googlepay) |
| finby | ``` "gateway": "finby" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://finby.com/) |
| fincode byGMO | ``` "gateway": "fincode" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.fincode.jp/payments/googlepay/) |
| FINEXUS | ``` "gateway": "finexus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sandbox.finexusgroup.com/myxaas/docs/PayMaster-MPI/googlepay/) |
| Finix | ``` "gateway": "finix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.finixpayments.com/#google-pay) |
| Finrelay | ``` "gateway": "finrelay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.finrelay.com/references/google-pay/index.html) |
| FireAntPay | ``` "gateway": "fireantpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.fireantpay.com/developer/en/GooglePay.html) |
| First American by Deluxe | ``` "gateway": "firstpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.deluxe.com/docs/deluxe-payment-platform/dfrdpcueb68yb-google-pay) |
| Fiuu (formerly Razer Merchant Services \& MOLPay) | ``` "gateway": "molpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://fiuu.com/google-pay/) |
| FIS Biller Solutions | ``` "gateway": "fisglobalbsp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://bsptest.metavante.com/dut/agreement.html) |
| Fiserv | ``` "gateway": "fiserv" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.fiserv.com/product/CommerceHub/docs/?path=docs/Online-Mobile-Digital/Wallets-AltPayments/Google-Pay/Google-Pay.md&branch=main) |
| Fiserv | ``` "gateway": "fiservipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fiserv.dev/public/docs/wallets) |
| Flintn | ``` "gateway": "flintn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://flintn.com/) |
| Flitt | ``` "gateway": "flitt" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.flitt.com/api/googlepay-getting-started/) |
| Flow pagos | ``` "gateway": "flow_pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Fluid Pay | ``` "gateway": "fluidpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sandbox.fluidpay.com/docs/walletjs/#overview) |
| Flyway | ``` "gateway": "flyway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://showdoc.inflyway.com/web/#/23/377) |
| FM Finance LTD | ``` "gateway": "fmfinanceltd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.fmpay.me/Technical_integration_with_Google_Pay.pdf) |
| ForteBank | ``` "gateway": "fortebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://main.storage-object.pscloud.io/Provedenie_oplaty_s_ispolzovaniem_Google_Pay_v_5_ddd23330f3.pdf) |
| Forward | ``` "gateway": "forward" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.getfwd.com) |
| FPAY | ``` "gateway": "fizzapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fpay.az/googlePay/) |
| Fractal | ``` "gateway": "fractal" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fractalpay.com/googlepay) |
| Freedom Finance Bank | ``` "gateway": "axayscom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://acq.ffinpay.ru/acq-company-web/resources/index/api_doc.pdf) |
| FreedomPay | ``` "gateway": "freedompay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://corporate.freedompay.com/advanced-commerce-platform/consumer-experience/) |
| FreedomPay.Money | ``` "gateway": "payboxmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paybox.money/?lang=en#/g2g/pay#content-google-pay) |
| Freepay | ``` "gateway": "freepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://mw.freepay.dk/content/api.html#section/Acquirers/Google-Pay-tm) |
| Frisbii | ``` "gateway": "Frisbii" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.frisbii.com/docs/google-pay) |
| Frontstream | ``` "gateway": "frontstreampayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.frontstream.com/developers/secure-electronics-payments-api/documentation) |
| Fung Payments | ``` "gateway": "fungpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fungpayments.com/payment-methods/google-pay) |
| Gatewell Payments | ``` "gateway": "gatewellpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.gwp.digital/payin-googlepay-v2) |
| GBPayments | ``` "gateway": "gbpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.gbpayments.io/dev/google-pay/) |
| geidea | ``` "gateway": "geidea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.geidea.net/docs/google-pay) |
| Getnet | ``` "gateway": "getnetpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.globalgetnet.com/en/products/online-payments/regional-api?doc=google-pay#integration-overview) |
| GETTRX | ``` "gateway": "globalelectronictechnology" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.edgepay.io/docs/google-pay-1) |
| Gkash | ``` "gateway": "gkash" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.gkash.my/google-pay) |
| Global One Pay | ``` "gateway": "globalonepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Global Payments | ``` "gateway": "globalpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.globalpaymentsinc.com/en/accept-payments/in-person/globalmpos/google-pay) |
| globalpaymentsinc | ``` "gateway": "globalpaymentsinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.globalpaymentsintegrated.com/#/landing/content/%2Fportal%2Fweb%2Fapi%2Fpayfields-google-pay%2F1252?top=PayFields&l1=Google%20Pay&l2=&l3=#googlepay-payfields) |
| GMO Payment Gateway | ``` "gateway": "gmopg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.gmo-pg.com/service/mulpay/google-pay/) |
| GoDaddy Payments | ``` "gateway": "godaddypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.godaddy.com/payments) |
| Good Idea Technologies | ``` "gateway": "git" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.gitpay.tech/alternative_payment_methods_API/googlepayintegration.html) |
| GoPay | ``` "gateway": "gopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.gopay.com/cs/tema/integrace-platebni-brany/nastaveni-a-funkcionality-plateb/jak-spustit-google-pay-na-platebni-brane) |
| GP Webpay | ``` "gateway": "gpwebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Gravity Payments | ``` "gateway": "gravitypayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.gravitypayments.com/docs/emergepay/digital-wallets/) |
| Gr4vy | ``` "gateway": "gr4vy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.gr4vy.com/guides/features/google-pay/overview) |
| Gsurf Tecnologia em Pagamentos Eletrônicos Ltda | ``` "gateway": "gsurf" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.google.com/pay/api/web/guides/www.gsurfnet.com) |
| Halyk Bank | ``` "gateway": "halykbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://epayment.kz/docs/Google%20Pay%20additional%20info) |
| Helcim | ``` "gateway": "helcim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.helcim.com/article/helcim-commerce-online-store-configuring-store-settings-google-pay/) |
| HiPay | ``` "gateway": "hipay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.hipay.com/online-payments/payment-means/google-pay) |
| HIPS | ``` "gateway": "hips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.hips.com/docs/g-pay-google-pay-or-android-pay) |
| HiTrust | ``` "gateway": "hitrustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.hitrustpay.com.tw/page_gpay.html) |
| hutko | ``` "gateway": "hutko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.hutko.org/uk/docs/page/google-pay/) |
| Hyp | ``` "gateway": "hyp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://googlepayhyp.docs.apiary.io/) |
| icard | ``` "gateway": "icardwallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://icard.com/en/business/google-pay) |
| iCount | ``` "gateway": "iCount" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.icount.co.il/features/google-pay) |
| iCredit | ``` "gateway": "rivhit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://icredit.rivhit.co.il/management/GooglePayDocumentation.aspx) |
| IDid Tecnologia Ltda | ``` "gateway": "idid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ididsecure.net/gateway/v1/#wallets-google-pay%E2%84%A2-post) |
| iKhokha | ``` "gateway": "ikhokha" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://emergemobile.atlassian.net/wiki/external/ZDI2MGZkMDhkZTc0NGM2YmE2YjQ0NTYzMzRiYjU3ODA) |
| IMOJE | ``` "gateway": "imoje" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.imoje.pl/) |
| Impaya | ``` "gateway": "impayarus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://impaya.ru/google-pay/) |
| Infofintech S A S | ``` "gateway": "infofintech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tran-dev.flexipay.com.co/swagger-ui.html?urls.primaryName=Google-Pay-English) |
| Inovio Payments | ``` "gateway": "inoviopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://helpdesk.inoviopay.com/hc/en-us/articles/40007831345051-Google-Pay-Gateway-Configuration) |
| InPlat | ``` "gateway": "inplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://protocols.inplat.ru/api/_static/latex/InPlat_API_v.1.14.6.pdf) |
| InstaMed | ``` "gateway": "instamed" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.instamed.com/consumer-payments/google-pay/) |
| IntaSend Solutions Limited | ``` "gateway": "intasend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.intasend.com/docs/google-pay) |
| intella | ``` "gateway": "intella" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://intella2.gitbook.io/scan2pay/appendix/google-pay-tm-developer-guide-integrating-with-scan2pay-olpay) |
| IntellectMoney | ``` "gateway": "intellectmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://wiki.intellectmoney.ru/pages/viewpage.action?pageId=50724886) |
| InTempo Software DBA Curbstone | ``` "gateway": "curbstone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.curbstone.io/docs/google-pay) |
| Interactive Transaction Solutions | ``` "gateway": "interactivets" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.interactivets.com/) |
| Interpay | ``` "gateway": "interpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecomweb.interpay.sa/home/googlepay) |
| Interpay Llp | ``` "gateway": "interpaypro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://interpay.kz) |
| Interswitch Payment Gallery | ``` "gateway": "interswitch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.interswitchgroup.com/docs/pay-with-google) |
| Intervale | ``` "gateway": "intervale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://intervale.kz/OpenAPI_Intervale_googlePay.pdf) |
| ioka fintech | ``` "gateway": "ioka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ioka.kz/en/ioka-api/google-pay/) |
| iPay88 | ``` "gateway": "ipay88" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ipay88.com/) |
| IPSI | ``` "gateway": "ipsi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.iframe.ipsi.com.au/?path=/docs/google-pay-google-pay-button--default) |
| iQmetrix | ``` "gateway": "iqmetrixpaymentservicesgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.iqmetrix.com/lp/mobile-payment-technology) |
| iVeri Payment Technologies | ``` "gateway": "iveri" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.iveri.co.za/docs/enterprise-developer-guide-58#digital-wallets-2155-0) |
| IXOPAY | ``` "gateway": "ixopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://gateway.ixopay.com/documentation/connectors#googlepay) |
| JagoLink Limited | ``` "gateway": "jagolink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payment-docs.cogolinks.com/google-pay/) |
| JetPay | ``` "gateway": "jetpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.jetpay.kz/en/pm_pay_partner_kz.html) |
| jpmmps | ``` "gateway": "jpmmps" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://documentation.jpmchase.com/) |
| JudoPay | ``` "gateway": "judopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Juspay | ``` "gateway": "juspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://juspay.io/sea/docs/google-pay-sea/docs/google-pay/an-overview) |
| JustiFi | ``` "gateway": "justifi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.justifi.tech/payments/googlePay) |
| KapitalBank | ``` "gateway": "eCommerceKapitalBank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pg.kapitalbank.az/docs) |
| Kassa | ``` "gateway": "kassacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kassa.com/docs/api/#provedenie-oplati-s-google-pay) |
| kassa24pay | ``` "gateway": "kassa24pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://business.kassa24.kz/documentation/payment-methods-via-apple-pay-and-google-pay-in-kassa-24-business) |
| KastaPay | ``` "gateway": "kastapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kastapay.ua/google-pay.html) |
| Kazpost JSC | ``` "gateway": "qazpost" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| KimNganPay | ``` "gateway": "kimngan" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kimnganpay.com.vn/san-pham/tai-lieu) |
| Kineox | ``` "gateway": "kineox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kineox.com/google-pay/) |
| Klix by Citadele | ``` "gateway": "klix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.klix.app/payment-methods/#google-paytm) |
| Koin | ``` "gateway": "koin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://api-docs.koin.com.br/v2.2/docs/wallets) |
| KOMOJU | ``` "gateway": "komoju" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.komoju.com/en/docs/integration-guides/google-pay/using-google-pay) |
| KPay Group | ``` "gateway": "kpaygroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://online.payment.docs.kpay-group.com/#/en-us/v4/api/googlepay/GooglePay) |
| Kronor.io | ``` "gateway": "kronor" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.kronor.io/google-pay) |
| Kyrgyzkommertsbank | ``` "gateway": "kkbpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://proxy2.kkb.kg/kkb_docs/google_pay_docs.html) |
| Lapsa Payments | ``` "gateway": "lapsapayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://lapsa.pro/documents/Google_technical_integration.pdf) |
| Lemonway | ``` "gateway": "lemonway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://documentation.lemonway.com/reference/moneyins-google-pay) |
| LHV Pank | ``` "gateway": "lhvpank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://merchant.lhv.ee/help/en/articles/11484394-google-pay-integration-guide) |
| Liberty | ``` "gateway": "liberty" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cdn.lb.ge/libertybank/files/02/54/03/89TljMMSB0aL1KIINNBJaA/txpg-lb-manual-1-0-12-2.pdf) |
| Life Pay | ``` "gateway": "lifepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://confluence.life-pay.ru/pages/viewpage.action?pageId=69009431) |
| Limepay | ``` "gateway": "limepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.limepay.com.au/developer-portal/wallet-payments/) |
| LINK4TECH | ``` "gateway": "googlekykeons" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kykeons.link4.tech) |
| Linkly | ``` "gateway": "linkly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://bpoint.com.au/developers/v5/api/txn/authkey/googlepay) |
| LiqPay | ``` "gateway": "liqpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.liqpay.ua/documentation/en/api/acquiring/googlepay/) |
| LITIQON OÜ | ``` "gateway": "nuvex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.myaupay.com/) |
| Littlepay | ``` "gateway": "littlepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.littlepay.io/checkout/wallet-payments/#integrate-with-google-pay) |
| LogPay | ``` "gateway": "logpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tst2.logpay.de/atlas/documents/lpy-atlas-v2.0_wallet-api-b2c_googlepay_EN.html) |
| Loyale | ``` "gateway": "loyale" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.loyale.us/) |
| lynck | ``` "gateway": "lynck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.lynck.de/api/#google-pay) |
| Lyra | ``` "gateway": "lyra" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://lyra.com/fr/google-pay/) |
| MADFIN TECH | ``` "gateway": "madfingate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://madfin.api-docs.info/) |
| Magnetiq Bank | ``` "gateway": "magnetiq" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://old.magnetiqbank.com/wp-content/uploads/2024/05/google-pay-implementation-instruction_v2.pdf) |
| maib | ``` "gateway": "maibecomm" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.maib.md/en/persoane-juridice/acceptare-plati/e-commerce#custom-37/) |
| MakeCommerce (Maksekeskus) | ``` "gateway": "maksekeskus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://makecommerce.net/google-pay-integration-guide/) |
| Maksu GMBH | ``` "gateway": "maksupayeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.maksupay.com/docs/VPOS-MerchantIntegrationV5.pdf) |
| Mandarin | ``` "gateway": "mandarin" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mandarin.io/pay-russian/google_pay.html) |
| Market Pay | ``` "gateway": "marketpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://market-pay.com/en/documentation) |
| Mastercard Payment Gateway Services | ``` "gateway": "mpgs" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://na.gateway.mastercard.com/api/documentation/integrationGuidelines/supportedFeatures/pickPaymentMethod/devicePayments/GooglePay.html) |
| Maya | ``` "gateway": "mayaph" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.maya.ph/reference/google-pay) |
| Mellifera | ``` "gateway": "mellifera" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://mellifera.team/Mellifera_Technical_integration_with_GooglePay.pdf) |
| MerchantE | ``` "gateway": "merchante" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.merchante.com/hubfs/User%20Guides/Using%20Google%20Pay%20with%20MerchantE_June2023.pdf) |
| Midtrans | ``` "gateway": "midtrans" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.midtrans.com/reference/google-pay) |
| Menahel4uGoCredit | ``` "gateway": "menahel4ugocredit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Merchant Warrior | ``` "gateway": "merchantwarrior" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dox.merchantwarrior.com/digital-wallets-web#google-pay-prerequisites) |
| Minsait Payments Systems | ``` "gateway": "minsaitpaymentsgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://cms.minsaitpayments.com/wp-content/uploads/2023/04/OSP-Google-Pay-DOC-v3_ENG_MPS.pdf) |
| MITEC | ``` "gateway": "mitecmx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://wppsandbox.mit.com.mx/gpay.jsp) |
| MIXPLAT | ``` "gateway": "mixplat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mixplat.ru/scenarios/#38-google-pay) |
| Mobbex | ``` "gateway": "mobbex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| MOBI.Money | ``` "gateway": "mobimoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://mobi-corp.ru/googlepay/) |
| Modulbank | ``` "gateway": "modulbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://modulbank.ru/support/googlepay) |
| Mollie | ``` "gateway": "mollie" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mollie.com/docs/google-pay) |
| Mondido | ``` "gateway": "mondido" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.mondido.com/en/blog/google-pay-documentation/) |
| Monei | ``` "gateway": "monei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.monei.com/docs/payment-methods/google-pay/#google-pay-direct-api-integration) |
| monek | ``` "gateway": "monek" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.monek.com/) |
| Moneris | ``` "gateway": "moneris" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.moneris.com/Documentation/NA/E-Commerce%20Solutions/Google%20Pay/Overview) |
| Moneta | ``` "gateway": "moneta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Monext | ``` "gateway": "monext" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payline.atlassian.net/wiki/spaces/DT/pages/1471283926/Google+Pay+-+Integration+EN) |
| MoneyHash | ``` "gateway": "moneyhash" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.moneyhash.io/docs/google-pay) |
| Money.Mail.Ru | ``` "gateway": "moneymailru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://money.mail.ru/oferta/googlepay) |
| monripayments | ``` "gateway": "monripayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ipg.monri.com/documentation/google-pay.pdf) |
| Moov | ``` "gateway": "moov" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.moov.io/guides/sources/cards/google-pay/) |
| Moyasar | ``` "gateway": "moyasar" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.moyasar.com/guides/google-pay/google-pay-web/) |
| MPay | ``` "gateway": "managepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.managepay.com/managepay/) |
| MSolution | ``` "gateway": "msolution" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://msolution.az/en/docs/google-pay) |
| mstartipg | ``` "gateway": "mstartipg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://mcheckout.mstart.hr/iCheckOutX/documentation/) |
| MTB BANK, PJSC | ``` "gateway": "mtb" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Multicarta | ``` "gateway": "mulitcarta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://multicarta.ru/internet-ekvayring/google-pay/) |
| MultiSafepay | ``` "gateway": "multisafepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.multisafepay.com/payment-methods/google-pay/) |
| Mundipagg | ``` "gateway": "mundipagg" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mundipagg.com/docs/google-pay-tm) |
| MyCheck | ``` "gateway": "mycheck" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://www.mycheck.io/google-pay) |
| Mycar Pay | ``` "gateway": "mycarpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://mycarpay.kz/googlepayintegration) |
| MyChoice2Pay | ``` "gateway": "mychoice2pay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mychoice2pay.com/docs/api-en/13558d27c8e17-google-pay) |
| MyFatoorah | ``` "gateway": "myfatoorah" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://myfatoorah.readme.io/docs/google-pay-native) |
| MyPay | ``` "gateway": "mypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| myPOS | ``` "gateway": "mypos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.mypos.eu/en/google-pay) |
| N\&TS Group | ``` "gateway": "netsgroup" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://netsgroup.com/) |
| NCCC | ``` "gateway": "nccc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.nccc.com.tw) |
| NCR Voyix | ``` "gateway": "ncrpaymentsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecom-demo.paymentslab.ncrvoyix.com/docs/hpp-integration.html#google-pay) |
| Neolink | ``` "gateway": "neolinkprocessing" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.neolink.io/docs/googlepay) |
| Neon Pay | ``` "gateway": "neonpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.neononepay.com/google-pay/) |
| Neopayment | ``` "gateway": "neopayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://neopayment.com/soluciones/google-pay/) |
| Netopia | ``` "gateway": "netopia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://netopia-payments.com/servicii/google-pay/) |
| NetValve | ``` "gateway": "netvalve" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.netvalve.com/guides/digital-wallets/google-pay) |
| Network International | ``` "gateway": "networkintl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ngenius-payments.com/reference/google-pay-integration) |
| Newebpay (formerly STPath, Pay2Go) | ``` "gateway": "newebpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.spgateway.com/website/Page/content/download_api) |
| Newtech | ``` "gateway": "newtechmobile" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.newtech.lv/) |
| Nexi | ``` "gateway": "nexi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecommerce.nexi.it/specifiche-tecniche/pagamentosemplice/altrimetodipagamento/googlepay.html) |
| Nexi | ``` "gateway": "siavpos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecommerce.nexi.it/specifiche-tecniche/altrimetodipagamento/googlepay.html) |
| Nexi Easy | ``` "gateway": "easy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.nexigroup.com/nexi-checkout/en-EU/docs/google-pay/) |
| NMI | ``` "gateway": "gatewayservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.nmi.com/hc/en-gb/articles/360012639192-Google-Pay-with-ChipDNA-Direct) |
| noon payments | ``` "gateway": "noonpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.noonpayments.com/payment-method/googlepay/introduction) |
| Noqoody Pay | ``` "gateway": "noqoodypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://noqoody.com/googlepay/) |
| North | ``` "gateway": "north" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.north.com/products/online/embedded-checkout/form-integration-guide) |
| Novalnet | ``` "gateway": "novalnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.novalnet.de/onlinepayments/aboutgooglepay) |
| Nexi Relay | ``` "gateway": "nexirelay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.nexigroup.com/en-EU/) |
| NTT DATA | ``` "gateway": "nttdatahk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://hk.nttdata.com/payment-acceptance-and-processing) |
| Nuvei | ``` "gateway": "nuvei" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.nuvei.com/documentation/global-guides/google-pay/) |
| Oceanpayment | ``` "gateway": "oceanpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.oceanpayment.com/) |
| Omise | ``` "gateway": "omise" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.omise.co/googlepay) |
| Omno | ``` "gateway": "omno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://omno-api.redocly.app/omno-google-pay-full) |
| OneGate | ``` "gateway": "onegate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payments.onegate.co.za/developers/google-pay) |
| One Inc | ``` "gateway": "oneinc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.oneinc.com/developers) |
| Onelya | ``` "gateway": "onelya" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" ``` [Developer docs](https://www.gateline.net/api/google-pay/) |
| OnePay LTD | ``` "gateway": "onepayltd" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" ``` [Developer docs](https://doc.onepayltd.kz/) |
| Onerway | ``` "gateway": "ronghan" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" ``` [Developer docs](https://sandbox-v3-doc.pacypay.com/?java#onerway-v3-0-openapi-google-pay-) |
| OneVision Limited | ``` "gateway": "onevision" "gatewayMerchantId": "YOUR_GATWAY_MERCHANT_ID" ``` [Developer docs](https://docs.onevisionpay.com/) |
| OnPay | ``` "gateway": "onpayio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://onpay.io/docs/google-pay.html) |
| Opayo by Elavon | ``` "gateway": "opayoelavon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.elavon.com/products/opayo/v1/google-pay) |
| ONVO | ``` "gateway": "onvopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Orient Commercial Joint Stock Bank (OCB) | ``` "gateway": "ocbcheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| OrkestaPay | ``` "gateway": "orkestapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.orkestapay.com/docs/en/google-pay#google-pay%E2%84%A2) |
| Oschadbank | ``` "gateway": "oschadbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://3ds.oschadbank.ua/Інтеграція_з_Google_Pay.pdf) |
| Outpayce | ``` "gateway": "outpayce" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| pagarme | ``` "gateway": "pagarme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.pagar.me/docs/google-pay-tm-guide) |
| PagBank | ``` "gateway": "pagbank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.pagbank.uol.com.br/reference/como-integrar-o-google-pay) |
| PagBrasil | ``` "gateway": "pagbrasil" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.pagbrasil.com/pt-br/) |
| PagSeguro | ``` "gateway": "pagsegurointernational" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.international.pagseguro.com/docs/google-pay-api) |
| Pay N Seconds | ``` "gateway": "paynseconds" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| PAY2M | ``` "gateway": "pay2m" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pay2m.com/) |
| Payadmit | ``` "gateway": "payadmit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payadmit.com) |
| Payarc | ``` "gateway": "payarc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payarc.net/#a0463c39-0df4-40da-aac6-2befee70870c) |
| Paybis | ``` "gateway": "paybis" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payb.is/docs/mobile-android-sdk#google-pay) |
| PAYBOX VERIFONE | ``` "gateway": "paybox" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Pay.com | ``` "gateway": "paycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apiref.pay.com/reference/googlepay) |
| PayCaps Technology LLC SPC | ``` "gateway": "paycaps" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.paycaps.com/paycaps-hosted-checkout-integration-for-googlepay/) |
| PAYCOMET | ``` "gateway": "paycomet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paycomet.com/en/recursos/espec/googlepay) |
| Paycore | ``` "gateway": "twisto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paycore.com/tr/) |
| Paycross Ltd | ``` "gateway": "paycross" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.pay-cross.com/) |
| PayDo | ``` "gateway": "paydo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paydo.com/merchant-account-new/payment-lifecycle/integration-flows/server-to-server/google-pay-tm) |
| Paydock | ``` "gateway": "paydock" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://helpdesk.paydock.com/google-pay-via-mpgs-gateway) |
| PayEase | ``` "gateway": "payeasenet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://demo.yizhifubj.com/Development/showdoc-master/web/#/19?page_id=1182) |
| PayEngine | ``` "gateway": "payengine" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payengine.co/developer-docs/processing-payments/google-pay) |
| PayerMax | ``` "gateway": "payermax" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payermax.com/doc-center/receipt/front-end-component/configuration-googlepay.html) |
| PayFabric | ``` "gateway": "payfabric" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://github.com/PayFabric/Portal/blob/master/PayFabric/Sections/APM.md#google-paytm) |
| PayFacto | ``` "gateway": "payfacto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payfacto.com/google-pay/) |
| PayFast | ``` "gateway": "gopayfastuat" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://gopayfast.com/wp-content/uploads/google-pay-developer-doc.pdf) |
| Payfast by Network | ``` "gateway": "payfast" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paygate.co.za/paygate-by-network/reference/google-paytm-token-payments-host-to-host) |
| paygent | ``` "gateway": "paygent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.paygent.co.jp/service/googlepay/) |
| Payhub | ``` "gateway": "payhub" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://innsmouth.payhub.com.ua/google-pay/) |
| PayKKa | ``` "gateway": "paykkaeu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://jlpay.yuque.com/pmw77l/zfm2gs/fzv0up0c2yeyn6gt?singleDoc#) |
| Payku | ``` "gateway": "payku" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payku.com) |
| PayLane | ``` "gateway": "paylane" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://devzone.paylane.com/api-guide/google-pay/) |
| Payler | ``` "gateway": "payler" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payler.com/developers/internetacquiring/13) |
| PayLink® | ``` "gateway": "paylink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://why.pay.link/integrate-google-pay) |
| Payload | ``` "gateway": "payload" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payload.co/ui/mobile-wallets/) |
| Paymark | ``` "gateway": "paymark" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.paymark.co.nz/products/click/) |
| PayMaster | ``` "gateway": "paymaster" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paymaster.ru/docs/ru/googlepay) |
| PayMe | ``` "gateway": "payme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payme.io/) |
| Payment Fusion | ``` "gateway": "paymentfusion" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://partner.paymentfusion.com) |
| PaymentIQ | ``` "gateway": "worldlinedevcode" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://opendocs.paymentiq.com/googlepay_processor) |
| Paymentvision | ``` "gateway": "paymentvision" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apihelp.autoscribe.com/googlepay/google-pay-processing) |
| Paymentwall | ``` "gateway": "paymentwall" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paymentwall.com/payment-method/google-pay) |
| Paymo | ``` "gateway": "paymo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paymo.ru/#google-pay) |
| Paymob | ``` "gateway": "gpaymob" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paymob.ae/docs/google-pay) |
| PayMongo | ``` "gateway": "paymongo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.paymongo.com/docs/google-pay#/) |
| Paymtech | ``` "gateway": "paymtech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paymtech.kz/pdf/GooglePay_integration.pdf) |
| PayNearMe | ``` "gateway": "paynearme" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://home.paynearme.com/payment-types/apple-google-pay/) |
| Payneteasy | ``` "gateway": "payneteasy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.payneteasy.eu/alternative_payment_methods_API/googlepayintegration.html) |
| PayNetWorx | ``` "gateway": "paynetworx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paynetworx.com/digital_wallets/google_pay/index.html) |
| PayNext Inc | ``` "gateway": "paynext" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paynext.com) |
| Pay.nl | ``` "gateway": "paynl" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.pay.nl/paymentoptions?language=en#google-pay) |
| Paynopain | ``` "gateway": "paynopain" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paylandsen.docs.apiary.io/#reference/alternative-payment-methods) |
| PayOne | ``` "gateway": "payone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payone.document360.io/docs/google-pay) |
| PayOnline | ``` "gateway": "payonline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.payonline.ru/googlepay) |
| Payonomy Limited | ``` "gateway": "asperato" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Payoo | ``` "gateway": "payoo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.payoo.vn/docs/PayooPGW_IntegrationDocument_GooglePay.pdf) |
| PayPal Complete Payments | ``` "gateway": "paypalppcp" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.paypal.com/api/orders/v2/orders-create) |
| Pay Theory | ``` "gateway": "paytheory" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paytheory.com/docs/main/online_payments/wallet_transactions/google_pay/getting_started) |
| PayPlus | ``` "gateway": "payplus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.payplus.co.il/google-pay) |
| PayPlusLLC | ``` "gateway": "payplusllc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://payplus.kz/documentation/googlePay) |
| PayPro Pvt Ltd | ``` "gateway": "paypro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Payrails | ``` "gateway": "payrails" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payrails.com/docs/google-pay) |
| PayRex | ``` "gateway": "payrexhq" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payrex.com/docs/guide/developer_handbook/payments/payment_methods/googlepay/receive_a_payment) |
| Payrexx | ``` "gateway": "payrexx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payrexx.com/merchant/v/master/payment-priovder/external-payment-provider/wallets-and-more/google-pay-tm) |
| PayRiff | ``` "gateway": "payriff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.payriff.com/#googlepay) |
| Payrix | ``` "gateway": "payrix" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://resource.payrix.com/resources/enable-google-pay-for-web) |
| Paysafe | ``` "gateway": "paysafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.paysafe.com/en/rest-apis/google-pay/overview/) |
| Payscout | ``` "gateway": "payscout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://project.payscout.com/dbtranz/docs/OSBP/files/Development.html#introduction) |
| Paysend Business | ``` "gateway": "paysend" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paysend.com/business/acquiring/) |
| Paysoft | ``` "gateway": "paysoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paysoft.solutions/en/server2server/googlepay.html) |
| Paystack Payments Limited | ``` "gateway": "paystack" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paystack.com/docs/payments/google-pay/) |
| Pay360 | ``` "gateway": "pay360" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.pay360.com/google-pay/) |
| PayTabs | ``` "gateway": "paytabs" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://docs.paytabs.com/manuals/google-pay-integration/) |
| paytech | ``` "gateway": "paytechsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paytech.api-docs.info/) |
| PayTech Ukraine | ``` "gateway": "paytech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paytech.com.ua/wp-content/uploads/2023/09/g_pay_documentation-3.pdf) |
| Payten Payment Gateway | ``` "gateway": "paytentr" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://merchantsafeunipay.com/msu/api/v2/doc) |
| Paythru | ``` "gateway": "paythru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.paythru.com/walletpayments/google-pay.html) |
| Payture | ``` "gateway": "payture" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://payture.com/google-pay/) |
| PayU | ``` "gateway": "payu" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](http://developers.payu.com/en/google_pay.html) |
| PayU LATAM | ``` "gateway": "payulatam" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.payulatam.com/latam/en/docs/integrations/api-integration/payments-api-brazil.html#submit-transaction-with-google-pay) |
| PAYUNi | ``` "gateway": "payuni" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.payuni.com.tw/docs/web/#/7/34) |
| PayU Romania | ``` "gateway": "payuro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://secure.payu.ro/docs/alu/v3/#token-googlepay) |
| PayU Russia | ``` "gateway": "payuru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://secure.payu.ru/docs/alu/v3/#token-googlepay) |
| Payway | ``` "gateway": "payway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.payway.com/wp-content/uploads/Payway-GooglePay-Integration-Guide_DesignRev4.pdf) |
| Paywiser | ``` "gateway": "paywiser" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://paywiser.com/api/gpay) |
| PayXpert | ``` "gateway": "payxpert" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.payxpert.com/google-pay/) |
| Payzone Ireland | ``` "gateway": "payzoneireland" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.payzone.ie/business/online-payment-solutions) |
| PBT Gateway Services Ltd | ``` "gateway": "pbtgateway" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://merchants.pbtpay.eu/WebSite/DeveloperDocs.aspx) |
| Pelecard | ``` "gateway": "pelecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.pelecard.com/google-pay/) |
| Pensopay | ``` "gateway": "pensopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.pensopay.com/hc/da/articles/19813066927261-Google-Pay) |
| PhotonPay | ``` "gateway": "photonpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.photonpay.com/) |
| Pifagorus Ltd | ``` "gateway": "pifagorusgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pifagorus.com/Google_technical_integration.pdf) |
| Pikassa | ``` "gateway": "pikassa" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pikassa.io/google-pay) |
| PingPong | ``` "gateway": "pingpongx" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.pingpongx.com/zh) |
| Pin Payments | ``` "gateway": "pinpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pinpayments.com/developers/integration-guides/google-pay) |
| Planet | ``` "gateway": "cccpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.planetpayment.com/media/5060/googlepay-integration.pdf) |
| PlanetPay | ``` "gateway": "itcardpaymentservice" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://planetpay.pl/storage/app/uploads/public/65a/007/0e3/65a0070e39c1b403290322.pdf) |
| Plategka.com | ``` "gateway": "plategkacom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.plategka.com/) |
| Platon | ``` "gateway": "platon" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://platon.atlassian.net/wiki/spaces/docs/pages/1346994177/Google+Pay+API) |
| Plexo | ``` "gateway": "plexouy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://plexo.gitbook.io/rest-api/wallets/google-pay) |
| Plexy | ``` "gateway": "plexy" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.plexy.money/google-pay-integration-1968069m0) |
| Pomelo | ``` "gateway": "pomelopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.pomelopay.com/docs/wallet-payments/ZG9jOjE3NjM0MDQ1-google-pay) |
| Portmone | ``` "gateway": "portmonecom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.portmone.com.ua/docs/GPay/) |
| PortPos | ``` "gateway": "portpos" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.portpos.com/googlepay.php) |
| Powerpay | ``` "gateway": "powerpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://api.powerpay.solutions/#tag/Google-Paytm) |
| Praxis | ``` "gateway": "praxistech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.praxis.tech/docs/google-pay) |
| Preczn | ``` "gateway": "preczn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.preczn.com/docs/google-pay-for-web) |
| PrimePay | ``` "gateway": "primepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.primepay.kz/#google-pay) |
| Primer | ``` "gateway": "primer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://primer.io/docs/payment-methods/google-pay/direct-integration) |
| Procard | ``` "gateway": "procard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.procard-ltd.com/en/docs/GooglePay/) |
| ProcessOut | ``` "gateway": "processout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.processout.com/payments/googlepay/) |
| Przelewy24 | ``` "gateway": "przelewy24" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.przelewy24.pl/#tag/GPay-Description) |
| PSCB | ``` "gateway": "pscbru" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.pscb.ru/oos/shpa.html#shlyuz-prozrachnoj-avtorizacii-scenarii-vzaimodejstviya-google-pay) |
| PSiGate Inc. | ``` "gateway": "psigate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://psigate.com/docs/MobilePayMethods.pdf) |
| PXP Financial | ``` "gateway": "pxpfinancial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.pxp-solutions.com/reference/google-pay-process-flow) |
| Qenta Payment CEE | ``` "gateway": "qenta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://guides.qenta.com/payment-methods/googlePayApi/) |
| QIWI | ``` "gateway": "qiwi" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.qiwi.com/en/qiwipay/#introduction) |
| QNB | ``` "gateway": "qnbpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ecomgateway.qnb-pay.com/ipg/docs) |
| QorCommerce | ``` "gateway": "qorpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.qorcommerce.io/guides/google-pay-integration-guide.pdf) |
| Qualpay | ``` "gateway": "qualpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.qualpay.com/developer/guides/google-pay) |
| QuickPay | ``` "gateway": "quickpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://learn.quickpay.net/helpdesk/en/articles/payment-methods/google-pay/) |
| Qvalent | ``` "gateway": "qvalent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://quickstream.westpac.com.au/docs/google-pay) |
| Radial | ``` "gateway": "radial" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.radial.com/ptf/Content/Topics/payments/google-integration.htm?Highlight=google+pay) |
| Raiffeisen Processing Centre | ``` "gateway": "raiffeisenprocessingcentre" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.raiaccept.com/google-pay.html) |
| Rainforest | ``` "gateway": "rainforestpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.rainforestpay.com/docs/google-pay) |
| RapidCents | ``` "gateway": "rapidcentspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.rapidcents.com/docs/google-pay/) |
| Rapyd | ``` "gateway": "rapyd" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.rapyd.net/build-with-rapyd/docs/google-pay) |
| RBK.money | ``` "gateway": "rbkmoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.rbk.money/docs/payments/googlepay/) |
| Rebail Capital | ``` "gateway": "rebailcapital" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://rebail.capital/googlepay) |
| Rebilly | ``` "gateway": "Rebilly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.rebilly.com/integrations/google-pay/) |
| Recurly | ``` "gateway": "recurly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.recurly.com/docs/google-pay) |
| Reddot | ``` "gateway": "reddotpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://reddotpayment.com/google-pay/) |
| Rede | ``` "gateway": "rede" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.maxipago.com/developers/google-pay/) |
| Redsys | ``` "gateway": "redsys" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pagosonline.redsys.es/desarrolladores-inicio/documentacion-otros-metodos-de-pago/otros-metodos-de-pago-google-pay) |
| Reepay | ``` "gateway": "reepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://reepay.com/payments-with-google-pay/) |
| Revenue Monster | ``` "gateway": "revenuemonster" "gatewayMerchantId": "YOUR_REVOLUT_ORDER_TOKEN" ``` [Developer docs](https://doc.revenuemonster.my/docs/digital-wallet/google-pay) |
| Revolut | ``` "gateway": "revolut" "gatewayMerchantId": "YOUR_REVOLUT_ORDER_TOKEN" ``` [Developer docs](https://developer.revolut.com/docs/guides/accept-payments/online-payments/apple-pay-google-pay/server-to-server/android) |
| RocketGate | ``` "gateway": "rocketgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.rocketgate.com/googlepay/) |
| revPAY (Revenue Harvest) | ``` "gateway": "revpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://revpay.com.my/google-pay.php) |
| Rootline | ``` "gateway": "rootline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.rootline.com/guides/payment-methods/google-pay) |
| Russian Standard Bank | ``` "gateway": "rsb" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://testsecurepay.rsb.ru/email/rsb_ecomm_api_en.pdf) |
| Ryft | ``` "gateway": "ryft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.ryftpay.com/google-pay) |
| S.C. C SOLUTION S.R.L. | ``` "gateway": "plationline" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Safepay | ``` "gateway": "safepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://safepay-docs.netlify.app/concepts/payment-methods/google-pay/) |
| Saferpay | ``` "gateway": "worldlinesaferpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.saferpay.com/home/integration-guide/payment-methods/google-pay) |
| Safexpay | ``` "gateway": "safexpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.safexpay.ae/GooglePay) |
| Sberbank | ``` "gateway": "sberbank" "gatewayMerchantId": "YOUR_ORGANIZATION_NAME" ``` [Developer docs](https://securepayments.sberbank.ru/wiki/doku.php/integration:googlepay:start) |
| Seachange | ``` "gateway": "seachange" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.seachangefinance.com/) |
| SEB Baltic | ``` "gateway": "sebbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.ecommerce.sebgroup.com/en/articles/13459444-google-pay-integration-guide) |
| SEBES Technology | ``` "gateway": "sebes" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sebestech.com/API/google.html) |
| secupay | ``` "gateway": "secupay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.secuconnect.com/integration/Google_PayTM_Integration_Checklist.html) |
| SecurePay | ``` "gateway": "securepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.securepay.com) |
| Sense Bank | ``` "gateway": "sensebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sensebank.com.ua/samostijna-integracia-platformi-internet-magazinu-z-google-pay-api) |
| SensePass | ``` "gateway": "sensepass" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.sensepass.com/sensepay/transaction-api/payment-methods) |
| Servicios Digitales Popular S.A. | ``` "gateway": "pagosazul" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.azul.com.do/Pages/developer/documentos/plugins/Integracion_con_Google_Pay.pdf) |
| Shift4 | ``` "gateway": "shift4payments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.shift4.com/examples/charge-with-google-pay) |
| Shiji Group | ``` "gateway": "shijipaymentsolutions" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.shijigroup.com/brands/shiji-payment-solutions) |
| SH Start High | ``` "gateway": "shstartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.shstartpay.com/google-pay) |
| shvarenapay | ``` "gateway": "shvarenapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.shva.co.il/docs/shva-arena-dev-checkout-product/1/overview) |
| SIBS Romania | ``` "gateway": "romcard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://pay.sibs.ro/support/developers/google-pay-hosted-payment-page/Google%20Pay%E2%84%A2%20Integration%20-%20Merchant%20Guide%20Updated%2020260420.pdf) |
| simbasoft | ``` "gateway": "simbasoft" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.symoco.com) |
| SimplePay Zrt | ``` "gateway": "simplepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://simplepay.hu/fejlesztoknek/) |
| Sipay | ``` "gateway": "sipay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sandbox.sipay.es/docm/google/en/) |
| SmartPay | ``` "gateway": "smartpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.smartpay.co.il/google-pay/) |
| Softbank Payment Service | ``` "gateway": "sbps" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.sbpayment.jp/service/asp/google_pay/) |
| Softtouch POS and Payments | ``` "gateway": "softtouch" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.fractalpay.com/googlepayhttps://web.softtouchpos.co/auth/softtouch-google-pay-developer-documentation) |
| Sohar International | ``` "gateway": "soharinternational" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Sokin | ``` "gateway": "sokinpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.sokin.com/article/how-to-configure-google-pay) |
| Solid | ``` "gateway": "solid" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.solidgate.com/developers/documentation/payments/google-pay) |
| Sony Payment Services | ``` "gateway": "sonypaymentservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.sonypaymentservices.jp/consider/Google-pay/) |
| SPayN | ``` "gateway": "spayn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://admin-test-psp.spayn.es/access/docs/index.html#tag/Google-Paytm-Integration-SPayN-PSP) |
| Splitit | ``` "gateway": "splitit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.splitit.com/support/google-pay) |
| Spreedly | ``` "gateway": "spreedly" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.spreedly.com/guides/google-pay/) |
| Square | ``` "gateway": "square" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.connect.squareup.com/payments/sqpaymentform/digitalwallet/googlepay-setup) |
| SredaPay | ``` "gateway": "sredapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://googlepartners.file.force.com/servlet/servlet.FileDownload?file=00P6Q00001hRDWBUA4&operationContext=S1) |
| SSLCOMMERZ | ``` "gateway": "sslcommerz" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.sslcommerz.com/doc/v4/google-pay-integration.html) |
| Stancer | ``` "gateway": "stancer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.stancer.com/documentation/) |
| Stratsol | ``` "gateway": "stratsol" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.strat-sol.biz/) |
| Stripe | ``` "gateway": "stripe" "stripe:version": "2018-10-31" "stripe:publishableKey": "YOUR_PUBLIC_STRIPE_KEY" ``` [Developer docs](https://stripe.com/docs/google-pay) |
| SUMIT | ``` "gateway": "sumit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.sumit.co.il/he/articles/10257965) |
| SUNBAY | ``` "gateway": "sunbay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.sunbay.us/en/docs/integration/online/google-pay) |
| Suntech | ``` "gateway": "esafe" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.sunpay.com.tw/%e7%94%a2%e5%93%81%e8%aa%aa%e6%98%8e/%e4%bf%a1%e7%94%a8%e5%8d%a1/google-pay/) |
| SuperSonic Pay | ``` "gateway": "supersonicpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://api.supersonicpay.com/docs) |
| Surfboard Payments | ``` "gateway": "surfboard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.surfboardpayments.com/docs/concepts/payment-methods/google-pay) |
| Svea Bank | ``` "gateway": "svea" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.svea.com/sv-se/foretag/betallosningar) |
| Swedbank Baltic | ``` "gateway": "swedbankbaltic" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.every-pay.com/en/articles/13770531-google-pay-integration-guide) |
| Swedbank Pay | ``` "gateway": "payexswedbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.swedbankpay.com) |
| TabaPay | ``` "gateway": "tabapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.tabapay.com/GooglePay_Developer.html) |
| Tabit | ``` "gateway": "tabit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.tabit.cloud) |
| TapPay (Cherri Tech) | ``` "gateway": "tappay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.tappaysdk.com/taiwan-zhtw/service/payments/google-pay) |
| TapPayments | ``` "gateway": "tappayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://github.com/Tap-Payments/gosell-js-client/tree/development#google-pay) |
| tarlanpayments | ``` "gateway": "tarlanpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.tarlanpayments.kz/en/google-pay/) |
| TAS Link | ``` "gateway": "taslink" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://p.taslink.com.ua/gpay/) |
| Tatra banka (CardPay) | ``` "gateway": "tatrabanka" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Technology Partnership PGS | ``` "gateway": "technologypartnership" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://kopaapiclient.gokopa.co/) |
| TEKO | ``` "gateway": "teko" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.teko.io/assets/common/gpay_integration.pdf) |
| Telepay | ``` "gateway": "telerompay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://secure.telepay.co.il) |
| Telr | ``` "gateway": "telr" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.telr.com/reference/google-pay-integration) |
| theMAP | ``` "gateway": "themap" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.mapcard.pro/current/sposoby-oplaty/google-pay) |
| The Vaults International Payment L.L.C | ``` "gateway": "vaultspaygpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://sdk.vaultspay.com/payment-method?paymentId=PL_SXZXDTGLI1U1U) |
| Till Payments | ``` "gateway": "tillpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tillpayments.com/news/google-pay-tm-integration) |
| Tilopay | ``` "gateway": "tilopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tilopay.com/documentacion/pago-rapido-y-seguro-google-pay) |
| Time Project LLC | ``` "gateway": "timeproject" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.merchant.alb.ua/platizhni-metodi-h2h/googlepay-tm-encrypted/dokumenaciya-googlepay-tm) |
| Tinkoff | ``` "gateway": "tinkoff" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://oplata.tinkoff.ru/solution/methods/googlepay/) |
| TIPTOP PAY | ``` "gateway": "tiptoppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| TIYN | ``` "gateway": "tiyn" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://business.tiyn.io) |
| TOKENTECH | ``` "gateway": "tokentech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tokentech.pro/) |
| TORA | ``` "gateway": "tora" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://torapaymentgatewayapi.docs.apiary.io/#reference/payments) |
| TotalPay | ``` "gateway": "totalpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.totalpay.global/docs/guides/checkout_methods/#google-pay) |
| TPay | ``` "gateway": "tpaycom" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.tpay.com/pl/merchant/google-pay-tm-on-site) |
| TPay.com | ``` "gateway": "tpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://tpay.com/platnosci-karta/googlepay) |
| Trade and Development Bank of Mongolia(TDBM) | ``` "gateway": "tdbgpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.tdbm.mn/en) |
| Transact Campus | ``` "gateway": "transactcampus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://transactcampus.com/landing/Using-Google-Pay-with-Transact-Campus) |
| Transact Pro | ``` "gateway": "transactpro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.transactpro.eu/) |
| Transactworld CY | ``` "gateway": "TransactworldCY" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://secure.transactworld.com/merchant/index.jsp) |
| Transaction Services Network | ``` "gateway": "tns" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.advam.com/solutions/pathtopay/) |
| Transpayrent | ``` "gateway": "transpayrent" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://documentation.transpayrent.cloud) |
| Tranzila | ``` "gateway": "tranzila" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.tranzila.com/google-pay.html) |
| Tranzzo | ``` "gateway": "tranzzo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.tranzzo.com/docs/payment-methods/digital-wallets/google-pay/) |
| Tribe Payments | ``` "gateway": "tribepayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.tribepayments.com/docs/gateway--google-pay-flow--v1) |
| Truevo | ``` "gateway": "truevo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.truevo.com/) |
| TrustPay | ``` "gateway": "trustpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.trustpay.eu/more-payment-methods/) |
| Trust Payments | ``` "gateway": "trustpayments" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.trustpayments.com/hc/en-us/sections/4404834183185-Google-Pay) |
| Tuna | ``` "gateway": "tuna" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://dev.tuna.uy/payments/googlepay/) |
| TWPAYZ | ``` "gateway": "transactworlduk" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://document.twpayz.com/integration/googlepay.php) |
| Tyler Technologies | ``` "gateway": "tylertech" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.tylertech.com) |
| 2can\&ibox | ``` "gateway": "twocan" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.2can.ru/docs/offer_google_pay) |
| UAPAY | ``` "gateway": "uapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://uapayua.atlassian.net/wiki/spaces/AC/pages/1604222977/Google+Pay) |
| UBRR | ``` "gateway": "ubrrpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ubrr.ru/sites/default/files/obshchee_opisanie_modulya_integracii_cms_i_twpg_gpay_v2.pdf) |
| Ukrcardpay | ``` "gateway": "ukrcardpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.ukrcard.ua/google_pay_integration_guide_for_ukrcardpay_PSP_v1_0_0_eng.pdf) |
| UkrGasBank Pay | ``` "gateway": "ukrgasbankpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.ukrgasaws.com/en/google_pay) |
| Unibank OJSC | ``` "gateway": "unibankcheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://unibank.az/uploads/other/GooglePay_api_Unibank.pdf) |
| Unicorn Laboratories | ``` "gateway": "unicornlab" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://unicornlab.kz/wp-content/uploads/2026/09/Google_Pay_Unicorn_PG_API_EN.pdf) |
| Unipaas payments technologies | ``` "gateway": "unipaas" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.unipaas.com/docs/apple-pay-and-google-pay#google-pay) |
| unitedfinancialcorporation | ``` "gateway": "unitedfinancialcorporation" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developers.google.com/static/pay/api/download-assets/unitedfinancialcorporation-gpay-integration.pdf) |
| Uniteller | ``` "gateway": "uniteller" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.uniteller.ru/google-pay/) |
| Unitpay | ``` "gateway": "unitpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.unitpay.ru/unitpay-management/instrukciya-po-interfeisu#komissii-i-platezhnye-metody) |
| Unlimint | ``` "gateway": "unlimint" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://integration.unlimint.com/v3/#Google-Pay) |
| Unzer | ``` "gateway": "unzer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.unzer.com/payment-methods/googlepay/) |
| Unzer Austria | ``` "gateway": "unzeraustria" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.mpay24.com/docs/googlepay) |
| UPC | ``` "gateway": "upc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://upc.ua/ecommerce/google-pay) |
| Upgate | ``` "gateway": "upgate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://upgate.redoc.ly/#tag/Google-Pay) |
| USAePay | ``` "gateway": "usaepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.usaepay.info/developer/client-js-v2/#google-paytm) |
| UseePay | ``` "gateway": "useepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://useepay.gitbook.io/useepay/plugins/google-pay-api-dai-shang-xian) |
| USIO, Inc. | ``` "gateway": "usio" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://usio.com/) |
| Valitor | ``` "gateway": "valitor" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://valitorpay.github.io/) |
| value.io | ``` "gateway": "inspirecommerce" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.postman.com/value-io/vio-public/collection/u0mraba/google-pay) |
| Vanco | ``` "gateway": "vanco" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apidocs.connexpoint.com/hexea-js.html#tag/Wallets-Overview) |
| VantagePay | ``` "gateway": "vantagepay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Vantiv | ``` "gateway": "vantiv" "vantiv:merchantPayPageId": "YOUR_PAY_PAGE_ID" "vantiv:merchantOrderId": "YOUR_ORDER_ID" "vantiv:merchantTransactionId": "YOUR_TRANSACTION_ID" "vantiv:merchantReportGroup": "*web" ``` [Developer docs](https://docs.worldpay.com/apis/cnpapi/googlepay) |
| Vayapay | ``` "gateway": "vayapay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Vendo | ``` "gateway": "vendoservices" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.vendoservices.com/docs/google-pay) |
| Verestro | ``` "gateway": "verestro" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.verestro.com/books/paytool) |
| Verifone Payments BV | ``` "gateway": "twocheckoutpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.2checkout.com/) |
| Verifone Web Pay | ``` "gateway": "verifonefinland" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.verifonewebpay.fi/) |
| Very Good Security | ``` "gateway": "verygoodsecurity" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.verygoodsecurity.com/docs/integrations/google-pay) |
| Vesta | ``` "gateway": "vesta" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.vesta.io/) |
| Victoriabank | ``` "gateway": "victoriabank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.victoriabank.md/en/carduri-pj/e-commerce-test) |
| Vindicia | ``` "gateway": "vindicia" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.vindicia.com/cashbox-and-google-pay) |
| Vinr | ``` "gateway": "vinrpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.vinr.com/) |
| Viva Wallet | ``` "gateway": "vivawallet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.vivawallet.com/online-checkouts/redirect-checkout/google-pay-integration/) |
| VTEX | ``` "gateway": "vtex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.vtex.com/en/tracks/carteira-digital-e-wallet--6X8YyZBoVJpz5R8oXciTyu/61JMBvM5Vanqj6RaJsP8CT) |
| W-HA | ``` "gateway": "wha" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://ressources.w-ha.com/support-contodeo/integration-google-pay) |
| Waffo | ``` "gateway": "waffo" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.waffo.com/docs/google-pay/?open_in_browser=true#_top) |
| Wallee | ``` "gateway": "wallee" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://app-wallee.com/en-us/doc/payment/google-pay) |
| Walletdoc | ``` "gateway": "walletdoc" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.walletdoc.com/docs/google-pay) |
| Walletto | ``` "gateway": "walletto" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://walletto.eu/documents/GooglePay_integration.pdf) |
| WayForPay | ``` "gateway": "wayforpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://help.wayforpay.com/display/knowledgewfp/Payment+method+Google+Pay) |
| WEAT | ``` "gateway": "weatpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.weat.de/produkte/mph) |
| WhenThen | ``` "gateway": "whenthen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://documentation.whenthen.com/orchestrate/alternative-payment-methods/google-pay) |
| Whitegate | ``` "gateway": "Whitegate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.whitegate.io/payment-methods/google-pay/) |
| WHITELARK LTD | ``` "gateway": "whitelark" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://white-lark.atlassian.net/wiki/x/AQAtBw) |
| Windcave | ``` "gateway": "windcave" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.windcave.com/developer-ecommerce-google-pay) |
| Wirebank | ``` "gateway": "wirebank" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://wirebank.ru/docs/api/#section/Provedenie-oplaty-s-Google-Paytm) |
| Wirecard | ``` "gateway": "wirecard" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://doc.wirecard.com/GooglePay_Main.html) |
| Wondergate | ``` "gateway": "wondergate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://document.wondergate.io/reference/api/details/google-pay.html) |
| WOOPPAY | ``` "gateway": "wooppay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.woopkassa.kz/kz/products/google-pay) |
| WooshPay | ``` "gateway": "swooshtransfer" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.wooshpay.com/developer-doc) |
| Worldline (GlobalCollect) | ``` "gateway": "globalcollect" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://epayments.developer-ingenico.com/payment-product/google-pay/overview) |
| Worldline - Ingenico (WL Online Checkout) | ``` "gateway": "worldlineingenicoogone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://support.direct.ingenico.com/payment-methods/google-pay/overview) |
| Worldline Nordics (Worldline Online Checkout) | ``` "gateway": "worldlineonlinecheckout" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer.bambora.com/europe/checkout/payment-methods/google-pay) |
| Worldline Sips | ``` "gateway": "wlsips" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.sips.worldline-solutions.com/en/WLSIPS.157-PM-Google-Pay-integration.html) |
| Worldnet | ``` "gateway": "worldnet" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.worldnettps.com/doku.php?id=developer:api_specification:xml_payment_features_googlepay) |
| Worldpay | ``` "gateway": "worldpay" "gatewayMerchantId": "YOUR_WORLDPAY_MERCHANT_ID" ``` [Developer docs](https://developer.worldpay.com/docs/wpg/mobilewallets/googlepay) |
| Wpay | ``` "gateway": "wpayaus" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developerhub.wpay.com.au/digitalpayments/docs/google-pay) |
| WSPay | ``` "gateway": "wspay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.wspay.info/googlepay) |
| Xendit | ``` "gateway": "xendit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.xendit.co/docs/google-pay) |
| xMoney | ``` "gateway": "xmoneypay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.xmoney.com/guides/payments/payment-methods/google-pay) |
| XPATE | ``` "gateway": "xpate" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://developer-portal.xpate.com/docs/xpate-gateway/i9tnh1rdt0gsx-google-pay) |
| xpay | ``` "gateway": "xpaycomua" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.xpay.com.ua/eng-google-pay-integration-guide) |
| XPay by PostEx | ``` "gateway": "xpaybypostex" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://xstak-pay.xstak.com) |
| YabandPay B.V. | ``` "gateway": "yabandpay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.yabandpay.com/api/en/payments/cards/googlepay.html) |
| Yapstone | ``` "gateway": "yapstone" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apidocs.elements.yapstone.com/) |
| YIĞIM Payment System | ``` "gateway": "yigim" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| ЮKassa (YooKassa) | ``` "gateway": "yoomoney" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://yookassa.ru/integration-mobile/) |
| Yuno | ``` "gateway": "yuno" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://docs.y.uno/docs/google-pay-direct-integration) |
| Z-credit | ``` "gateway": "zcredit" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://zcreditwc.docs.apiary.io/) |
| Zalopay | ``` "gateway": "zalopay" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://beta-docs.zalopay.vn/docs/guides/payment-acceptance/googlepay/intro) |
| Zeller | ``` "gateway": "zeller" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| ZEN.com | ``` "gateway": "zen" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://www.zen.com/developer/googlepay) |
| Zest | ``` "gateway": "zestpayment" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://apidocs.dev.gateway.zestpayment.com/#/google-pay) |
| Zift | ``` "gateway": "zift" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` No developer docs available |
| Zuora | ``` "gateway": "zuora" "gatewayMerchantId": "YOUR_GATEWAY_MERCHANT_ID" ``` [Developer docs](https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Methods/B_Define_Payment_Methods/C1_Set_up_Google_Pay_with_Zuora_JavaScript_SDK) |

**Tip** : `example` is a valid gateway name in the test environment. If you want to try out the API, you can leave the code sample above as-is. When you use the `example` gateway, your site doesn't receive card data capable of a transaction, but the user flow looks the same.

The `PAYMENT_GATEWAY` tokenization type is the most common merchant implementation
of the card payment method in the Google Pay API. If your payment provider isn't supported, you
might be able to accept Google Pay by a DIRECT integration. For more information, see the
[Direct tokenization
documentation](https://developers.google.com/pay/api/web/reference/request-objects#direct).

## Step 3: Define supported payment card networks

Define the card networks accepted by your site. See the following code sample:

```javascript
const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
```

The Google Pay API might return cards on file on Google.com (`PAN_ONLY`) or a device
token on an Android-powered device authenticated with a 3-D Secure cryptogram
(`CRYPTOGRAM_3DS`). You can control whether both methods or just one of them can be
returned.

Before you set `allowedCardAuthMethods`, confirm with your payment processor and
acquirer on whether device tokens (`CRYPTOGRAM_3DS`) are supported in your region.

See the following code sample:

```javascript
const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];
```

For more information, see
[`CardParameters`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#CardParameters)
in our Object reference documentation. Also, check with your gateway or processor for the card
networks that are supported, and for support for Android device tokens.
**Important** :

- Make sure that you also apply your existing risk checks and controls for payment transactions to Google Pay transactions. Google Pay validation and fraud checks aren't intended to replace your risk management processes.
- If you support `PAN_ONLY`, ensure that you trigger 3D Secure (step-up authentication) for Google Pay PAN `PAN_ONLY` transactions in the same way that you trigger 3D Secure for normal card transactions.

## Step 4: Describe your allowed payment methods

To describe your allowed payment methods, complete the following steps:

1. Combine your supported authentication methods and supported card networks in order to describe your site's support for the `CARD` payment method. See the following code sample:

   ```javascript
   const baseCardPaymentMethod = {
     type: 'CARD',
     parameters: {
       allowedAuthMethods: allowedCardAuthMethods,
       allowedCardNetworks: allowedCardNetworks
     }
   };
   ```
2. Extend the base card payment method object to describe information you expect to be returned to your application. Include a description of the tokenized payment data. See the following code sample:

   ```javascript
   const cardPaymentMethod = Object.assign(
     {tokenizationSpecification: tokenizationSpecification},
     baseCardPaymentMethod
   );
   ```
3. For more information about supported `parameters`, see [`CardParameters`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#CardParameters).
4. Google Pay currently only supports the `CARD` payment method type.

## Step 5: Load the Google Pay API JavaScript library

**When using an `<iframe>`** :

- If the checkout page loading the Google Pay button is getting embedded with an `<iframe>`, make sure to set the `allow="payment"` attribute. If nested iframes are involve, this attribute must be set for every `<iframe>`
- Additionally, if the `<iframe>` does not set the `src` attribute (the content of the iframe is created dynamically), the payment API permission attribute needs to be `allow="payment *"`.

To load the Google Pay API JavaScript library, complete the following steps:

1. Include Google's hosted JavaScript on your page. See the following code sample:

   ```html
   <script
     async
     src="https://pay.google.com/gp/p/js/pay.js"
     onload="console.log('TODO: add onload function')">
   </script>
   ```
   **Note** : If your page uses a Content Security Policy (CSP) that requires nonces for script execution, include your CSP `nonce` attribute in the `<script>` tag loading `pay.js`.

   ```html
   <script
     async
     src="https://pay.google.com/gp/p/js/pay.js"
     nonce="your-nonce-value"
     onload="console.log('TODO: add onload function')">
   </script>
   ```
2. After the Google Pay API JavaScript library loads, initialize a [`PaymentsClient`](https://developers.google.com/pay/api/web/reference/client.md.txt#PaymentsClient) object. Initial development uses a `TEST` environment, which returns dummy payment methods that are suitable to reference the structure of a payment response. In this environment, a selected payment method isn't capable of a transaction. See the following code sample. **Note** : We recommend that you only initialize `paymentsClient` once. Use the same instance when you invoke all of the other APIs, like `CreateButton`, `IsReadyToPay`, `PrefetchPaymentData`, and `LoadPaymentData`.

   ```javascript
   const paymentsClient =
       new google.payments.api.PaymentsClient({environment: 'TEST'});
   ```
   **Content Security Policy (CSP) Nonce** : If your application uses a strict Content Security Policy, pass an optional `nonce` property in [`PaymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions). Google Pay attaches this nonce attribute to all dynamically injected `<style>` and `<script>` elements, including elements created by `createButton()`.

   ```javascript
   const paymentsClient =
       new google.payments.api.PaymentsClient({
         environment: 'TEST',
         nonce: 'your-csp-nonce'
       });
   ```

   For more information about the requirements for a `PRODUCTION` environment that
   returns chargeable payment methods, see the
   [Integration checklist](https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist.md.txt).

## Step 6: Determine readiness to pay with the Google Pay API

To determine readiness to pay with the Google Pay API, complete the following steps:

1. Add your allowed payment methods to your base request object. See the following code sample:

   ```javascript
   const isReadyToPayRequest = Object.assign({}, baseRequest);
   isReadyToPayRequest.allowedPaymentMethods = [baseCardPaymentMethod];
   ```
2. Call [`isReadyToPay()`](https://developers.google.com/pay/api/web/reference/client.md.txt#isReadyToPay) to determine if the Google Pay API is supported by the current device and browser for your specified payment methods. See the following code sample:

   ```javascript
   paymentsClient.isReadyToPay(isReadyToPayRequest)
       .then(function(response) {
         if (response.result) {
           // add a Google Pay payment button
         }
       })
       .catch(function(err) {
         // show error in developer console for debugging
         console.error(err);
       });
   ```

## Step 7: Add a Google Pay payment button

Add a Google Pay payment button to your page to encourage shoppers to check out with payment
methods that are supported by the Google Pay API and your site. For more information about
available button types, colors, and display requirements, see the
[Brand guidelines](https://developers.google.com/pay/api/web/guides/brand-guidelines.md.txt "Google Pay brand guidelines").

See the following payment button code sample:

```javascript
const button =
    paymentsClient.createButton({onClick: () => console.log('TODO: click handler'),
    allowedPaymentMethods: []}); // same payment methods as for the loadPaymentData() API call
document.getElementById('container').appendChild(button);
```
**Note** : To learn how to customize the Google Pay payment button, see [Customize your button](https://developers.google.com/pay/api/web/guides/resources/customize.md.txt).

## Step 8: Create a PaymentDataRequest object

To create a `PaymentDataRequest` object, complete the following steps:

1. Build a JavaScript object that describes your site's support for the Google Pay API. For a full list of supported properties, see [`PaymentDataRequest`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentDataRequest). See the following code sample:

   ```javascript
   const paymentDataRequest = Object.assign({}, baseRequest);
   ```
2. Add the payment methods supported by your app, such as any configuration of additional data that's expected in the response. See the following code sample:

   ```javascript
   paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
   ```
3. Define a total price and currency for a shopper to authorize. See the following code sample: **Important** : Merchants that process transactions in the European Economic Area (EEA) or any other countries that are subject to [Strong Customer Authentication](https://developers.google.com/pay/api/web/guides/resources/sca.md.txt) (SCA) must include the `countryCode`, `totalPrice`, and `merchantName` parameters to meet SCA requirements.

   ```javascript
   paymentDataRequest.transactionInfo = {
     totalPriceStatus: 'FINAL',
     totalPrice: '123.45',
     currencyCode: 'USD',
     countryCode: 'US'
   };
   ```
4. Provide a user-visible merchant name, and use our `TEST` `merchantId` value when in `TEST`. For more details, and for information on when to replace the `TEST` `merchantId` value, see [`MerchantInfo`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#MerchantInfo). See the following code sample of a user-visible merchant name:

   ```javascript
   paymentDataRequest.merchantInfo = {
     merchantName: 'Example Merchant'
     merchantId: '12345678901234567890'
   };
   ```
   **Note** : Our `TEST` `merchantId` value is numeric. Your specific `merchantId` value can be numeric or alphanumeric. Review [MerchantInfo](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#MerchantInfo) for more details on how to obtain your specific `merchantId`.

## Step 9: Register an event handler for user gestures

To register an event handler for user gestures, complete the following steps:

1. Register a click event handler for the purchase button. The event handler calls `loadPaymentData()` immediately after it interacts with the **Google Pay,** payment button.
2. After a Google user grants permission for your site to receive information about the user's selected form of payment and optional contact data, handle the response from the Google Pay API.
3. Extract the payment token from the `paymentData` response. If you implement a gateway integration, pass this token to your gateway without any modifications. **Note** : In a `TEST` environment, a payment response includes summary data about the selected payment method that's suitable for display on a confirmation page. The payment response doesn't include a payment method that's capable of a transaction.

   ```javascript
   paymentsClient.loadPaymentData(paymentDataRequest).then(function(paymentData){
     // if using gateway tokenization, pass this token without modification
     paymentToken = paymentData.paymentMethodData.tokenizationData.token;
   }).catch(function(err){
     // show error in developer console for debugging
     console.error(err);
   });
   ```

## Step 10 (optional): Set up Authorize Payments

Authorize Payments is used to start the payment process and acknowledge a payment's authorization
status.


To set up Authorize Payments, take the following steps:

1. Register an [`onPaymentAuthorized()`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized) callback in [`PaymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions).
2. Call the [`loadPaymentData()`](https://developers.google.com/pay/api/web/reference/client.md.txt#loadPaymentData) function with the `PAYMENT_AUTHORIZATION` callback intent.
3. Implement [`onPaymentAuthorized()`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized).

**Note** : See our [Live Google Pay demos](https://developers.google.com/pay/api/web/guides/resources/demos.md.txt#authorize-payments-example) page for more information.

### Register onPaymentAuthorized callbacks

The following code sample shows how to register
[`onPaymentAuthorized`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized)
callbacks:

```javascript
{
  environment: "TEST",
  merchantInfo: {
    merchantName: "Example Merchant",
    merchantId: "12345678901234567890"
  },
  paymentDataCallbacks: {
    onPaymentAuthorized: onPaymentAuthorized
  }
}
```

### Load payment data with callback intents

The following code sample shows how to initialize the payment sheet with Authorize Payments:

```javascript
const paymentDataRequest = Object.assign({}, baseRequest);
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
paymentDataRequest.merchantInfo = {
  merchantName: 'Example Merchant'
  merchantId: '12345678901234567890',
};

paymentDataRequest.callbackIntents = ["PAYMENT_AUTHORIZATION"];
```

### Handle onPaymentAuthorized callbacks

The [`onPaymentAuthorized()`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized)
callback is invoked with a
[`PaymentData`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#PaymentData) object by Google
after a payer approves payment through a user gesture, such as if they click **Pay**.

The callback returns a `Promise<PaymentAuthorizationResult>` value. The
[`PaymentAuthorizationResult`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#PaymentAuthorizationResult)
object has a `SUCCESS` or `ERROR` transaction state status. Upon success,
the payment sheet is closed successfully. If you encounter an error, the payment sheet renders the
error details returned after the payment is processed. The user can change the payment sheet's
payment data and authorize the payment again. See the following code sample:
**Note:** You must resolve the promise returned by `onPaymentAuthorized` callback within 30 seconds. If the promise isn't resolved within this timeframe, the request times out, and the Google Pay sheet displays a `CALLBACK_TIMED_OUT` error to the user.

```javascript
function onPaymentAuthorized(paymentData) {
  return new Promise(function(resolve, reject){
    // handle the response
    processPayment(paymentData)
    .then(function() {
      resolve({transactionState: 'SUCCESS'});
    })
    .catch(function() {
      resolve({
        transactionState: 'ERROR',
        error: {
          intent: 'PAYMENT_AUTHORIZATION',
          message: 'Insufficient funds',
          reason: 'PAYMENT_DATA_INVALID'
        }
      });
    });
  });
}
```

## Step 11 (optional for shipping-enabled): Set up Dynamic Price Updates

Dynamic Price Updates allows a merchant to dynamically update shipping options and transaction
information based on a chosen shipping address. Additionally, you can dynamically update
transaction information based on a chosen shipping option.

To set up Dynamic Price Updates, take the following steps:

1. Register both the [`onPaymentAuthorized`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized) and [`onPaymentDataChanged`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentDataChanged) callbacks in [`PaymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions).
2. Call the [`loadPaymentData()`](https://developers.google.com/pay/api/web/reference/client.md.txt#loadPaymentData) function with callback intents. For details, see the corresponding [example](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#load).
3. Implement [`onPaymentAuthorized`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentAuthorized) and [`onPaymentDataChanged`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentDataChanged).

**Note** : See our [Live Google Pay demos](https://developers.google.com/pay/api/web/guides/resources/demos.md.txt#dynamic-price-update-example) page for more information.

### Register PaymentData callback

The following code sample shows that Dynamic Price Updates requires callback functions to be
registered in the [`PaymentsClient`](https://developers.google.com/pay/api/web/reference/client.md.txt#PaymentsClient)
[`paymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions) object.
**Note** : Dynamic Price Updates requires the [Authorize Payments](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#authorize-payments) callback.

```javascript
{
  environment: "TEST",
  merchantInfo: {
    merchantName: "Example Merchant",
    merchantId: "12345678901234567890"
  },
  paymentDataCallbacks: {
    onPaymentAuthorized: onPaymentAuthorized,
    onPaymentDataChanged: onPaymentDataChanged
  }
}
```

### Load payment data with callback intents

The following code sample shows how a payment sheet must be initialized with a required shipping
address and shipping options configuration:

```javascript
const paymentDataRequest = Object.assign({}, baseRequest);
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
paymentDataRequest.merchantInfo = {
  merchantId: '12345678901234567890',
  merchantName: 'Example Merchant'
};

paymentDataRequest.callbackIntents = ["SHIPPING_ADDRESS",  "SHIPPING_OPTION", "PAYMENT_AUTHORIZATION", "PAYMENT_METHOD"];

paymentDataRequest.shippingAddressRequired = true;
paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters();
paymentDataRequest.shippingOptionRequired = true;
```

### Handle onPaymentDataChanged callback

The [`onPaymentDataChanged`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentDataChanged)
callback is invoked with an
[`IntermediatePaymentData`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#IntermediatePaymentData)
object, which includes the shipping address and shipping option selected in the payment sheet.

The callback returns a `Promise<PaymentDataRequestUpdate>`. The
[`PaymentDataRequestUpdate`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentDataRequestUpdate)
object has new transaction information, shipping options,
and a payment data error. This data updates the payment sheet.

Handle any exception cases, such as an unserviceable shipping address or invalid shipping
option, directly in the payment sheet. Set up a
[`PaymentDataError`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#PaymentDataError) object to
highlight the reason for the error with an error message to the user. Be sure to include the
related intent in the message. For details on how to set up the object and message, see the
following code sample:

```javascript
function onPaymentDataChanged(intermediatePaymentData) {
  return new Promise(function(resolve, reject) {

    let shippingAddress = intermediatePaymentData.shippingAddress;
    let shippingOptionData = intermediatePaymentData.shippingOptionData;
    let paymentMethodData = intermediatePaymentData.paymentMethodData;
    let paymentDataRequestUpdate = {};

    if (intermediatePaymentData.callbackTrigger == "INITIALIZE" || intermediatePaymentData.callbackTrigger == "SHIPPING_ADDRESS") {
      if(shippingAddress.administrativeArea == "NJ")  {
        paymentDataRequestUpdate.error = getGoogleUnserviceableAddressError();
      }
      else {
        paymentDataRequestUpdate.newShippingOptionParameters = getGoogleDefaultShippingOptions();
        let selectedShippingOptionId = paymentDataRequestUpdate.newShippingOptionParameters.defaultSelectedOptionId;
        paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(selectedShippingOptionId);
      }
    }
    else if (intermediatePaymentData.callbackTrigger == "SHIPPING_OPTION") {
      paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(shippingOptionData.id);
    }
    else if (intermediatePaymentData.callbackTrigger == "PAYMENT_METHOD") {
      if (paymentMethodData && paymentMethodData.type == "CARD" && paymentMethodData.info) {
        let billingAddress = paymentMethodData.info.billingAddress;
        if (billingAddress) {
          // Example: Update transaction info (e.g. tax) based on billing address state
          paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfoBasedOnBillingState(billingAddress.administrativeArea);
        }
      }
    }

    resolve(paymentDataRequestUpdate);
  });
}
```

## Step 12 (optional for promo codes): Set up Promo Codes

Promo Codes allow a merchant to dynamically update shipping options and transaction
information based on a provided promotional code.
**Note**: Promo Codes doesn't support liability shift.

To set up Promo Codes, take the following steps:

1. Register the [`onPaymentDataChanged`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentDataChanged) callbacks in [`PaymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions).
2. Call the [`loadPaymentData()`](https://developers.google.com/pay/api/web/reference/client.md.txt#loadPaymentData) function with callback intents. For details, see the corresponding [example](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#load).
3. Implement the [`
   onPaymentDataChanged callback function`](https://developers.google.com/pay/api/web/reference/client#onPaymentDataChanged).

### Register Offer callback

The following code sample shows that Promo Codes require callback functions to be
registered in the [`PaymentsClient`](https://developers.google.com/pay/api/web/reference/client.md.txt#PaymentsClient)
[`paymentOptions`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentOptions) object.
**Note** : Promo Codes require the [OFFER](https://developers.google.com/pay/api/web/guides/tutorial.md.txt#authorize-payments) callback.

```javascript
{
  environment: "TEST",
  merchantInfo: {
    merchantName: "Example Merchant",
    merchantId: "12345678901234567890"
  },
  paymentDataCallbacks: {
    onPaymentDataChanged: onPaymentDataChanged
  }
}
```

### Load payment data with callback intents

The following code sample shows how a payment sheet must be initialized with an OFFER callback intent:

```javascript
const paymentDataRequest = Object.assign({}, baseRequest);
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
paymentDataRequest.merchantInfo = {
  merchantId: '12345678901234567890',
  merchantName: 'Example Merchant'
};

paymentDataRequest.callbackIntents = ["OFFER"];
```

### Handle onPaymentDataChanged callback

**Note**: Any logic calculating payment values or passing those values to the processor should be done securely on your server, not client-side as in this example.

The [`onPaymentDataChanged`](https://developers.google.com/pay/api/web/reference/client.md.txt#onPaymentDataChanged)
callback is invoked with an
[`IntermediatePaymentData`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#IntermediatePaymentData)
object, which includes the shipping address and shipping option selected in the payment sheet.

The callback must return a `Promise<PaymentDataRequestUpdate>`. The
[`PaymentDataRequestUpdate`](https://developers.google.com/pay/api/web/reference/request-objects.md.txt#PaymentDataRequestUpdate)
object has new transaction information, shipping options, offer data,
and a payment data error. This data updates the payment sheet.

Handle any exception cases, such as an invalid promo code, directly in the payment sheet. Set up a
[`PaymentDataError`](https://developers.google.com/pay/api/web/reference/response-objects.md.txt#PaymentDataError) object to
highlight the reason for the error with an error message to the user. Be sure to include the
related intent in the message. For details on how to set up the object and message, see the
following code sample, which references an object (validPromoCodes) containing the promo code values:

```javascript
function onPaymentDataChanged(intermediatePaymentData) {
  return new Promise(function(resolve, reject) {

    let redemptionCodes = [];
    let shippingOptionData = intermediatePaymentData.shippingOptionData;
    let paymentDataRequestUpdate = {};
    paymentDataRequestUpdate.newTransactionInfo = getGoogleTransactionInfo();

    // ensure that promo codes set is unique
    if(typeof intermediatePaymentData.offerData != 'undefined') {
      // convert to set then back to array
      redemptionCodes = Array.from(
        new Set(intermediatePaymentData.offerData.redemptionCodes)
      );
    }

    // OPTIONAL: ensure that the newest promo code is the only one applied
    // redemptionCodes = new Array(redemptionCodes[redemptionCodes.length -1]);

    // validate promo codes and add descriptions to payment sheet
    if (intermediatePaymentData.callbackTrigger === 'OFFER') {
      paymentDataRequestUpdate.newOfferInfo = {};
      paymentDataRequestUpdate.newOfferInfo.offers = [];
      for (redemptionCode of redemptionCodes) {
        if (validPromoCodes[redemptionCode]) {
          paymentDataRequestUpdate = validPromoCodes[redemptionCode].function(
            validPromoCodes[redemptionCode],
            paymentDataRequestUpdate
          );
        } else {
          paymentDataRequestUpdate.error = getGoogleOfferInvalidError(redemptionCode);
        }
      }
    }
```

## Put it all together

The example code blocks in this section show a complete end-to-end example of the Google Pay API
JavaScript library tutorial, Authorize Payments, Dynamic Price Updates, and Promo Codes.

### Tutorial

    <div id="container"></div>

    <script>
    /**
     * Define the version of the Google Pay API referenced when creating your
     * configuration
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}
     */
    const baseRequest = {
      apiVersion: 2,
      apiVersionMinor: 0
    };

    /**
     * Card networks supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm card networks supported by your site and gateway
     */
    const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];

    /**
     * Card authentication methods supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm your processor supports Android device tokens for your
     * supported card networks
     */
    const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];

    /**
     * Identify your gateway and your site's gateway merchant identifier
     *
     * The Google Pay API response will return an encrypted payment method capable
     * of being charged by a supported gateway after payer authorization
     *
     * @todo check with your gateway on the parameters to pass
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}
     */
    const tokenizationSpecification = {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        'gateway': 'example',
        'gatewayMerchantId': 'exampleGatewayMerchantId'
      }
    };

    /**
     * Describe your site's support for the CARD payment method and its required
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const baseCardPaymentMethod = {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: allowedCardAuthMethods,
        allowedCardNetworks: allowedCardNetworks
      }
    };

    /**
     * Describe your site's support for the CARD payment method including optional
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const cardPaymentMethod = Object.assign(
      {},
      baseCardPaymentMethod,
      {
        tokenizationSpecification: tokenizationSpecification
      }
    );

    /**
     * An initialized google.payments.api.PaymentsClient object or null if not yet set
     *
     * @see {@link getGooglePaymentsClient}
     */
    let paymentsClient = null;

    /**
     * Configure your site's support for payment methods supported by the Google Pay
     * API.
     *
     * Each member of allowedPaymentMethods should contain only the required fields,
     * allowing reuse of this base request when determining a viewer's ability
     * to pay and later requesting a supported payment method
     *
     * @returns {object} Google Pay API version, payment methods supported by the site
     */
    function getGoogleIsReadyToPayRequest() {
      return Object.assign(
          {},
          baseRequest,
          {
            allowedPaymentMethods: [baseCardPaymentMethod]
          }
      );
    }

    /**
     * Configure support for the Google Pay API
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}
     * @returns {object} PaymentDataRequest fields
     */
    function getGooglePaymentDataRequest() {
      const paymentDataRequest = Object.assign({}, baseRequest);
      paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
      paymentDataRequest.merchantInfo = {
        // @todo a merchant ID is available for a production environment after approval by Google
        // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist}
        // merchantId: '12345678901234567890',
        merchantName: 'Example Merchant'
      };
      return paymentDataRequest;
    }

    /**
     * Return an active PaymentsClient or initialize
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}
     * @returns {google.payments.api.PaymentsClient} Google Pay API client
     */
    function getGooglePaymentsClient() {
      if ( paymentsClient === null ) {
        paymentsClient = new google.payments.api.PaymentsClient({environment: 'TEST'});
      }
      return paymentsClient;
    }

    /**
     * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded
     *
     * Display a Google Pay payment button after confirmation of the viewer's
     * ability to pay.
     */
    function onGooglePayLoaded() {
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
          .then(function(response) {
            if (response.result) {
              addGooglePayButton();
              // @todo prefetch payment data to improve performance after confirming site functionality
              // prefetchGooglePaymentData();
            }
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }

    /**
     * Add a Google Pay purchase button alongside an existing checkout button
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}
     * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}
     */
    function addGooglePayButton() {
      const paymentsClient = getGooglePaymentsClient();
      const button =
          paymentsClient.createButton({
            onClick: onGooglePaymentButtonClicked,
            allowedPaymentMethods: [baseCardPaymentMethod]
          });
      document.getElementById('container').appendChild(button);
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function getGoogleTransactionInfo() {
      return {
        countryCode: 'US',
        currencyCode: 'USD',
        totalPriceStatus: 'FINAL',
        // set to cart total
        totalPrice: '1.00'
      };
    }

    /**
     * Prefetch payment data to improve performance
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}
     */
    function prefetchGooglePaymentData() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      // transactionInfo must be set but does not affect cache
      paymentDataRequest.transactionInfo = {
        totalPriceStatus: 'NOT_CURRENTLY_KNOWN',
        currencyCode: 'USD'
      };
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.prefetchPaymentData(paymentDataRequest);
    }

    /**
     * Show Google Pay payment sheet when Google Pay payment button is clicked
     */
    function onGooglePaymentButtonClicked() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();

      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.loadPaymentData(paymentDataRequest)
          .then(function(paymentData) {
            // handle the response
            processPayment(paymentData);
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }
    /**
     * Process payment data returned by the Google Pay API
     *
     * @param {object} paymentData response from Google Pay API after user approves payment
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}
     */
    function processPayment(paymentData) {
      // show returned data in developer console for debugging
        console.log(paymentData);
      // @todo pass payment token to your gateway to process payment
      // @note DO NOT save the payment credentials for future transactions,
      // unless they're used for merchant-initiated transactions with user
      // consent in place.
      paymentToken = paymentData.paymentMethodData.tokenizationData.token;
    }</script>
    <script async
      src="https://pay.google.com/gp/p/js/pay.js"
      onload="onGooglePayLoaded()"></script>

### Authorize Payments

    <div id="container"></div>

    <script>
    /**
     * Define the version of the Google Pay API referenced when creating your
     * configuration
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}
     */
    const baseRequest = {
      apiVersion: 2,
      apiVersionMinor: 0
    };

    /**
     * Card networks supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm card networks supported by your site and gateway
     */
    const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];

    /**
     * Card authentication methods supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm your processor supports Android device tokens for your
     * supported card networks
     */
    const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];

    /**
     * Identify your gateway and your site's gateway merchant identifier
     *
     * The Google Pay API response will return an encrypted payment method capable
     * of being charged by a supported gateway after payer authorization
     *
     * @todo check with your gateway on the parameters to pass
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}
     */
    const tokenizationSpecification = {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        'gateway': 'example',
        'gatewayMerchantId': 'exampleGatewayMerchantId'
      }
    };

    /**
     * Describe your site's support for the CARD payment method and its required
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const baseCardPaymentMethod = {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: allowedCardAuthMethods,
        allowedCardNetworks: allowedCardNetworks
      }
    };

    /**
     * Describe your site's support for the CARD payment method including optional
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const cardPaymentMethod = Object.assign(
      {},
      baseCardPaymentMethod,
      {
        tokenizationSpecification: tokenizationSpecification
      }
    );

    /**
     * An initialized google.payments.api.PaymentsClient object or null if not yet set
     *
     * @see {@link getGooglePaymentsClient}
     */
    let paymentsClient = null;

    /**
     * Configure your site's support for payment methods supported by the Google Pay
     * API.
     *
     * Each member of allowedPaymentMethods should contain only the required fields,
     * allowing reuse of this base request when determining a viewer's ability
     * to pay and later requesting a supported payment method
     *
     * @returns {object} Google Pay API version, payment methods supported by the site
     */
    function getGoogleIsReadyToPayRequest() {
      return Object.assign(
          {},
          baseRequest,
          {
            allowedPaymentMethods: [baseCardPaymentMethod]
          }
      );
    }

    /**
     * Configure support for the Google Pay API
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}
     * @returns {object} PaymentDataRequest fields
     */
    function getGooglePaymentDataRequest() {
      const paymentDataRequest = Object.assign({}, baseRequest);
      paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
      paymentDataRequest.merchantInfo = {
        // @todo a merchant ID is available for a production environment after approval by Google
        // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist}
        // merchantId: '12345678901234567890',
        merchantName: 'Example Merchant'
      };

      paymentDataRequest.callbackIntents = ["PAYMENT_AUTHORIZATION"];

      return paymentDataRequest;
    }

    /**
     * Return an active PaymentsClient or initialize
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}
     * @returns {google.payments.api.PaymentsClient} Google Pay API client
     */
    function getGooglePaymentsClient() {
      if ( paymentsClient === null ) {
        paymentsClient = new google.payments.api.PaymentsClient({
        	environment: 'TEST',
          paymentDataCallbacks: {
          	onPaymentAuthorized: onPaymentAuthorized
          }
        });
      }
      return paymentsClient;
    }

    /**
     * Handles authorize payments callback intents.
     *
     * @param {object} paymentData response from Google Pay API after a payer approves payment through user gesture.
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData object reference}
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentAuthorizationResult}
     * @returns Promise<{object}> Promise of PaymentAuthorizationResult object to acknowledge the payment authorization status.
     */
    function onPaymentAuthorized(paymentData) {
    	return new Promise(function(resolve, reject){
        // handle the response
        processPayment(paymentData)
        .then(function() {
          resolve({transactionState: 'SUCCESS'});
        })
        .catch(function() {
          resolve({
            transactionState: 'ERROR',
            error: {
              intent: 'PAYMENT_AUTHORIZATION',
              message: 'Insufficient funds',
              reason: 'PAYMENT_DATA_INVALID'
            }
          });
      	});
      });
    }

    /**
     * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded
     *
     * Display a Google Pay payment button after confirmation of the viewer's
     * ability to pay.
     */
    function onGooglePayLoaded() {
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
          .then(function(response) {
            if (response.result) {
              addGooglePayButton();
            }
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }

    /**
     * Add a Google Pay purchase button alongside an existing checkout button
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}
     * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}
     */
    function addGooglePayButton() {
      const paymentsClient = getGooglePaymentsClient();
      const button =
          paymentsClient.createButton({
            onClick: onGooglePaymentButtonClicked,
            allowedPaymentMethods: [baseCardPaymentMethod]
          });
      document.getElementById('container').appendChild(button);
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function getGoogleTransactionInfo() {
      return {
            displayItems: [
            {
              label: "Subtotal",
              type: "SUBTOTAL",
              price: "11.00",
            },
          {
              label: "Tax",
              type: "TAX",
              price: "1.00",
            }
        ],
        countryCode: 'US',
        currencyCode: "USD",
        totalPriceStatus: "FINAL",
        totalPrice: "12.00",
        totalPriceLabel: "Total"
      };
    }

    /**
     * Show Google Pay payment sheet when Google Pay payment button is clicked
     */
    function onGooglePaymentButtonClicked() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();

      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.loadPaymentData(paymentDataRequest);
    }

    /**
     * Process payment data returned by the Google Pay API
     *
     * @param {object} paymentData response from Google Pay API after user approves payment
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}
     */
    function processPayment(paymentData) {
    	return new Promise(function(resolve, reject) {
      	setTimeout(function() {
      		// @todo pass payment token to your gateway to process payment
      		paymentToken = paymentData.paymentMethodData.tokenizationData.token;

        	resolve({});
        }, 3000);
      });
    }</script>
    <script async
      src="https://pay.google.com/gp/p/js/pay.js"
      onload="onGooglePayLoaded()"></script>

### Dynamic Price Updates

    <div id="container"></div>

    <script>
    /**
     * Define the version of the Google Pay API referenced when creating your
     * configuration
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}
     */
    const baseRequest = {
      apiVersion: 2,
      apiVersionMinor: 0
    };

    /**
     * Card networks supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm card networks supported by your site and gateway
     */
    const allowedCardNetworks = ["AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"];

    /**
     * Card authentication methods supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm your processor supports Android device tokens for your
     * supported card networks
     */
    const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];

    /**
     * Identify your gateway and your site's gateway merchant identifier
     *
     * The Google Pay API response will return an encrypted payment method capable
     * of being charged by a supported gateway after payer authorization
     *
     * @todo check with your gateway on the parameters to pass
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}
     */
    const tokenizationSpecification = {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        'gateway': 'example',
        'gatewayMerchantId': 'exampleGatewayMerchantId'
      }
    };

    /**
     * Describe your site's support for the CARD payment method and its required
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const baseCardPaymentMethod = {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: allowedCardAuthMethods,
        allowedCardNetworks: allowedCardNetworks
      }
    };

    /**
     * Describe your site's support for the CARD payment method including optional
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const cardPaymentMethod = Object.assign(
      {},
      baseCardPaymentMethod,
      {
        tokenizationSpecification: tokenizationSpecification
      }
    );

    /**
     * An initialized google.payments.api.PaymentsClient object or null if not yet set
     *
     * @see {@link getGooglePaymentsClient}
     */
    let paymentsClient = null;

    /**
     * Configure your site's support for payment methods supported by the Google Pay
     * API.
     *
     * Each member of allowedPaymentMethods should contain only the required fields,
     * allowing reuse of this base request when determining a viewer's ability
     * to pay and later requesting a supported payment method
     *
     * @returns {object} Google Pay API version, payment methods supported by the site
     */
    function getGoogleIsReadyToPayRequest() {
      return Object.assign(
          {},
          baseRequest,
          {
            allowedPaymentMethods: [baseCardPaymentMethod]
          }
      );
    }

    /**
     * Configure support for the Google Pay API
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}
     * @returns {object} PaymentDataRequest fields
     */
    function getGooglePaymentDataRequest() {
      const paymentDataRequest = Object.assign({}, baseRequest);
      paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
      paymentDataRequest.merchantInfo = {
        // @todo a merchant ID is available for a production environment after approval by Google
        // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist}
        // merchantId: '12345678901234567890',
        merchantName: 'Example Merchant'
      };

      paymentDataRequest.callbackIntents = ["SHIPPING_ADDRESS",  "SHIPPING_OPTION", "PAYMENT_AUTHORIZATION"];
      paymentDataRequest.shippingAddressRequired = true;
      paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters();
      paymentDataRequest.shippingOptionRequired = true;

      return paymentDataRequest;
    }

    /**
     * Return an active PaymentsClient or initialize
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}
     * @returns {google.payments.api.PaymentsClient} Google Pay API client
     */
    function getGooglePaymentsClient() {
      if ( paymentsClient === null ) {
        paymentsClient = new google.payments.api.PaymentsClient({
          environment: "TEST",
          merchantInfo: {
            merchantName: "Example Merchant",
            merchantId: "01234567890123456789"
          },
          paymentDataCallbacks: {
          	onPaymentAuthorized: onPaymentAuthorized,
            onPaymentDataChanged: onPaymentDataChanged
          }
        });
      }
      return paymentsClient;
    }


    function onPaymentAuthorized(paymentData) {
    	return new Promise(function(resolve, reject){

      // handle the response
      processPayment(paymentData)
        .then(function() {
          resolve({transactionState: 'SUCCESS'});
        })
        .catch(function() {
        	resolve({
            transactionState: 'ERROR',
            error: {
              intent: 'PAYMENT_AUTHORIZATION',
              message: 'Insufficient funds',
              reason: 'PAYMENT_DATA_INVALID'
            }
          });
        });

      });
    }

    /**
     * Handles dynamic buy flow shipping address and shipping options callback intents.
     *
     * @param {object} itermediatePaymentData response from Google Pay API a shipping address or shipping option is selected in the payment sheet.
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}
     * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet.
     */
    function onPaymentDataChanged(intermediatePaymentData) {
      return new Promise(function(resolve, reject) {

       	let shippingAddress = intermediatePaymentData.shippingAddress;
        let shippingOptionData = intermediatePaymentData.shippingOptionData;
        let paymentDataRequestUpdate = {};

        if (intermediatePaymentData.callbackTrigger == "INITIALIZE" || intermediatePaymentData.callbackTrigger == "SHIPPING_ADDRESS") {
          if(shippingAddress.administrativeArea == "NJ")  {
            paymentDataRequestUpdate.error = getGoogleUnserviceableAddressError();
          }
          else {
            paymentDataRequestUpdate.newShippingOptionParameters = getGoogleDefaultShippingOptions();
            let selectedShippingOptionId = paymentDataRequestUpdate.newShippingOptionParameters.defaultSelectedOptionId;
            paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(selectedShippingOptionId);
          }
        }
        else if (intermediatePaymentData.callbackTrigger == "SHIPPING_OPTION") {
          paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(shippingOptionData.id);
        }

        resolve(paymentDataRequestUpdate);
      });
    }

    /**
     * Helper function to create a new TransactionInfo object.

     * @param string shippingOptionId respresenting the selected shipping option in the payment sheet.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function calculateNewTransactionInfo(shippingOptionId) {
            let newTransactionInfo = getGoogleTransactionInfo();

      let shippingCost = getShippingCosts()[shippingOptionId];
      newTransactionInfo.displayItems.push({
        type: "LINE_ITEM",
        label: "Shipping cost",
        price: shippingCost,
        status: "FINAL"
      });

      let totalPrice = 0.00;
      newTransactionInfo.displayItems.forEach(displayItem => totalPrice += parseFloat(displayItem.price));
      newTransactionInfo.totalPrice = totalPrice.toString();

      return newTransactionInfo;
    }

    /**
     * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded
     *
     * Display a Google Pay payment button after confirmation of the viewer's
     * ability to pay.
     */
    function onGooglePayLoaded() {
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
          .then(function(response) {
            if (response.result) {
              addGooglePayButton();
              // @todo prefetch payment data to improve performance after confirming site functionality
              // prefetchGooglePaymentData();
            }
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }

    /**
     * Add a Google Pay purchase button alongside an existing checkout button
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}
     * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}
     */
    function addGooglePayButton() {
      const paymentsClient = getGooglePaymentsClient();
      const button =
          paymentsClient.createButton({
            onClick: onGooglePaymentButtonClicked,
            allowedPaymentMethods: [baseCardPaymentMethod]
          });
      document.getElementById('container').appendChild(button);
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function getGoogleTransactionInfo() {
      return {
            displayItems: [
            {
              label: "Subtotal",
              type: "SUBTOTAL",
              price: "11.00",
            },
          {
              label: "Tax",
              type: "TAX",
              price: "1.00",
            }
        ],
        countryCode: 'US',
        currencyCode: "USD",
        totalPriceStatus: "FINAL",
        totalPrice: "12.00",
        totalPriceLabel: "Total"
      };
    }

    /**
     * Provide a key value store for shippping options.
     */
    function getShippingCosts() {
            return {
        "shipping-001": "0.00",
        "shipping-002": "1.99",
        "shipping-003": "10.00"
      }
    }

    /**
     * Provide Google Pay API with shipping address parameters when using dynamic buy flow.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}
     * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest
     */
    function getGoogleShippingAddressParameters() {
            return  {
            allowedCountryCodes: ['US'],
        phoneNumberRequired: true
      };
    }

    /**
     * Provide Google Pay API with shipping options and a default selected shipping option.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingOptionParameters|ShippingOptionParameters}
     * @returns {object} shipping option parameters, suitable for use as shippingOptionParameters property of PaymentDataRequest
     */
    function getGoogleDefaultShippingOptions() {
            return {
          defaultSelectedOptionId: "shipping-001",
          shippingOptions: [
            {
              "id": "shipping-001",
              "label": "Free: Standard shipping",
              "description": "Free Shipping delivered in 5 business days."
            },
            {
              "id": "shipping-002",
              "label": "$1.99: Standard shipping",
              "description": "Standard shipping delivered in 3 business days."
            },
            {
              "id": "shipping-003",
              "label": "$10: Express shipping",
              "description": "Express shipping delivered in 1 business day."
            },
          ]
      };
    }

    /**
     * Provide Google Pay API with a payment data error.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}
     * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate
     */
    function getGoogleUnserviceableAddressError() {
            return {
        reason: "SHIPPING_ADDRESS_UNSERVICEABLE",
        message: "Cannot ship to the selected address",
        intent: "SHIPPING_ADDRESS"
            };
    }

    /**
     * Prefetch payment data to improve performance
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}
     */
    function prefetchGooglePaymentData() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      // transactionInfo must be set but does not affect cache
      paymentDataRequest.transactionInfo = {
        totalPriceStatus: 'NOT_CURRENTLY_KNOWN',
        currencyCode: 'USD'
      };
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.prefetchPaymentData(paymentDataRequest);
    }


    /**
     * Show Google Pay payment sheet when Google Pay payment button is clicked
     */
    function onGooglePaymentButtonClicked() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();

      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.loadPaymentData(paymentDataRequest);
    }

    /**
     * Process payment data returned by the Google Pay API
     *
     * @param {object} paymentData response from Google Pay API after user approves payment
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}
     */
    function processPayment(paymentData) {
    	return new Promise(function(resolve, reject) {
      	setTimeout(function() {
        	// show returned data in developer console for debugging
       	 console.log(paymentData);
      		// @todo pass payment token to your gateway to process payment
      		paymentToken = paymentData.paymentMethodData.tokenizationData.token;

        	resolve({});
        }, 3000);
      });
    }</script>
    <script async
      src="https://pay.google.com/gp/p/js/pay.js"
      onload="onGooglePayLoaded()"></script>

### Offers

    <div id="container"></div>

    <script>
    /**
     * Please note: The Promo Code callback is extremely flexible. This example
     * implementation is only one of many ways to interface with it.
     *
     * In production, your promo codes and payment logic should be securely
     * processed on your server, not client-side as in this example. Use AJAX to
     * pass this information to the payment sheet.
     */

    /**
     * Define the version of the Google Pay API referenced when creating your
     * configuration
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|apiVersion in PaymentDataRequest}
     */
    const baseRequest = {
      apiVersion: 2,
      apiVersionMinor: 0
    };

    /**
     * Define valid promo code strings
     *
     * This object paradigm is not necessary to implement Promo Codes, but provides
     * an example of how to implement promo code behavior in a modular way.
     *
     * In production, your promo codes should be securely processed on your server,
     * not client-side as in this example.
     *
     * code: the way the promo code itself is displayed in the payment sheet
     * description: the description provided to the user on the payment sheet
     * function: the function used to calculate the price change
     * value: the value passed into the above function. This value should be
     * negative for a discount.
     */

    const validPromoCodes = {
      SOMEPROMOCODE: {
        code: 'SOMEPROMOCODE',
        description: '20% off all products!',
        function: percentageDiscount,
        value: -20 // value should be negative for a discount
      },
      ANOTHERPROMOCODE: {
        code: 'ANOTHERPROMOCODE',
        description: '$5 dollars off!',
        function: staticDiscount,
        value: -5.00 // value should be negative for a discount
      }
    }

    /**
     * Card networks supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm card networks supported by your site and gateway
     */
    const allowedCardNetworks = ['AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA'];

    /**
     * Card authentication methods supported by your site and your gateway
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     * @todo confirm your processor supports Android device tokens for your
     * supported card networks
     */
    const allowedCardAuthMethods = ['PAN_ONLY', 'CRYPTOGRAM_3DS'];

    /**
     * Identify your gateway and your site's gateway merchant identifier
     *
     * The Google Pay API response will return an encrypted payment method capable
     * of being charged by a supported gateway after payer authorization
     *
     * @todo check with your gateway on the parameters to pass
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#gateway|PaymentMethodTokenizationSpecification}
     */
    const tokenizationSpecification = {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        gateway: 'example',
        gatewayMerchantId: 'exampleGatewayMerchantId'
      }
    };

    /**
     * Describe your site's support for the CARD payment method and its required
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const baseCardPaymentMethod = {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: allowedCardAuthMethods,
        allowedCardNetworks: allowedCardNetworks
      }
    };

    /**
     * Describe your site's support for the CARD payment method including optional
     * fields
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#CardParameters|CardParameters}
     */
    const cardPaymentMethod = Object.assign(
      {},
      baseCardPaymentMethod,
      {
        tokenizationSpecification: tokenizationSpecification
      }
    );

    /**
     * An initialized google.payments.api.PaymentsClient object or null if not yet set
     *
     * @see {@link getGooglePaymentsClient}
     */
    let paymentsClient = null;

    /**
     * Configure your site's support for payment methods supported by the Google Pay
     * API.
     *
     * Each member of allowedPaymentMethods should contain only the required fields,
     * allowing reuse of this base request when determining a viewer's ability
     * to pay and later requesting a supported payment method
     *
     * @returns {object} Google Pay API version, payment methods supported by the site
     */
    function getGoogleIsReadyToPayRequest() {
      return Object.assign(
          {},
          baseRequest,
          {
            allowedPaymentMethods: [baseCardPaymentMethod]
          }
      );
    }

    /**
     * Configure support for the Google Pay API
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#PaymentDataRequest|PaymentDataRequest}
     * @returns {object} PaymentDataRequest fields
     */
    function getGooglePaymentDataRequest() {
      const paymentDataRequest = Object.assign({}, baseRequest);
      paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();
      paymentDataRequest.merchantInfo = {
        // @todo a merchant ID is available for a production environment after approval by Google
        // See {@link https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist|Integration checklist}
        // merchantId: '12345678901234567890',
        merchantName: 'Example Merchant'
      };

      paymentDataRequest.callbackIntents = ['OFFER'];
      paymentDataRequest.shippingAddressRequired = false;
      paymentDataRequest.shippingAddressParameters = getGoogleShippingAddressParameters();

      return paymentDataRequest;
    }

    /**
     * Return an active PaymentsClient or initialize
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#PaymentsClient|PaymentsClient constructor}
     * @returns {google.payments.api.PaymentsClient} Google Pay API client
     */
    function getGooglePaymentsClient() {
      if ( paymentsClient === null ) {
        paymentsClient = new google.payments.api.PaymentsClient({
          environment: 'TEST',
          merchantInfo: {
            merchantName: 'Example Merchant',
            merchantId: '01234567890123456789'
          },
          paymentDataCallbacks: {
            onPaymentDataChanged: onPaymentDataChanged
          }
        });
      }
      return paymentsClient;
    }

    /**
     * These functions handle adding valid promo codes to the payment sheet
     * as well as adjusting the display items to match.
     *
     * To add a new promo code, create a new function per this template
     * and define it as valid in the onPaymentDataChanged function.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}
     * @param {string} redemptionCode string representing the promo code to apply
     * @param {string} description string representing the description to show
     * @param {int} discountPercentage int representing the percentage to discount.
     * Please note the discount value should be negative. Ex: -20 = 20% discount.
     * @param {object} PaymentDataRequestUpdate object representing
     * the current state of the payment data request.
     * @returns {object} PaymentDataRequestUpdate object to update the
     * payment sheet with new transaction info and offer data.
     */

    function percentageDiscount(promoParameters, paymentDataRequestUpdate) {
      // set variables
      let originalTransactionInfo = getGoogleTransactionInfo();
      /* because this promo code calculates a % of original prices,
       * we need to get the original transaction info */
      let newTransactionInfo = paymentDataRequestUpdate.newTransactionInfo;
      let discount = 0;

        // update promo code and description
      paymentDataRequestUpdate.newOfferInfo.offers.push({
        redemptionCode: promoParameters['code'],
        description: promoParameters['description']
      });

      // calculate discount (from original transaction items only)
      originalTransactionInfo.displayItems.forEach(function(displayItem) {
        discount += parseFloat(displayItem.price) * promoParameters['value'] * 0.01;
      });

      // add displayItem with new discount
      newTransactionInfo.displayItems.push({
          label: promoParameters['code'],
          price: discount.toFixed(2),
          type: 'LINE_ITEM'
      });

      return paymentDataRequestUpdate;
    }

    function staticDiscount(promoParameters, paymentDataRequestUpdate) {
      // set variables
      let newTransactionInfo = paymentDataRequestUpdate.newTransactionInfo;

        // update promo code and description
      paymentDataRequestUpdate.newOfferInfo.offers.push({
        redemptionCode: promoParameters['code'],
        description: promoParameters['description']
      });

      // add displayItem with new discount
      newTransactionInfo.displayItems.push({
          label: promoParameters['code'],
          price: promoParameters['value'].toFixed(2),
          type: 'LINE_ITEM'
      });

      return paymentDataRequestUpdate;
    }

    /**
     * Handles offer callback intents.
     *
     * @param {object} itermediatePaymentData response from Google Pay API when a promo code is entered in the google pay payment sheet.
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#IntermediatePaymentData|IntermediatePaymentData object reference}
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataRequestUpdate|PaymentDataRequestUpdate}
     * @returns Promise<{object}> Promise of PaymentDataRequestUpdate object to update the payment sheet with new transaction info and offer data.
     */
    function onPaymentDataChanged(intermediatePaymentData) {
      return new Promise(function(resolve, reject) {

        let redemptionCodes = new Set();
        let shippingOptionData = intermediatePaymentData.shippingOptionData;
        let paymentDataRequestUpdate = {};
        paymentDataRequestUpdate.newTransactionInfo = getGoogleTransactionInfo();

        // ensure that promo codes set is unique
        if(typeof intermediatePaymentData.offerData != 'undefined') {
          redemptionCodes = new Set(intermediatePaymentData.offerData.redemptionCodes);
        }

        // validate promo codes and add descriptions to payment sheet
        if (intermediatePaymentData.callbackTrigger === 'OFFER') {
          paymentDataRequestUpdate.newOfferInfo = {};
          paymentDataRequestUpdate.newOfferInfo.offers = [];
          for (redemptionCode of redemptionCodes) {
            if (validPromoCodes[redemptionCode]) {
              paymentDataRequestUpdate = validPromoCodes[redemptionCode].function(
                validPromoCodes[redemptionCode],
                paymentDataRequestUpdate
              );
            } else {
              paymentDataRequestUpdate.error = getGoogleOfferInvalidError(redemptionCode);
            }
          }
        }
        /**
         * Update item costs and total.
         *
         * In production, this final calculation should always be calculated
         * server-side to ensure it matches the price that the merchant sends to the
         * processor.
         */
        paymentDataRequestUpdate.newTransactionInfo = calculateNewTransactionInfo(
          paymentDataRequestUpdate.newTransactionInfo
        )

        resolve(paymentDataRequestUpdate);
      });
    }

    /**
     * Helper function to update the TransactionInfo object.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @param {object} transactionInfo respresenting the selected shipping option in the payment sheet.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function calculateNewTransactionInfo(newTransactionInfo) {
      // calculate the new totalPrice from display items
      let totalPrice = 0.00;
      newTransactionInfo.displayItems.forEach(
        function(displayItem) {
          totalPrice += parseFloat(displayItem.price);
        }
      );
      // Note: newTransactionInfo.totalPrice must be a string
      newTransactionInfo.totalPrice = totalPrice.toFixed(2);

      return newTransactionInfo;
    }

    /**
     * Initialize Google PaymentsClient after Google-hosted JavaScript has loaded
     *
     * Display a Google Pay payment button after confirmation of the viewer's
     * ability to pay.
     */
    function onGooglePayLoaded() {
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
          .then(function(response) {
            if (response.result) {
              addGooglePayButton();
              // @todo prefetch payment data to improve performance after confirming site functionality
              // prefetchGooglePaymentData();
            }
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }

    /**
     * Add a Google Pay purchase button alongside an existing checkout button
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ButtonOptions|Button options}
     * @see {@link https://developers.google.com/pay/api/web/guides/brand-guidelines|Google Pay brand guidelines}
     */
    function addGooglePayButton() {
      const paymentsClient = getGooglePaymentsClient();
      const button =
          paymentsClient.createButton({
            onClick: onGooglePaymentButtonClicked,
            allowedPaymentMethods: [baseCardPaymentMethod]
          });
      document.getElementById('container').appendChild(button);
    }

    /**
     * Provide Google Pay API with a payment amount, currency, and amount status
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#TransactionInfo|TransactionInfo}
     * @returns {object} transaction info, suitable for use as transactionInfo property of PaymentDataRequest
     */
    function getGoogleTransactionInfo() {
      return {
            displayItems: [
            {
              label: 'Subtotal',
              type: 'SUBTOTAL',
              price: '11.00',
              status: 'FINAL'
            },
            {
              label: 'Tax',
              type: 'TAX',
              price: '1.00'
            }
        ],
        currencyCode: 'USD',
        totalPriceStatus: 'FINAL',
        totalPrice: '12.00',
        totalPriceLabel: 'Total'
      };
    }

    /**
     * Provide Google Pay API with shipping address parameters.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/request-objects#ShippingAddressParameters|ShippingAddressParameters}
     * @returns {object} shipping address details, suitable for use as shippingAddressParameters property of PaymentDataRequest
     */
    function getGoogleShippingAddressParameters() {
            return  {
            allowedCountryCodes: ['US', 'UK', 'FR', 'CA', 'MX', 'GA'],
        phoneNumberRequired: false
      };
    }

    /**
     * Provide Google Pay API with an invalid offer error.
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentDataError|PaymentDataError}
     * @returns {object} payment data error, suitable for use as error property of PaymentDataRequestUpdate
     */
    function getGoogleOfferInvalidError(redemptionCode) {
            return {
        reason: 'OFFER_INVALID',
        message: redemptionCode + ' is not a valid promo code.',
        intent: 'OFFER'
            };
    }

    /**
     * Prefetch payment data to improve performance
     *
     * @see {@link https://developers.google.com/pay/api/web/reference/client#prefetchPaymentData|prefetchPaymentData()}
     */
    function prefetchGooglePaymentData() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      // transactionInfo must be set but does not affect cache
      paymentDataRequest.transactionInfo = {
        totalPriceStatus: 'NOT_CURRENTLY_KNOWN',
        currencyCode: 'USD'
      };
      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.prefetchPaymentData(paymentDataRequest);
    }


    /**
     * Show Google Pay payment sheet when Google Pay payment button is clicked
     */
    function onGooglePaymentButtonClicked() {
      const paymentDataRequest = getGooglePaymentDataRequest();
      paymentDataRequest.transactionInfo = getGoogleTransactionInfo();

      const paymentsClient = getGooglePaymentsClient();
      paymentsClient.loadPaymentData(paymentDataRequest)
          .then(function(paymentData) {
            // handle the response
            processPayment(paymentData);
          })
          .catch(function(err) {
            // show error in developer console for debugging
            console.error(err);
          });
    }

    /**
     * Process payment data returned by the Google Pay API
     * In a production environment, this function should always be implemented
     * server-side.
     *
     * @param {object} paymentData response from Google Pay API after user approves payment
     * @see {@link https://developers.google.com/pay/api/web/reference/response-objects#PaymentData|PaymentData object reference}
     */
    function processPayment(paymentData) {
      // show returned data in developer console for debugging
        console.log(paymentData);
      // @todo pass payment token to your gateway to process payment
      paymentToken = paymentData.paymentMethodData.tokenizationData.token;
    }</script>
    <script async
      src="https://pay.google.com/gp/p/js/pay.js"
      onload="onGooglePayLoaded()"></script>

**Objective** : Proceed to our [Integration checklist](https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist.md.txt) to validate your integration and request production access.