使用 Google Pay API 集成 Web 应用

本教程将指导您如何将 Google Pay API 集成到您的 Web 应用中,以支持支付卡交易。以下是步骤简要概述和详细解释。

步骤概述

  1. 指定 Google Pay API 版本
  2. 选择支付令牌化方法
  3. 指定支持的支付卡网络
  4. 说明允许的付款方式
  5. 加载 Google Pay API JavaScript 库
  6. 检查 Google Pay 支持
  7. 添加 Google Pay 付款按钮
  8. 创建 PaymentDataRequest 对象
  9. 注册用户手势事件处理程序
  10. 可选:预取付款数据
  11. 可选:设置授权付款
  12. 可选:动态价格更新
  13. 可选:设置促销代码

详细步骤

1. 指定 Google Pay API 版本

javascript 复制代码
const baseRequest = {
  apiVersion: 2,
  apiVersionMinor: 0
};

2. 选择支付令牌化方法

使用 PAYMENT_GATEWAY 令牌化类型是最常见的方法。您需要指定网关和网关商户 ID。

javascript 复制代码
const tokenizationSpecification = {
  type: 'PAYMENT_GATEWAY',
  parameters: {
    'gateway': 'example',
    'gatewayMerchantId': 'exampleGatewayMerchantId'
  }
};

3. 指定支持的支付卡网络

javascript 复制代码
const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];

4. 说明允许的付款方式

javascript 复制代码
const baseCardPaymentMethod = {
  type: 'CARD',
  parameters: {
    allowedAuthMethods: allowedCardAuthMethods,
    allowedCardNetworks: allowedCardNetworks
  }
};

const cardPaymentMethod = Object.assign(
  {},
  baseCardPaymentMethod,
  {
    tokenizationSpecification: tokenizationSpecification
  }
);

5. 加载 Google Pay API JavaScript 库

html 复制代码
javascript 复制代码
const paymentsClient = new google.payments.api.PaymentsClient({environment: 'TEST'});

6. 检查 Google Pay 支持

javascript 复制代码
const isReadyToPayRequest = Object.assign({}, baseRequest);
isReadyToPayRequest.allowedPaymentMethods = [baseCardPaymentMethod];

paymentsClient.isReadyToPay(isReadyToPayRequest)
  .then(function(response) {
    if (response.result) {
      addGooglePayButton();
    }
  })
  .catch(function(err) {
    console.error(err);
  });

7. 添加 Google Pay 付款按钮

javascript 复制代码
function addGooglePayButton() {
  const button = paymentsClient.createButton({
    onClick: onGooglePaymentButtonClicked,
    allowedPaymentMethods: [baseCardPaymentMethod]
  });
  document.getElementById('container').appendChild(button);
}

8. 创建 PaymentDataRequest 对象

javascript 复制代码
const paymentDataRequest = Object.assign({}, baseRequest);
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
paymentDataRequest.transactionInfo = {
  totalPriceStatus: 'FINAL',
  totalPrice: '123.45',
  currencyCode: 'USD',
  countryCode: 'US'
};
paymentDataRequest.merchantInfo = {
  merchantName: 'Example Merchant',
  merchantId: '12345678901234567890'
};

9. 注册用户手势事件处理程序

javascript 复制代码
function onGooglePaymentButtonClicked() {
  paymentsClient.loadPaymentData(paymentDataRequest)
    .then(function(paymentData) {
      processPayment(paymentData);
    })
    .catch(function(err) {
      console.error(err);
    });
}

function processPayment(paymentData) {
  paymentToken = paymentData.paymentMethodData.tokenizationData.token;
}

10. 可选:预取付款数据

javascript 复制代码
paymentsClient.prefetchPaymentData(paymentDataRequest);

11. 可选:设置授权付款

javascript 复制代码
function onPaymentAuthorized(paymentData) {
  return new Promise(function(resolve, reject) {
    processPayment(paymentData)
      .then(function() {
        resolve({transactionState: 'SUCCESS'});
      })
      .catch(function() {
        resolve({
          transactionState: 'ERROR',
          error: {
            intent: 'PAYMENT_AUTHORIZATION',
            message: 'Insufficient funds',
            reason: 'PAYMENT_DATA_INVALID'
          }
        });
      });
  });
}

12. 可选:动态价格更新

javascript 复制代码
function onPaymentDataChanged(intermediatePaymentData) {
  // 处理送货地址和运费选项的变化
}

13. 可选:设置促销代码

javascript 复制代码
function onPaymentDataChanged(intermediatePaymentData) {
  // 处理促销代码的应用
}

通过这些步骤,您可以成功集成 Google Pay API 到您的 Web 应用中,支持支付卡交易,并提供更便捷的支付体验。

相关推荐
AronTing13 分钟前
观察者模式:从博客订阅到消息队列的解耦实践
后端·设计模式
用户243155970862115 分钟前
学习记录:在 Spring Webflux 下调用大模型(以DeepSeek为例)
后端
易元17 分钟前
责任链模式实践:电商登录校验的演变
后端·设计模式
Aska_Lv18 分钟前
线上问题---又又又又来生产事故了,有人要倒霉了
后端
大大怪小小酥22 分钟前
蚂蚁的sofa技术栈与spring技术栈区别
后端
AronTing26 分钟前
组合模式实战:用树形结构管理企业组织与文件系统
后端·设计模式·面试
敖云岚35 分钟前
【AI】SpringAI 第二弹:接入 DeepSeek 官方服务
java·人工智能·spring boot·后端·spring
eternal__day1 小时前
MyBatis-Plus 详解:快速上手到深入理解
java·spring boot·后端·spring·java-ee·maven·mybatis
radient1 小时前
线上CPU飙升问题如何排查 - Java版
后端
AronTing1 小时前
享元模式:如何通过对象共享实现亿级系统的内存优化
后端·设计模式