Vue GooglePay 配置

第一步加载 GooglePay.js
import { useHead } from "@unhead/vue";

useHead(
  {
    script: [
      {
        type: "text/javascript",
        src: `https://pay.google.com/gp/p/js/pay.js`,
        tagPosition: "bodyClose",
        async: true,
        onload: () => onGooglePay(),
      },
    ],
  },
  { mode: "client" },
);
第二步 GooglePay 参数信息
// 获取支付信息
const getPayMentInfo = async () => {
  try {
    let res: any = {};
    let parmes: any = { ... };
    res = await orderCreate(parmes); // 自己后端接口
    return res;
  } catch (error) {
    return error;
  }
};

let paymentsClient: any = null;
const getGooglePaymentsClient = () => {
  try {
    if (paymentsClient === null && !import.meta.env.SSR) {
      if (window["google"]) {
        paymentsClient = new window["google"].payments.api.PaymentsClient({
          environment: "PRODUCTION", // TEST 测试环境, PRODUCTION 线上环境
        });
      }
    }
    return paymentsClient;
  } catch (error: any) {
    console.log(error);
  }
};

const onGooglePay = () => {
  try {
    if (!import.meta.env.SSR) {
      paymentsClient = getGooglePaymentsClient();
      paymentsClient?.isReadyToPay(getGoogleIsReadyToPayRequest()).then((response: any) => {
        if (response.result) addGooglePayButton();
      }).catch((err: any) => {
        console.error(err);
      });
    }
  } catch (error: any) {
    console.log(error);
  }
};

const addGooglePayButton = () => {
  paymentsClient = getGooglePaymentsClient();
  const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });
  let googlePayDom: any = document.getElementById("google-pay-button");
  if (googlePayDom) googlePayDom.innerHTML = "";
  googlePayDom?.appendChild(button);
};

const onGooglePaymentButtonClicked = () => {
  try {

    let parmes: any = { ... };
    resData.value = await orderCreate(parmes); // 获取支付信息
    let googleTransactionInfo = { currencyCode: "USD", countryCode: "US", totalPriceStatus: "FINAL", totalPrice: "123.45" };
    const paymentDataRequest = getGooglePaymentDataRequest( googleTransactionInfo );
    const paymentsClient = getGooglePaymentsClient();
    paymentsClient
      .loadPaymentData(paymentDataRequest)
      .then((paymentData: any) => {
        let paymentToken = paymentData.paymentMethodData.tokenizationData.token;
        let cardNetwork = paymentData.paymentMethodData.info.cardNetwork;
        let payParme = { googleParam: { token: paymentToken, cartType: cardNetwork } };
        processPayment(payParme);
      })
      .catch((err: any) => {
        console.error(err);
      });
  } catch (error) {}
};

const processPayment = (payParme: any) => {
  try {
    let parmes = { orderNumber: "orderNumber", currency: "USD", ...payParme };
    orderPayment(parmes).then((res: any) => {  // 自己后端接口
      if (res?.success && res?.data) {
        router.push(`/pay/paySuccess`);
      }
    });
  } catch (error) {}
};
第三步 增加 页面元素
<div id="google-pay-button" class="w-full mt-3 mx-3"></div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值