Skip to content

GooglePay-纯API模式集成

该文档介绍纯API模式下,使用GooglePay的集成步骤。

纯API集成模式下,商户需要自行构建相关的支付页面,如:收银页、支付结果页等;此外,还需要商户进行复杂的证书配置以及加解密处理。因此,该模式需要商户投入更多的研发成本。

关于纯API集成模式的更多信息,请查看集成模式概览

1. 交互流程

2. 集成步骤

商户需要自己先获取Google Pay Token,解密Token得到卡信息,然后将解密后的卡信息传递给PayerMax。

要详细了解Google Pay付款请求,请参考:Google Pay Object Reference

注意:

若商户已在自己收银台集成过Google Pay,可直接按步骤2.2对接即可。

2.1 集成Google Pay

有关于Google Pay集成的信息,请首先参考 Google Pay API 指南

2.1.1 配置Google Pay商户账户

  1. 注册Google Pay Business Console

  2. 获取核心参数:

  • merchantId - 谷歌商户ID

  • paymentGatewayId - 支付网关ID

  1. 生成解密密钥:
# 生成ECDSA密钥对
openssl ecparam -genkey -name prime256v1 -noout -out google_pay_private.pem
openssl ec -in google_pay_private.pem -pubout -out google_pay_public.pem

2.1.2 客户端集成Google Pay支付

服务端提供支付配置参数供客户端初始化Google Pay。

js
const paymentsClient = new google.payments.api.PaymentsClient({
  environment: 'PRODUCTION' // 或 'TEST'
});

const paymentDataRequest = {
  apiVersion: 2,
  apiVersionMinor: 0,
  merchantInfo: {
    merchantId: 'YOUR_GOOGLE_MERCHANT_ID',
    merchantName: 'Your Store Name'
  },
  allowedPaymentMethods: [{
    type: 'CARD',
    parameters: {
      allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
      allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMEX']
    },
    tokenizationSpecification: {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        'gateway': 'companyA',
        'gatewayMerchantId': 'YOUR_COMPANY_A_MID'
      }
    }
  }],
  transactionInfo: {
    totalPrice: '99.99',
    totalPriceStatus: 'FINAL',
    currencyCode: 'USD'
  }
};

paymentsClient.loadPaymentData(paymentDataRequest)
  .then(paymentData => {
    // 获取加密Token
    const token = paymentData.paymentMethodData.tokenizationData.token;
    // 发送至商户服务端
    sendToServer({ googlePayToken: token });
  })
  .catch(err => console.error(err));

2.1.3 服务端解密Payment Token

2.2 调用PayerMax进行支付

创建支付/orderAndPay API 接口请求,其中关键字段:

  • paymentDetail.paymentMethodTypeGOOGLEPAY

  • paymentDetail.googlePayDetails:为解密后的支付信息

接口请求示例:

GooglePay Token解密后的卡信息,传递给data.paymentDetail.googlePayDetails字段中。

json
{
  "version": "1.4",
  "keyVersion": "1",
  "requestTime": "2022-02-25T09:23:06.473+00:00",
  "appId": "6666c8b036a24579974497c2f9800001",
  "merchantNo": "020213834421284",
  "data": {
    "outTradeNo": "Test1645780876511",
    "subject": "this is subject",
    "totalAmount": 1,
    "currency": "AED",
    "country": "AE",
    "userId": "userId001",
    "integrate": "Direct_Payment",
    "expireTime": "1800",
    "paymentDetail": {
      "paymentMethodType": "GOOGLEPAY",
      "buyerInfo": {
        "firstName": "James",
        "lastName": "Smith",
        "phoneNo": "903124360628",
        "email": "james@google.com",
        "clientIp": "124.156.108.193",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
      },
      "googlePayDetails": {
        "authMethod": "CRYPTOGRAM_3DS",
        "cardHolderFullName": "cryptogram googlePayDetails cardHolderFullName",
        "cardNetwork": "",
        "expirationMonth": "01",
        "expirationYear": "2029",
        "pan": "3604241234569621",
        "description": ""
    },
    "goodsDetails": [
      {
        "goodsId": "D002",
        "goodsName": "Key buckle",
        "quantity": "2",
        "price": "0.5",
        "goodsCurrency": "AED",
        "showUrl": "http://ttt.com",
        "goodsCategory": "电脑"
      }
    ],
    "shippingInfo": {
      "firstName": "James",
      "lastName": "Smith",
      "phoneNo": "903124360628",
      "email": "James@google.com",
      "address1": "GOLGELI SOKAK NO.34, 06700",
      "city": "GAZIOSMANPASA/ANKAR",
      "country": "TR",
      "zipCode": "06700"
    },
    "billingInfo": {
      "firstName": "James",
      "lastName": "Smith",
      "phoneNo": "903124360628",
      "email": "James@google.com",
      "address1": "GOLGELI SOKAK NO.34, 06700",
      "city": "GAZIOSMANPASA/ANKAR",
      "country": "TR",
      "zipCode": "06700"
    },
    "riskParams": {
      "registerName": "lily",
      "regTime": "2023-07-01 12:08:34",
      "liveCountry": "VN",
      "payerAccount": "987654XXX",
      "payerName": "lily",
      "taxId": "1234567890"
    },
    "language": "en",
    "reference": "020213827524152",
    "terminalType": "WAP",
    "frontCallbackUrl": "https://xxx.com",
    "notifyUrl": "https://yyy.com"
  }
}

接口响应示例:

json
{
  "code": "APPLY_SUCCESS",
  "msg": " Success.",
  "data": {
    "outTradeNo": "a1234934974321",
    "tradeToken": "T2025051210335071234567",
    "status": "SUCCESS"
  }
}

此页面的内容有帮助吗?

感谢您帮助改进 PayerMax 产品文档!

Last updated:

Released under the MIT License.