Skip to content

Google Pay™

准备工作

Google Pay™ 网页集成指南

如果您打算通过 Google Pay™ 进行集成,必须在连接本接口之前完成 Google Pay 要求的准备工作。详细要求请参阅 Google Pay 集成文档。

如果您向客户提供 Google Pay 作为支付方式,必须按照 Google Pay 网页品牌指南 使用官方的 Google Pay 标志和按钮素材,不得修改 Google Pay 素材的颜色、比例或外观。

您需要基于 Google Pay 网页开发者文档Google Pay 网页集成检查清单Google Pay 网页品牌指南 将网页应用与 Google Pay API 集成,获取相应的支付令牌,并提交到我们的接口。

集成 Google Pay 时,您需要遵守 Google Pay 和钱包 API 可接受使用政策 并接受 Google Pay API 服务条款 中定义的条款。

我们在 Google Pay API 中支持 VISA、Mastercard、American Express 和 JCB 卡组织。您可以在 allowedCardNetworks 属性中定义这些值,并在 Google Pay 网页开发者文档 中找到适当的值。

Google Pay 需要账单地址,请确保包含必要的参数。更多详情,请参阅 BillingAddressParameters

账单地址请求示例:

json
"allowedPaymentMethods": [
 {
 "type": "CARD",
 "parameters": {
 "billingAddressRequired": true,
 "billingAddressParameters": {
 "phoneNumberRequired": true,
 "format": "MIN"
 },
 "allowedCardNetworks": ["VISA","MASTERCARD","AMEX","JCB"],
 "allowedAuthMethods": ["PAN_ONLY","CRYPTOGRAM_3DS"]
 },
 "tokenizationSpecification": {...}
 }
]

满足集成条件后,请在 Google 商家控制台 上完成注册。

准备 gateway 和 gatewayMerchantId

我们为 Google Pay 提供网关集成支持;我们代表您处理解密。

当您作为商家与 Google Pay API 集成时,请确保在 TokenizationSpecification 对象中设置以下值:

  • gateway: fireantpay

  • gatewayMerchantId : 在商户平台中,商户 > 商户信息 部分,您可以找到 gatewayMerchantId

TokenizationSpecification 中设置。

json
"tokenizationSpecification": {
 "type": "PAYMENT_GATEWAY",
 "parameters": {
 "gateway": "fireantpay",
 "gatewayMerchantId": "<YOUR_GATEWAY_MERCHANT_ID>"
 }
}

Google Pay™ 交易的 3DS 要求

Google Pay 提供两种不同的 授权方式:PAN_ONLY 和 CRYPTOGRAM_3DS。

我们与 Google Pay 的集成支持两种类型的卡凭证:

  • PAN_ONLY:存储在 Google Pay™ 中的实体卡详情。

  • 需要 3DS:是,适用标准 3DS 流程。

  • 支持国家/地区:欧洲、美国和加拿大。

  • CRYPTOGRAM_3DS:存储在设备上的令牌化虚拟卡。

  • 需要 3DS:否,由 Google Pay™ 执行认证。

  • 支持国家/地区:仅限美国。

对于 PAN_ONLY 交易,如果交易受 PSD2 约束(例如在欧洲经济区/英国),则需要 3DS 认证。当需要 3DS 认证时,接口响应中的 redirectUrl 字段将返回 3DS 认证 URL。商户需要将用户的浏览器重定向到此 URL,引导他们完成 3DS 认证流程。认证完成后,交易结果将通过 notifyUrl 通知商户,并通过 returnUrl 重定向回商户网店。

支付请求

支付接口请求

  • 按照示例格式填写相关信息。
  • 使用下表中的确切字段名提交字段;参数名区分大小写
  • 发送到本系统网关的所有命令使用 POST 方法和 UTF-8 编码。
  • 在组合、加密和提交支付参数之前,去除每个参数值的首尾空格

支付流程

