---
title: "Google Pay on Web + Cybersource Integration Notes"
description: "A detailed guide on how to integrate Google Pay on Web in a React frontend and complete the payment integration through the Cybersource payment gateway, covering developer account setup, token handling, and backend API implementation."
canonical_url: "https://blog.markkulab.net/en/post/google-pay-on-web-cybersource-integration"
author: "Mark Ku"
author_url: "https://blog.markkulab.net/en/author/mark-ku"
site: "Mark Ku's Tech Notes"
date_published: "2022-09-30 01:01:01 +0800"
category: "Payment"
tags: ["google pay", "cybersource", "payment", "frontend", "react", "integration", "ecommerce"]
language: "en"
license: "CC BY 4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
attribution: "when reusing or quoting, credit the author and link back to the original"
---

# Google Pay on Web + Cybersource Integration Notes

## Background
For work, I needed to integrate Google Pay into e-commerce sites for the US and Germany.

[I've previously shared about Apple Pay on Web + Cybersource](https://blog.markkulab.net/2022/08/10/apple-pay-on-web-cybersource-integration/)

## Prerequisites for Integration
* The website must have an HTTPS environment.
* A Google Developer account ($25 USD / one-time fee).
* If not integrating directly with Google Pay, you'll need a payment gateway provider (this article uses Cybersource).
* The page design must comply with the [Google Pay UI guidelines](https://developers.google.com/pay/api/web/guides/brand-guidelines?hl=zh-tw).

## Google Pay Payment Flow
When a user clicks the Google Pay button, they can select a credit card. > After selecting a card, the frontend receives a Google Pay Token in the `onLoadPaymentData` event. This token is then used to call your backend API, which in turn requests order creation from the payment gateway.

## Google Pay Setup
### First, go to the [Google Pay Developer Platform](https://developers.google.com/pay/api), log in to your Google Developer account > Manage your integration through the console
![Google Pay developer page showing payment flow on phone and laptop](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/8RwFxVW.png)

### After enabling Google Pay, fill out the 'Business profile'
![Google Pay & Wallet Console business profile page showing identity and logo](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/YXrohbB.png)

### Google Pay API > Get started
![Google Pay API console page with integration overview and illustrations](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/NKP3v7V.png)

### Enter the website domain you want to integrate with Google Pay, and select 'Gateway' as the integration type
![Google Pay API web integration form with website URL field](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/jmXhAIG.png)

### Skip this step for now. After you've implemented the Google Pay page on your site, you'll need to submit screenshots for review according to the requirements. Once Google approves it, you can use the PRODUCTION environment.
![Google Pay API integration page with buyflow screenshot upload options](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/mC8mbLG.png)

### After submission, modifications will be locked, and a "pending review" notice will be displayed
![Google Pay integration pending review notification with stop icon](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/1e2Q13G.png)

## Now, Let's Move to the Frontend Website

### Install the Google Pay Button package
```
npm i @google-pay/button-react --save
```
### Write the code

```
  const googlePayProcessResult = (paymentData) => {
    return checkStock()  // 檢查庫存     
      .then((res) => {
        const paymentDataString = paymentData.paymentMethodData.tokenizationData.token;
        const paymentDataBase64 = btoa(paymentDataString);

        let param: IPaymentProcessRequest = { PaymentTokenObject: paymentDataBase64 };
        // call 自己的後端，並透過自己後端和金流商交易
        digitalProcessResult(param).then((res) => {
		  if(res.IsSuccess === true){
		    alert('交易成功')
		  } 		
		});
      });
  };

<GooglePayButton
environment="PRODUCTION" // 審核通過才能使用
buttonType="short"
paymentRequest={{
  apiVersion: 2,
  apiVersionMinor: 0,
  allowedPaymentMethods: [
    {
      type: 'CARD',
      parameters: {
        allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
        allowedCardNetworks: ['MASTERCARD', 'VISA'],
      },
      tokenizationSpecification: {
        type: 'PAYMENT_GATEWAY',
        parameters: {
          gateway: 'cybersource', 
          gatewayMerchantId: 'letgo_account', // cybersource 後台商戶號 ( 非 android 商戶號 )
        },
      },
    },
  ],
  merchantInfo: {
    merchantId: 'ABB121232', // google pay developer merchantId
    merchantName: 'LetGo',
  },
  transactionInfo: {
    totalPriceStatus: 'FINAL',
    totalPriceLabel: 'Total',
    totalPrice: numberFormat(degitalPayPrice, 2),
    currencyCode: 'USD',
    countryCode: 'US',
  },
}}
onLoadPaymentData={googlePayProcessResult}
/>
```
### The Google Pay Merchant ID (`merchantInfo.merchantId`) is very well hidden. Don't get it wrong; I wasted a lot of time because I entered it incorrectly.
![Google Pay console highlighting the hidden Merchant ID field](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/nDZoj9P.png)

### Payment Gateway Merchant ID (`gatewayMerchantId`)
![Cybersource UI showing Merchant ID input field outlined in red](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/bcNdo7g.png)

### Once the entire page implementation is complete and approved, you can start accepting payments. (It's quite efficient; you should receive an email within one to two days).
![Google Pay email requesting clarification on website product discrepancy](https://blog.markkulab.net/content/markku/posts/google-pay-on-web-cybersource-integration/images/iHkjr0y.png)

### Finally, implement the backend transaction API. Pass the Google Pay Token from the frontend to the Cybersource REST API to process the transaction.

## References
[Fast checkout on the web with Google Pay](https://developers.google.cn/codelabs/pay-web-checkout#0
)
[Integrating Google Pay on the Web](https://www.jianshu.com/p/661098c68762)
[Radial Payments & Fraud Documentation - Google Pay Web Integration](https://docs.radial.com/ptf/Content/Topics/payments/google-pay-web-integration.htm)
[How to Integrate GooglePay in React](https://www.pluralsight.com/guides/how-to-integrate-googlepay-in-react)

---

## About this article and its author

Originally published on [Mark Ku's Tech Notes](https://blog.markkulab.net/en/post/google-pay-on-web-cybersource-integration)

License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — when reusing or quoting, credit the author and link back to the original

### About the author

**[Mark Ku](https://blog.markkulab.net/en/author/mark-ku)** — Software Solution Provider

- 10+ years senior software engineer, now an AI Builder
- Focused on large-platform architecture — North-American e-commerce, AI SaaS subscription billing
- Combining AI Agents and automation to build evolvable product foundations

### Free tools built by the author

All of these are free to use:

- [Free PDF Sign Tool](https://blog.markkulab.net/en/tools/pdf-sign): Online PDF sign tool — draw, type, or upload a signature, then drag, resize, and download. Everything runs in your browser; nothing is uploaded.
- [VS Code Refactory](https://blog.markkulab.net/en/tools/refactory): Refactory is a VS Code refactoring extension: 34 actions plus a 37-rule code-smell inspection layer with a Code Health dashboard, across 18 languages, backed by 534 tests. It learns your repo's conventions: where interfaces live, where DI is registered, whether 'use client' belongs. It ranks files by git churn × complexity so you know what to fix first, and hands any smell to the Claude Code already on your machine. Free to use, and your source never leaves your computer.
- [DB-Kit Database Manager](https://blog.markkulab.net/en/tools/db-kit): DB-Kit is a lightweight, cross-platform database manager built with Tauri + Rust + React. Manage MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, SQLite, MongoDB, Redis, Kafka, Elasticsearch and RabbitMQ from one consistent interface: passwords encrypted in the OS keychain, SSH tunnels, full CRUD, a visual query builder, stacked multi-statement result sets, cross-connection data transfer and compare/sync, Excel / CSV import & export, visualized execution plans, ER diagrams, scheduled backups, SQL stress testing with p50–p99 latency percentiles, a 15-rule SQL review engine, Kafka message browsing with monitoring & alerts, a bilingual UI (Traditional Chinese / English), a built-in AI assistant (natural-language SQL, AI review and tuning advice) and the dbk CLI. Free and open source (MIT), with installers for Windows, macOS and Linux.
- [VS Code Super Mermaid](https://blog.markkulab.net/en/tools/super-mermaid): Super Mermaid is a VS Code extension for beautiful Mermaid diagrams out of the box: auto-colored live preview, mouse pan & zoom, high-res PNG / SVG export, 21 templates and multiple themes. Free and open source (MIT).
- [React Super Mermaid](https://blog.markkulab.net/en/tools/react-super-mermaid): react-super-mermaid is an open-source React component library: render beautiful Mermaid diagrams with a single <MermaidViewer>, with built-in colorful / sketch themes, pan & zoom, in-diagram search, and high-res SVG / PNG export. Lightweight, SSR-safe, fully typed. Free and open source (MIT).
- [Jira / Confluence Super Mermaid](https://blog.markkulab.net/en/tools/jira-super-mermaid): An Atlassian Forge app: write Mermaid syntax directly inside a Jira issue or a Confluence page and get flowcharts, sequence diagrams, state machines and Gantt charts. 11 diagram types, SVG / PNG export, light and dark themes, full CJK support. Runs on Atlassian: your diagrams live in your own site and the app calls no third-party service. Free, coming soon to the Atlassian Marketplace.
- [Mermaid Live Preview](https://blog.markkulab.net/en/tools/mermaid-preview): Write Mermaid in your browser, see it render instantly, and share the whole diagram as a single link. No sign-up, nothing uploaded to a server, and mermaid.live share links work as-is.
- [React Intl Phone Number](https://blog.markkulab.net/en/tools/react-intl-phone-number): react-intl-phone-number is an open-source React component: framework-agnostic and antd-free, with E.164 in/out, a searchable flag / country-code dropdown, configurable validation levels (strict / mobile-strict / loose), themeable CSS, and i18n — phone logic powered by google-libphonenumber. Lightweight and fully typed. Free and open source (MIT).
- [Uptime Kuma Cluster](https://blog.markkulab.net/en/tools/uptime-kuma-cluster): Turn single-node Uptime Kuma into a highly available cluster: OpenResty + Lua smart load balancing, shared MariaDB state, health checks and automatic failover, plus cluster-management REST APIs. One Docker Compose command to start. Free and open source (MIT).
- [Special Education](https://blog.markkulab.net/en/education): Learning materials crafted for special education students

### Daily podcasts

- [Mark's Tech Insights — Daily AI News](https://blog.markkulab.net/en/category/tech-news): Daily curated AI and tech trends. Catch the latest developments via audio summaries — covering AI applications, software architecture, DevOps, and engineering practice. — RSS: https://blog.markkulab.net/feed.xml
- [AI股市蝦聊](https://blog.markkulab.net/en/category/ai-stock-chat): Every trading day, an AI-analyzed take on the Taiwan stock market, delivered as a two-host conversation covering the session and the next-day outlook. — RSS: https://blog.markkulab.net/ai-stock-chat/feed.xml
- [開源好物週報](https://blog.markkulab.net/en/category/open-source-weekly): A weekly two-host pick of free open-source tools surfaced from real Hacker News, GitHub, and Reddit buzz — what pain they solve and the fastest way to get started. — RSS: https://blog.markkulab.net/open-source-weekly/feed.xml

### Newsletter

[Subscribe to the newsletter](https://blog.markkulab.net/en/subscribe) — Be the first to know about new posts. No spam, unsubscribe anytime.