Google Pay

本接口使用服务器到服务器集成(不是浏览器表单提交)。在整个支付过程中,浏览器 URL 保持不变

1.付款人在商户店铺(如 SHOPLINE)选择商品并进入支付流程。

2.商户客户端检查设备/浏览器是否支持 Google Pay。如果支持,则启动 Google Pay;如果不支持,则回退到其他支付方式。

3.付款人点击 Google Pay 按钮并从列表中选择信用卡进行支付。Google Pay 服务器生成加密支付数据包并返回给商户客户端。然后商户将加密数据提交给 Fireantpay 完成流程。

4.商户客户端将支付数据和订单信息提交给 Fireantpay(支付服务提供商)。后端组装请求并提交到本接口。

5.如果 PAN_ONLY 模式触发 3D 安全认证,您需要重定向到 redirectUrl 完成验证。如果使用 CRYPTOGRAM_3DS 模式,则不需要 3D 安全认证。

6.交易成功后,Fireantpay 异步通知商户交易结果。

7.如果商户未收到 Fireantpay 的交易回调且订单状态未知,商户必须调用 Fireantpay 的单笔订单查询接口检查交易结果。

表单参数格式说明

参数名类型长度必填说明
订单信息
merNo字符串5商户号;支付平台分配的唯一 ID
gatewayNo字符串8网关接入号;商户接入的唯一 ID
orderNo字符串50店铺订单号;唯一,同一店铺系统中不重复
orderCurrency字符串3支付币种(3 位 ISO 4217 代码;见附录)
orderAmount字符串10订单总金额;2 位小数,需要时四舍五入
shipFee字符串100运费;数字,最多 2 位小数
discount字符串100折扣;默认为负数,数字,最多 2 位小数
goodsInfo字符串5000商品详细信息;见附录:商品信息
信用卡信息
tradeType字符串50交易类型;固定值:GOOGLEPAY(钱包支付必需)
cardToken字符串500Google Pay JS 生成的支付数据。支付数据示例
用户信息
firstName字符串100名字
lastName字符串50姓氏
email字符串200用户邮箱
ip字符串100用户 IP 地址
phone字符串50用户电话
country字符串100用户国家(ISO 3166-1 2 位代码,如 US
state字符串100用户州/省
city字符串100用户城市
address字符串500用户详细地址
zip字符串100用户邮编
收货人信息
shipFirstName字符串100收货人名字
shipLastName字符串100收货人姓氏
shipEmail字符串100收货人邮箱
shipPhone字符串100收货人电话
shipCountry字符串100收货人国家(ISO 3166-1 2 位代码)
shipState字符串100收货人州/省
shipCity字符串100收货人城市
shipAddress字符串100收货人详细地址
shipZip字符串100收货人邮编
设备/操作系统信息
os字符串50持卡人操作系统
brower字符串50浏览器类型
browerLang字符串50浏览器语言
timeZone字符串50时区
resolution字符串50屏幕分辨率
其他信息
webSite字符串200来源网站域名
notifyUrl字符串200异步通知 URL;平台 POST 结果到此地址;回复 OK异步通知示例
returnUrl字符串200实时返回 URL;用于 3D 安全重定向
signInfo字符串32SHA256 签名;固定顺序merNo+gatewayNo+orderNo+orderCurrency+orderAmount+tradeType+cardToken+merKey;无空格或 +。详情见附录:SHA256 签名方法
remark字符串500商户自定义备注(原样返回)


支付接口响应

接口说明

接收并处理商户订单后,网关以 UTF-8 编码XML 格式实时返回支付结果。

返回数据说明

先解析 XML 响应,然后判断支付结果。见以下示例。

表单参数格式说明

参数名类型最大长度说明
merNo字符串5商户号
gatewayNo字符串8网关接入号
tradeNo字符串50平台交易流水号(唯一)
orderNo字符串50商户订单号
orderCurrency字符串3订单币种(ISO 4217)
orderAmount字符串10订单金额
orderStatus字符串1交易状态:-1=待处理 0=失败 1=成功 5=失败(3D 放弃)
orderInfo字符串100交易结果信息
billAddress字符串100账单描述符(仅成功时返回)
returnType字符串1返回类型:1(浏览器实时)2(服务器实时)3(服务器异步)
orderErrorCode字符串50错误代码;00 = 成功
signInfo字符串32SHA256 签名:merNo+gatewayNo+tradeNo+orderNo+orderCurrency+orderAmount+orderStatus+orderInfo+merKey
remark字符串500商户备注(原样返回)
redirectUrl字符串5003D 安全重定向 URL

支付返回示例

当使用 PAN_ONLY 类型且需要 3DS 认证时,响应示例如下:

xml
<?xml version="1.0" encoding="UTF-8"?>
<respon>
<merNo>80000</merNo>
<gatewayNo>80000001</gatewayNo>
<tradeNo>N025050101235959566838</tradeNo>
<orderNo>Test-123456</orderNo>
<orderAmount>10.00</orderAmount>
<orderCurrency>USD</orderCurrency>
<orderStatus>-1</orderStatus>
<orderErrorCode></orderErrorCode>
<orderInfo></orderInfo>
<returnType>2</returnType>
<billAddress>Test Descriptor</billAddress>
<signInfo>B359F45698D1CE8A341C64815D346C9EDA8F14657D997901EA4D30FFODFC232A</signInfo>
<remark></remark>
<redirectUrl>http://sandbox.fireantpay.com/ccpg/threeDSProcessingPage?threeDSToken=92095B5D2549DC544625F8B432D47A63</redirectUrl>
</respon>

当不需要 3DS 认证时,响应示例如下:

xml
<?xml version="1.0" encoding="UTF-8"?>
<respon>
<merNo>80000</merNo>
<gatewayNo>80000001</gatewayNo>
<tradeNo>N025050101235959566838</tradeNo>
<orderNo>Test-123456</orderNo>
<orderAmount>10.00</orderAmount>
<orderCurrency>USD</orderCurrency>
<orderStatus>1</orderStatus>
<orderErrorCode>00</orderErrorCode>
<orderInfo>Approved</orderInfo>
<returnType>2</returnType>
<billAddress>Test Descriptor</billAddress>
<signInfo>B359F45698D1CE8A341C64815D346C9EDA8F14657D997901EA4D30FFODFC232A</signInfo>
<remark></remark>
<redirectUrl></redirectUrl>
</respon>

异步通知示例

clojure
Content-Type: application/x-www-form-urlencoded

merNo=80000&gatewayNo=80000001&tradeNo=N025050101235959566838&orderNo=Test-123456&orderAmount=10.00&orderCurrency=USD&orderStatus=1&orderErrorCode=00&orderInfo=Approved&returnType=2&billAddress=Test%20Descriptor&signInfo=B359F45698D1CE8A341C64815D346C9EDA8F14657D997901EA4D30FFODFC232A&remark=&redirectUrl=

常见错误

I0013:签名值(signInfo)错误

  • 检查 merKey 的正确性和大小写一致性。
  • 使用 SHA256 签名。
  • 去除组合参数的所有首尾空格

I0014:测试网关接入号 → 生产支付网关

  • 开发期间使用测试网关
  • 测试完成后联系客服将商户号切换到生产环境

I0015:生产网关接入号 → 测试支付网关

  • 切换到生产环境后,将代码中的提交 URL 更新为生产端点。

E0008:重复支付

  • 短时间内(约 30 秒)多次提交同一订单将被阻止,以防止重复支付。

附录

商品信息

格式(固定顺序):

商品名称#,#商品ID#,#单价#,#数量#;#下一个商品...
  • 字段之间用 #,# 分隔
  • 商品之间用 #;# 分隔
  • 空值用 0 表示
  • 币种与订单币种一致
  • 所有符号为半角

示例:

商品1#,#ID1#,#10.00#,#2#;#商品2#,#ID2#,#15.50#,#1

交易币种 ISO 4217

代码英文说明中文说明
CNYChinese Yuan人民币
USDUS Dollar美元
HKDHong Kong Dollar港币
GBPPound Sterling英镑
JPYJapanese Yen日元
EUREuro欧元
AUDAustralian Dollar澳元
SGDSingapore Dollar新加坡元
NZDNew Zealand Dollar新西兰元
TWDNew Taiwan Dollar台币
KRWSouth Korean Won韩元
DKKDanish Krone丹麦克朗
MYRMalaysian Ringgit马币
THBThai Baht泰铢
INRIndian Rupee印度卢比
PHPPhilippine Peso菲律宾比索
CHFSwiss Franc瑞士法郎
SEKSwedish Krona瑞典克朗
ILSIsraeli New Shekel新谢克尔
ZARSouth African Rand兰特
RUBRussian Ruble卢布
NOKNorwegian Krone挪威克朗
AEDUAE Dirham迪拉姆
ARSArgentine Peso阿根廷比索
BRLBrazilian Real巴西雷亚尔
MMKMyanmar Kyat缅币
CADCanadian Dollar加元
COPColombian Peso哥伦比亚比索
HUFHungarian Forint匈牙利福林
IDRIndonesian Rupiah印尼卢比
KWDKuwaiti Dinar科威特第纳尔
LAKLaotian Kip老挝基普
MXNMexican Peso墨西哥比索
NGNNigerian Naira尼日利亚奈拉
PLNPolish Złoty波兰兹罗提
QARQatari Riyal卡塔尔里亚尔
SARSaudi Riyal沙特里亚尔
TRYTurkish Lira新土耳其里拉
VNDVietnamese Dong越南盾

错误列表

代码说明
I0001商户号不能为空
I0002网关号不能为空
I0003加密值不能为空
I0004商户号和网关号不匹配
I0005商户号未激活
I0006商户号已禁用
I0007商户号不存在
I0008商户状态异常
I0009网关接入号未激活
I0010网关接入号已禁用
I0011网关接入号已删除
I0012网关状态异常
I0013signInfo 无效
I0014测试网关 → 生产接口
I0015生产网关 → 测试接口
I0016网关未绑定到此接口
I0017订单号不能为空
I0018订单号超过 50 个字符
I0019订单金额不能为空
I0020订单金额无效
I0021金额必须有 ≤2 位小数且 ≥0
I0022币种不能为空
I0023币种无效
I0024返回 URL 不能为空
I0025返回 URL 超过 1000 个字符
I0059缺少必需参数
I0060参数长度无效
I0061此订单在 24 小时内已有成功交易
I0062系统异常
I0067备注超过 500 个字符
I0068双方验证失败
I0069请选择支付方式
I0070请选择支付类型
I0071IP 不能为空
I0072IP 格式无效
I0092支付方式无效
I0115订单未找到
I0132交易类型不能为空
I0133交易类型无效
I0134Appid 不能为空
I0135Openid 不能为空
I0136商品信息不能为空
R0000高风险
R0001网站未提交/未审批
R0002跨境交易
C0001网关未绑定到渠道
C0002费率未设置
E0001操作超时
E0008重复支付
T0001测试支付成功
U0001持卡人取消

SHA256 签名方法

Java

java
signInfo=sha256(merNo+gateWayNo+orderNo+orderCurrency+orderAmount+tradeType+cardToken+merKey);

PHP

php
$signInfo=hash("sha256",$merNo.$gateWayNo.$orderNo.$orderCurrency.$orderAmount.$tradeType.$cardToken.$merKey);

Google Pay 支付数据

您需要参考 Google 的 教程 获取支付数据。支付数据包含我们需要的支付令牌和其他数据。您需要将整个支付数据传递给我们。

js
//参考 Google 教程的第 9 步,您可以通过 paymentsClient 获取支付数据。
paymentsClient.loadPaymentData(paymentDataRequest).then(function(paymentData){
 // 请将整个支付数据作为我们接口中的 cardToken 参数传递给我们。
 const cardToken = JSON.stringify(paymentData);
}).catch(function(err){
 // 在开发者控制台中显示错误以便调试
 console.error(err);
});

Google Pay 支付数据示例

json
{
 "apiVersion": 2,
 "apiVersionMinor": 0,
 "paymentMethodData": {
 "description": "Test Card: Visa •••• 1111",
 "info": {
 "assuranceDetails": {
 "accountVerified": true,
 "cardHolderAuthenticated": false
 },
 "cardDetails": "1111",
 "cardFundingSource": "CREDIT",
 "cardNetwork": "VISA"
 },
 "tokenizationData": {
 "token": "{\"signature\":\"MEYCIQDevxpK7wCKIeKWSctph5XaFHIliZny8XLaCbJjYTPe/QIhANTTPQXZhbXqdeDAGdm+TVzmeSNIpGg8584x28AlCvCR\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEwYHeJFV5RiBvt2N2wNy6A\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1775121013140\\\"}\",\"signatures\":[\"MEQCICGh1LYitMMNCb+2i+iIP8QR/0lCbwaIeorsHOQtLCGLAiBeKWML5diXND6eWSyREpsWr/g7shRhJKe2aovJqPO2zg\\u003d\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"gv+gp98+2UtJbC8UCXtGni8Tu7Y\"}\"}",
 "type": "PAYMENT_GATEWAY"
 },
 "type": "CARD"
 }

支付提交示例 PHP

php
$data = array(
 'merNo' => $merNo,
 'gatewayNo' => $gatewayNo,
 'orderNo' => $orderNo,
 'orderAmount' => $orderAmount,
 'orderCurrency' => $orderCurrency,
 'shipFee' => $shipFee,
 'firstName' => $firstName,
 'lastName' => $lastName,
 'email' => $email,
 'phone' => $phone,
 'zip' => $zip,
 'address' => $address,
 'city' => $city,
 'state' => $state,
 'country' => $country,
 'shipFirstName' => $shipFirstName,
 'shipLastName' => $shipLastName,
 'shipPhone' => $shipPhone,
 'shipEmail' => $shipEmail,
 'shipCountry' => $shipCountry,
 'shipState' => $shipState,
 'shipCity' => $shipCity,
 'shipAddress' => $shipAddress,
 'shipZip' => $shipZip,
 'returnUrl' => $returnUrl,
 'notifyUrl' => $notifyUrl,
 'shipMethod' => $shipMethod,
 'signInfo' => $signInfo,
 'cardToken' => $cardToken,
 'tradeType' => $tradeType,
 'ip' => $ip,
 'os' => $os,
 'brower' => $brower,
 'browerLang' => $browerLang,
 'timeZone' => $timeZone,
 'resolution' => $resolution,
 'goodsInfo' => $goodsInfo
);

// 通过 CURL 提交到 FireAnt 支付网关
$result = curl_post('https://sandbox.fireantpay.com/TPInterface', http_build_query($data));
$xmlstring = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);
$value_array = json_decode(json_encode($xmlstring), true);

// 如果令牌类型为 PAN_ONLY,用户需要完成 3DS 认证。
// redirectUrl 字段将提供 3DS 认证 URL。
// 您需要在浏览器中重定向到此 URL,让用户完成 3DS 认证。
if (!empty($value_array['redirectUrl'])) {
 header('Location:'.$value_array['redirectUrl']);
 exit;
}

// 获取订单状态
$orderStatus = $value_array['orderStatus'];
if ($orderStatus == "1") {
 echo "支付成功";
}