集成 Google Pay 订阅支付
订阅支付是一种周期性自动扣款解决方案,可以帮助您完成周期性自动收款。仅需一次授权即可绑定支付账户享受持续的订阅服务,且支持动态调整订阅配置(如修改周期/金额、取消续订或终止服务等)。整个流程既便捷高效,又安全可靠。
本文主要针对 Google Pay 支付方式进行集成说明。通过 Google Pay 服务,买家可以使用存储在其 Google Pay 账户中的信用卡或借记卡进行支付。采用 Native API 方式时,商户前端需直接集成 Google Pay SDK,获取卡资产信息后调用 Antom 的 pay(单笔支付)接口发起支付。有关 Google Pay SDK 的集成说明,请参见 Google Pay for Payments (Web) 或 Google Pay for Payments (Android)。
用户体验
以下图片展示了集成 Google Pay 进行支付的用户体验:
Web 端
Mobile 端


支付流程
您可以选择以下两种解密方式对获取的 paymentToken 进行解密,对应的支付流程也不同:
- 托管解密:由 Antom 负责证书管理和解密操作,您无需具备 PCI 资质。
- 商户解密:您自行管理证书并执行解密操作,您需具备相应的 PCI 资质。
以下图片展示了集成 Google Pay 订阅支付的流程:
托管解密
商户解密
首次订阅
后续扣款
以下为 Antom 托管解密 paymentToken 的首次订阅支付流程示意图:

以下为 Antom 托管解密 paymentToken 的后续扣款的支付流程示意图:

集成准备
- 已获得 client ID。
- 已完成密钥配置。
- 已完成异步通知接收地址的配置。
- 集成服务端 SDK 资源包,并完成接口库安装及请求示例初始化。具体操作请参阅服务端 SDK。
集成步骤
请按照以下步骤开始集成:
- 获取 paymentToken
- 创建订阅支付请求
- (可选)跳转至 3D 验证页面
- 授权结果通知
- 请款并获取请款结果
- 获取订阅通知
步骤 1:获取 paymentToken
步骤 2:创建订阅支付请求 服务端
在您集成 Google Pay SDK 后,请使用 Antom 在 Google Pay 的配置进行交互。Antom 在 Google Pay 的收单机构信息如下:
以下是进行交互的示例代码:
Web
const tokenizationSpecification = {
type: 'PAYMENT_GATEWAY',
parameters: {
'gateway': "alipayintl",
'gatewayMerchantId': "2188XXXXXXXX" //商户在 Antom 入驻相应环境(PROD/SANBOX)的 merchant id
}
};Android
private static JSONObject getGatewayTokenizationSpecification() throws JSONException {
return new JSONObject() {{
put("type", "PAYMENT_GATEWAY");
put("parameters", new JSONObject() {{
put("gateway", "alipayintl");
put("gatewayMerchantId", "2188XXXXXXXX"); //商户在 Antom 入驻相应环境(PROD/SANBOX)的 merchant id
}});
}};
}您获取到 paymentToken 并托管 Antom 解密后,请使用 Antom 卡的授权支付能力发起支付。您可以通过 pay(单笔支付)的 paymentMethod.paymentMethodMetaData.googlePayConfiguration 参数传入解密的 paymentToken。
public static void payByGooglePayServer2Server() {
AlipayPayRequest alipayPayRequest = new AlipayPayRequest();
alipayPayRequest.setProductCode(ProductCodeType.CASHIER_PAYMENT);
// 替换为您的 paymentRequestId
String paymentRequestId = UUID.randomUUID().toString();
alipayPayRequest.setPaymentRequestId(paymentRequestId);
// 设置订阅信息
SubscriptionInfo subscriptionInfo = new SubscriptionInfo();
subscriptionInfo.setSubscriptionDescription("Subscription test");
LocalDateTime localNow = LocalDateTime.now();
OffsetDateTime offsetDateTime = localNow.atOffset(ZoneOffset.of("+08:00"));
String startTime = offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
subscriptionInfo.setSubscriptionStartTime(startTime);
subscriptionInfo.setSubscriptionNotifyUrl("https://www.yourDomain.com/subscription/notify");
PeriodRule periodRule = new PeriodRule();
periodRule.setPeriodType("MONTH");
periodRule.setPeriodCount(1);
subscriptionInfo.setPeriodRule(periodRule);
alipayPayRequest.setSubscriptionInfo(subscriptionInfo);
// 设置金额
Amount amount = Amount.builder().currency("SGD").value("4200").build();
alipayPayRequest.setPaymentAmount(amount);
// settlementStrategy
SettlementStrategy settlementStrategy = SettlementStrategy.builder().settlementCurrency("SGD").build();
alipayPayRequest.setSettlementStrategy(settlementStrategy);
// 设置支付方式
PaymentMethod paymentMethod = PaymentMethod.builder().paymentMethodType("GOOGLEPAY").build();
alipayPayRequest.setPaymentMethod(paymentMethod);
// 设置 Google Pay 的相关参数 --托管解密
Map<String, String> googlePayToken = new HashMap<>();
googlePayToken.put("googlePayToken", "googlePay token");
Map<String, Object> paymentMethodMetaData = new HashMap<>();
paymentMethodMetaData.put("googlePayConfiguration", googlePayToken);
paymentMethodMetaData.put("is3DSAuthentication", false);
paymentMethod.setPaymentMethodMetaData(paymentMethodMetaData);
// 替换为您的 orderId
String orderId = UUID.randomUUID().toString();
// 设置买家信息
Buyer buyer = Buyer.builder().referenceBuyerId("yourBuyerId").build();
// 设置订单信息
Order order = Order.builder().referenceOrderId(orderId)
.orderDescription("antom testing order").orderAmount(amount).buyer(buyer).build();
alipayPayRequest.setOrder(order);
// 设置设备环境信息
Env env = Env.builder().terminalType(TerminalType.WEB).clientIp("1.2.3.4").build();
alipayPayRequest.setEnv(env);
// 设置授权请款模式
PaymentFactor paymentFactor = PaymentFactor.builder().isAuthorization(true).build();
alipayPayRequest.setPaymentFactor(paymentFactor);
// 替换为您的通知地址
alipayPayRequest.setPaymentNotifyUrl("https://www.yourNotifyUrl.com");
// 替换为您的跳转地址
alipayPayRequest.setPaymentRedirectUrl("https://www.yourMerchantWeb.com");
// 支付
AlipayPayResponse alipayPayResponse = null;
try {
alipayPayResponse = CLIENT.execute(alipayPayRequest);
} catch (AlipayApiException e) {
String errorMsg = e.getMessage();
// 处理错误情况
}
}以下代码显示了请求报文的示例:
{
"env": {
"clientIp": "1.2.3.4",
"terminalType": "WEB"
},
"order": {
"buyer": {
"referenceBuyerId": "yourBuyerId"
},
"orderAmount": {
"currency": "SGD",
"value": "4200"
},
"orderDescription": "antom testing order",
"referenceOrderId": "2a7772b2-4eae-43cf-8f1a-07c8dec3****"
},
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentFactor": {
"isAuthorization": true
},
"paymentMethod": {
"paymentMethodMetaData": {
"is3DSAuthentication": true,
"googlePayConfiguration": {
"googlePayToken": "{\"signature\":"MEQCIB1/pqJy8Z7565NKYN8Mx+Rl57M0xVPOKAnuLdSpm/RaAiAH8t+q+aJA9KAOXXnyFVU13qJ2J4Uuhu2iggNd6hgJnw\u003d\u003d","intermediateSigningKey":{"signedKey":"{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKWkTmXgqxeLpsCa4POKjunH+b4aIdKOr37TJAn1a0x8gduKJy8UJSCoDU****ASHYmQoWA8TDr+Gq0Ie8pA9LoA\\u003d\\u003d\",\"keyExpiration\":\"1774047508238\"}","signatures":["MEUCIQDa+BMhD7nmJq2xaf6uJnV+2fx8B4s1XGaJXF/zG4w9pQIgIdDlhrBarzgbuWSmYpiemS92jy9zxK3UJguJsfaPWrQ\u003d"]},"protocolVersion":"ECv2","signedMessage":"{\"encryptedMessage\":\"DMJ8HqrPreS67BYJseOLUlox42ZFpgmbv/wU5a1JMS0KdawwC7JmDrvm57Ysot3VxmG0jZwVd54Ru78Z22j5lGd8W145sgI30gIWgRHT1ru9yt/lTdLuJExNeNUGGjrSUPBHinGy4sOILFWGRilNtuQaftt0NHnuPEEUUb1GdN/8+J5RNxNLXFI7AFlaC5tCrDshLsh3K1pzLSVK024B5Q+LbZxaWeiOygZ7OJqWzpFuUg6i2GOdXEOW8hrNv2dUHa7Jn07+G2xVa++5YT8dMpbOQ+bUn6MiH95+k3Ppl8ipFx2e2KKhMH8VoF5vRQIppCrCrJm6f/IRoZwh7x4785d73oLtoFMk6MPSFnw46s8PJ+jBDOQhhvFzzXwr+0tZbrqNtXui3PHSVt86ED+axRpuUog5ePzaSJQ+AVdSxQwCxT19avooAZPHjw9jT4U9Eo18BFIAQSaxtgNhaAJltaZdOKxZ+EYiWOnEZDs3BZCrWtgfiRKA5PD0gJAFl+fEet1JwH/HSmHFOSvBt4csIe1s8KpUeubnoZMrBSPAZDfjNvhrSzHaKHpFi3WLi6DSP4pyHiHNg/LZRI4L5CpWQnEk/Dxu19A\\u003d\",\"ephemeralPublicKey\":\"BJbQqCHVXHkg/3vioDJAQNoNQMClUmmsjTJ9loy5+IacdR7Qb28Z2t8L6IlO3jgZvx6RFvD9ikR2zQWAa4RzYYQ\\u003d\",\"tag\":\"gAbroVixfH3Ayet2BVsuJ608Sw45u1HigVMiIRlif9k\\u003d\"}"}"
}
},
"paymentMethodType": "GOOGLEPAY"
},
"paymentNotifyUrl": "https://www.yourNotifyUrl.com",
"paymentRedirectUrl": "https://www.yourMerchantWeb.com",
"paymentRequestId": "713c6f16-fca5-4507-8291-beea32dc****",
"productCode": "CASHIER_PAYMENT",
"settlementStrategy": {
"settlementCurrency": "SGD"
},
"subscriptionInfo": {
"periodRule": {
"periodCount": 1,
"periodType": "MONTH"
},
"subscriptionDescription": "Subscription test",
"subscriptionNotifyUrl": "https://www.yourDomain.com/subscription/notify",
"subscriptionStartTime": "2026-03-13T14:42:55.062+08:00"
}
}以下代码显示了一个响应示例:
{
"normalUrl": "https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJMrfAGZ7ZPgbv5TmV3FoZ4U%3D&pass=lt%5E1&needDDC=Y&from=iexpcore",
"paymentActionForm": {
"method": "POST",
"parameters": {
"Bin": "4***11",
"JWT": "eyJraWQiOiJDQVJESU5BTF9KV1RfYWxpcGF5IiwiY3R5IjoiQ****QUxfSldUX2FsaXBheSIsImFsZyI6IkhTMjU2In0.eyJPcmdVbml0SWQiOiI1ZDVmMTA2MjRiNzkyYTFhZTBkN2Y3MTEiLCJSZWZlcmVuY2VJZCI6Ijk2OTQ2ZWQ0LTRiZDEtNDBkOS05Y2I2LTQ4NjExMjlhZDVkYyIsIlJldHVyblVybCI6Imh0dHBzOi8vb3Blbi1uYS5hbGlwYXkuY29tL2FwaS9vcGVuL3VybF9jYWxsYmFja19nZXQvY2FyZGluYWwvY2FyZGluYWwwMDcuaHRtP3NpZ25EYXRhPWpKa1IlMkZQdnYweldCeEZvJTJCOUtXM1B5TFZDM2h4WHpkUEVVQWpHRmszQjR0anJ4eW5LTHRKJTJGR3pMekZFR1RYSEVhcWlJd05Jb2xqTW0xUEw2MlllYVFFZUU4S2pYeVNCUUt0M01iMVBNbEo0dXolMkY2WHllSW5UJTJCZW92QWJXSDclMkJDc0V1RmtqckdwOHpQYmJkMDA1M0IlMkYlMkZhcXc3VEN5RklXQXdWOGkxcyUyQjE5R1pzTXJKZGpoRkk4NVc5RjVvWTBJclZrQTlsRSUyRk5VZ1p6c3N0VGtSVFFVYjl0azJTbmM5WGJBZ096JTJCek5MNkc3UlhTeURNanNtZ0pqR0pWdjVDWUpFR3htaSUyRjVWMk5MRlBRZ3Nrd1RPSEdCVlVMY1VGM1RUaXhHM0JnbjlsdXlDU0hvbnN1RHY5M0Q3bnhXZ3gzS2JsSloxY1hVbGxaU2Q4V2Q2bVU5VGZiZyUzRCUzRCZpblNlcmlhbE5vPTIwMjYwMzEzODkwMzEzNDEwMDAxSjM3NDMyNTc3MjQmb3V0T3JkZXJObz0yMDI2MDMxMzg5MDMxMzQxMDAwMUozNzQzMjU3NzI0IiwiZXhwIjoxNzczMzg1MDc4LCJpYXQiOjE3NzMzODQxNzgsImlzcyI6IjVkNWZkZGU4Y2NlZjc2MWFkOGI4MmI2OCIsImp0aSI6IjIwMjYwMzEzODkwMzEzNDEwMDAxSjM3NDMyNTc3MjQifQ.hBMn31v0ntxmMhDjqnYByylVufj7EjUyZj55WPivQu4",
"DDCFlag": "Y"
},
"paymentActionFormType": "RedirectActionForm",
"redirectUrl": "https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJMrfAGZ7ZPgbv5TmV3FoZ4U%3D&pass=lt%5E1&needDDC=Y&from=iexpcore"
},
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentCreateTime": "2026-03-12T23:42:56-07:00",
"paymentId": "2026031319401****1001881J0284139383",
"paymentRequestId": "713c6f16-fca5-4507-8291-beea32dc****",
"paymentResultInfo": {
"cardBrand": "VISA",
"cardNo": "************1111",
"credentialTypeUsed": "PAN",
"threeDSResult": {}
},
"redirectActionForm": {
"method": "POST",
"parameters": {
"Bin": "411111",
"JWT": "eyJraWQiOiJDQVJESU5BTF9KV1RfYWxpcGF5IiwiY3R5I*****SRElOQUxfSldUX2FsaXBheSIsImFsZyI6IkhTMjU2In0.eyJPcmdVbml0SWQiOiI1ZDVmMTA2MjRiNzkyYTFhZTBkN2Y3MTEiLCJSZWZlcmVuY2VJZCI6Ijk2OTQ2ZWQ0LTRiZDEtNDBkOS05Y2I2LTQ4NjExMjlhZDVkYyIsIlJldHVyblVybCI6Imh0dHBzOi8vb3Blbi1uYS5hbGlwYXkuY29tL2FwaS9vcGVuL3VybF9jYWxsYmFja19nZXQvY2FyZGluYWwvY2FyZGluYWwwMDcuaHRtP3NpZ25EYXRhPWpKa1IlMkZQdnYweldCeEZvJTJCOUtXM1B5TFZDM2h4WHpkUEVVQWpHRmszQjR0anJ4eW5LTHRKJTJGR3pMekZFR1RYSEVhcWlJd05Jb2xqTW0xUEw2MlllYVFFZUU4S2pYeVNCUUt0M01iMVBNbEo0dXolMkY2WHllSW5UJTJCZW92QWJXSDclMkJDc0V1RmtqckdwOHpQYmJkMDA1M0IlMkYlMkZhcXc3VEN5RklXQXdWOGkxcyUyQjE5R1pzTXJKZGpoRkk4NVc5RjVvWTBJclZrQTlsRSUyRk5VZ1p6c3N0VGtSVFFVYjl0azJTbmM5WGJBZ096JTJCek5MNkc3UlhTeURNanNtZ0pqR0pWdjVDWUpFR3htaSUyRjVWMk5MRlBRZ3Nrd1RPSEdCVlVMY1VGM1RUaXhHM0JnbjlsdXlDU0hvbnN1RHY5M0Q3bnhXZ3gzS2JsSloxY1hVbGxaU2Q4V2Q2bVU5VGZiZyUzRCUzRCZpblNlcmlhbE5vPTIwMjYwMzEzODkwMzEzNDEwMDAxSjM3NDMyNTc3MjQmb3V0T3JkZXJObz0yMDI2MDMxMzg5MDMxMzQxMDAwMUozNzQzMjU3NzI0IiwiZXhwIjoxNzczMzg1MDc4LCJpYXQiOjE3NzMzODQxNzgsImlzcyI6IjVkNWZkZGU4Y2NlZjc2MWFkOGI4MmI2OCIsImp0aSI6IjIwMjYwMzEzODkwMzEzNDEwMDAxSjM3NDMyNTc3MjQifQ.hBMn31v0ntxmMhDjqnYByylVufj7EjUyZj55WPivQu4",
"DDCFlag": "Y"
},
"redirectUrl": "https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJMrfAGZ7ZPgb****V3FoZ4U%3D&pass=lt%5E1&needDDC=Y&from=iexpcore"
},
"result": {
"resultCode": "PAYMENT_IN_PROCESS",
"resultMessage": "payment in process",
"resultStatus": "U"
}
}首次订阅
后续扣款
以下为商户解密 paymentToken 的首次订阅支付流程示意图:

以下为商户解密 paymentToken 的后续扣款的支付流程示意图:

集成准备
- 已获得 client ID。
- 已完成密钥配置。
- 已完成异步通知接收地址的配置。
- 集成服务端 SDK 资源包,并完成接口库安装及请求示例初始化。具体操作请参阅服务端 SDK。
集成步骤
请按照以下步骤开始集成:
- 获取 paymentToken
- 创建订阅支付请求
- (可选)跳转至 3D 验证页面
- 授权结果通知
- 请款并获取请款结果
- 获取订阅通知
步骤 1:获取 paymentToken
步骤 2:创建订阅支付请求 服务端
在您集成 Google Pay SDK 后,您可通过直接令牌化方式拿到 paymentToken,详情请参见针对商家的付款数据加密。在拿到 paymentToken 并完成自解密后,请根据解密结果中的卡交易身份认证场景(
PAN_ONLY
或CRYPTOGRAM_3DS
)传入相应的参数,调用 pay(单笔支付)接口发起授权支付请求。 注意:商户解密需要您具备 PCI 资质,并在 Google Pay 后台上传 PCI 证明。
- PAN_ONLY:该认证方法与存储在用户 Google 账户中的支付卡相关。此场景下拿到的解密卡信息为 FPAN。
- CRYPTOGRAM_3DS:该认证方法与作为 Android 设备令牌存储的卡相关。此场景下拿到的解密卡信息为 DPAN。
PAN_ONLY
CRYPTOGRAM_3DS
获取到的 Google Pay 报文:
"paymentMethod": "CARD",
"paymentMethodDetails": {
"authMethod": "PAN_ONLY",
"pan": "1111222233334444",
"expirationMonth": 10,
"expirationYear": 2020
}, "gatewayMerchantId": "some-merchant-id", "messageId": "some-message-id",
"messageExpiration": "1577862000000"
}当解密结果中的卡交易身份认证场景为
PAN_ONLY
时(即解密后拿到的卡信息类型为 FPAN),以下是支付请求中与 Google Pay 相关的关键参数说明:public static void payByGooglePayServer2Server() {
AlipayPayRequest alipayPayRequest = new AlipayPayRequest();
alipayPayRequest.setProductCode(ProductCodeType.CASHIER_PAYMENT);
// 替换为您的 paymentRequestId
String paymentRequestId = UUID.randomUUID().toString();
alipayPayRequest.setPaymentRequestId(paymentRequestId);
// 设置订阅信息
SubscriptionInfo subscriptionInfo = new SubscriptionInfo();
subscriptionInfo.setSubscriptionDescription("Subscription test");
LocalDateTime localNow = LocalDateTime.now();
OffsetDateTime offsetDateTime = localNow.atOffset(ZoneOffset.of("+08:00"));
String startTime = offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
subscriptionInfo.setSubscriptionStartTime(startTime);
subscriptionInfo.setSubscriptionNotifyUrl("https://www.yourDomain.com/subscription/notify");
PeriodRule periodRule = new PeriodRule();
periodRule.setPeriodType("MONTH");
periodRule.setPeriodCount(1);
subscriptionInfo.setPeriodRule(periodRule);
alipayPayRequest.setSubscriptionInfo(subscriptionInfo);
// 设置支付金额
Amount amount = Amount.builder().currency("SGD").value("4200").build();
alipayPayRequest.setPaymentAmount(amount);
// settlementStrategy
SettlementStrategy settlementStrategy = SettlementStrategy.builder().settlementCurrency("SGD").build();
alipayPayRequest.setSettlementStrategy(settlementStrategy);
// 设置支付方式- PAN_ONLY场景
PaymentMethod paymentMethod = PaymentMethod.builder().paymentMethodType("GOOGLEPAY").build();
alipayPayRequest.setPaymentMethod(paymentMethod);
// 设置GooglePay相关参数 -- 商户解密
Map<String, Object> paymentMethodMetaData = new HashMap<>();
paymentMethodMetaData.put("cardNo", "4054695723100768");
paymentMethodMetaData.put("cvv", "123");
paymentMethodMetaData.put("expiryMonth", "12");
paymentMethodMetaData.put("expiryYear", "99");
paymentMethodMetaData.put("tokenizeMode", false);
paymentMethodMetaData.put("is3DSAuthentication", true);
paymentMethod.setPaymentMethodMetaData(paymentMethodMetaData);
// 替换为您的 orderId
String orderId = UUID.randomUUID().toString();
// 设置买家信息
Buyer buyer = Buyer.builder().referenceBuyerId("yourBuyerId").build();
// 设置订单信息
Order order = Order.builder().referenceOrderId(orderId)
.orderDescription("antom testing order").orderAmount(amount).buyer(buyer).build();
alipayPayRequest.setOrder(order);
// 设置设备环境信息
Env env = Env.builder().terminalType(TerminalType.WEB).clientIp("1.2.3.4").build();
alipayPayRequest.setEnv(env);
// 设置授权请款模式
PaymentFactor paymentFactor = PaymentFactor.builder().isAuthorization(true).build();
alipayPayRequest.setPaymentFactor(paymentFactor);
// 替换为您的通知地址
alipayPayRequest.setPaymentNotifyUrl("https://www.yourNotifyUrl.com");
// 替换为您的跳转地址
alipayPayRequest.setPaymentRedirectUrl("https://www.yourMerchantWeb.com");
// 支付
AlipayPayResponse alipayPayResponse = null;
try {
alipayPayResponse = CLIENT.execute(alipayPayRequest);
} catch (AlipayApiException e) {
String errorMsg = e.getMessage();
// 处理错误情况
}
}以下代码显示了请求报文的示例:
{
"env": {
"clientIp": "1.2.3.4",
"terminalType": "WEB"
},
"order": {
"buyer": {
"referenceBuyerId": "yourBuyerId"
},
"orderAmount": {
"currency": "SGD",
"value": "4200"
},
"orderDescription": "antom testing order",
"referenceOrderId": "daa64b56-0850-4d08-a322-370ac8fa****"
},
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentFactor": {
"isAuthorization": true
},
"paymentMethod": {
"paymentMethodMetaData": {
"cvv": "123",
"is3DSAuthentication": true,
"expiryMonth": "12",
"expiryYear": "99",
"cardNo": "4054695723100768",
"tokenizeMode": false
},
"paymentMethodType": "GOOGLEPAY"
},
"paymentNotifyUrl": "https://www.yourNotifyUrl.com",
"paymentRedirectUrl": "https://www.yourMerchantWeb.com",
"paymentRequestId": "a1513804-d4ab-4dc8-9ec5-775e3aeb****",
"productCode": "CASHIER_PAYMENT",
"settlementStrategy": {
"settlementCurrency": "SGD"
},
"subscriptionInfo": {
"periodRule": {
"periodCount": 1,
"periodType": "MONTH"
},
"subscriptionDescription": "Subscription test",
"subscriptionNotifyUrl": "https://www.yourDomain.com/subscription/notify",
"subscriptionStartTime": "2026-03-13T15:29:13.475+08:00"
}
}以下代码显示了一个响应示例:
{
"normalUrl": "https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJBM4I4E%2B6F%2BWD98QutUHkz0%3D&pass=lt%5E1&needDDC=Y&from=iexpcore",
"paymentActionForm": "{"method":"POST","parameters":"{\"JWT\":\"eyJraWQiOiJDQVJESU5BTF9KV1RfYWxpcGF5IiwiY3R5IjoiQ0FSRElOQUxfSldUX2FsaXBheSIsImFsZyI6IkhTMjU2In0.eyJPcmdVbml0SWQiOiI1ZDVmMTA2MjRiNzkyYTFhZTBkN2Y3MTEiLCJSZWZlcmVuY2VJZCI6ImEzMTFmNTE4LTY2ZjQtNGQzMC1hMmFhLTI2ZWU0YmI5NjMzMSIsIlJldHVyblVybCI6Imh0dHBzOi8vb3Blbi1uYS5hbGlwYXkuY29tL2FwaS9vcGVuL3VybF9jYWxsYmFja19nZXQvY2FyZGluYWwvY2FyZGluYWwwMDcuaHRtP3NpZ25EYXRhPUdGWUhkWUl2VFBjZE9sJTJCdUl5emk3VG5RbHYwWlNaWG5jaVlOM3NQb0JCUXMlMkZLMXZhdThaVTJwR1hHUVRNVndieVFOV3V5OElMV0p6b2dIdExzbFJ0U3BhYVNUbGpsY3doQ1pRTnNaM2U3JTJGcVVMZFBUNElEYUJvQ1pkTERFTkFiS0NFd3pzQSUyQjF1UFk1dU1neE5zRmt4dSUyQkhXZVpSaldDekplRVNGVUtqMUMwNyUyRkpleGVTZmltRDBEN1dvemJKdmlud2pObjZ5bko3RGVuVTl1a2NRSXlkeFNSJTJGJTJCUWc4TTNUMGNHMFZuWkdXN2xUZ25OcExEd0ZHUlZlJTJCWlFSM2xpQTEyUkE2TjZjTmo1VTVpM0VpUk8yNHRRczVWWmJOTyUyRkFDdHZBWmxmR0hjbXdldyUyQmNBQ0doR3gyNjI0emplNmZGOGZZY1djbGJJYVNkckxJazMzWlElM0QlM0QmaW5TZXJpYWxObz0yMDI2MDMxMzg5MDMxMzQxMDAwMkoyNTQzNjY1OTAzJm91dE9yZGVyTm89MjAyNjAzMTM4OTAzMTM0MTAwMDJKMjU0MzY2NTkwMyIsImV4cCI6MTc3MzM4Nzg1NiwiaWF0IjoxNzczMzg2OTU2LCJpc3MiOiI1ZDVmZGRlOGNjZWY3NjFhZDhiODJiNjgiLCJqdGkiOiIyMDI2MDMxMzg5MDMxMzQxMDAwMkoyNTQzNjY1OTAzIn0.6ZPZv8AflJ10Nwpjj22WTXKrG6J6ldthzJiGcEHrYwg\",\"Bin\":\"405469\",\"DDCFlag\":\"Y\"}","paymentActionFormType":"RedirectActionForm","redirectUrl":"https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJBM4I4E%2B6F%2BWD98QutUHkz0%3D&pass=lt%5E1&needDDC=Y&from=iexpcore"}",
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentCreateTime": "2026-03-13T00:29:15-07:00",
"paymentId": "2026031319401080****1882J0282278120",
"paymentRequestId": "a1513804-d4ab-4dc8-9ec5-775e3aeb****",
"paymentResultInfo": {
"cardBrand": "VISA",
"cardNo": "************0768",
"credentialTypeUsed": "PAN",
"threeDSResult": {
}
},
"paymentTime": "2026-03-13T00:29:16-07:00",
"redirectActionForm": {
"method": "POST",
"parameters": "{"JWT":"eyJraWQiOiJDQVJESU5BTF9KV1RfYWxpcGF5IiwiY3R5IjoiQ0FSRElOQUxfSldUX2FsaXBheSIsImFsZyI6IkhTMjU2In0.eyJPcmdVbml0SWQiOiI1ZDVmMTA2MjRiNzkyYTFhZTBkN2Y3MTEiLCJSZWZlcmVuY2VJZCI6ImEzMTFmNTE4LTY2ZjQtNGQzMC1hMmFhLTI2ZWU0YmI5NjMzMSIsIlJldHVyblVybCI6Imh0dHBzOi8vb3Blbi1uYS5hbGlwYXkuY29tL2FwaS9vcGVuL3VybF9jYWxsYmFja19nZXQvY2FyZGluYWwvY2FyZGluYWwwMDcuaHRtP3NpZ25EYXRhPUdGWUhkWUl2VFBjZE9sJTJCdUl5emk3VG5RbHYwWlNaWG5jaVlOM3NQb0JCUXMlMkZLMXZhdThaVTJwR1hHUVRNVndieVFOV3V5OElMV0p6b2dIdExzbFJ0U3BhYVNUbGpsY3doQ1pRTnNaM2U3JTJGcVVMZFBUNElEYUJvQ1pkTERFTkFiS0NFd3pzQSUyQjF1UFk1dU1neE5zRmt4dSUyQkhXZVpSaldDekplRVNGVUtqMUMwNyUyRkpleGVTZmltRDBEN1dvemJKdmlud2pObjZ5bko3RGVuVTl1a2NRSXlkeFNSJTJGJTJCUWc4TTNUMGNHMFZuWkdXN2xUZ25OcExEd0ZHUlZlJTJCWlFSM2xpQTEyUkE2TjZjTmo1VTVpM0VpUk8yNHRRczVWWmJOTyUyRkFDdHZBWmxmR0hjbXdldyUyQmNBQ0doR3gyNjI0emplNmZGOGZZY1djbGJJYVNkckxJazMzWlElM0QlM0QmaW5TZXJpYWxObz0yMDI2MDMxMzg5MDMxMzQxMDAwMkoyNTQzNjY1OTAzJm91dE9yZGVyTm89MjAyNjAzMTM4OTAzMTM0MTAwMDJKMjU0MzY2NTkwMyIsImV4cCI6MTc3MzM4Nzg1NiwiaWF0IjoxNzczMzg2OTU2LCJpc3MiOiI1ZDVmZGRlOGNjZWY3NjFhZDhiODJiNjgiLCJqdGkiOiIyMDI2MDMxMzg5MDMxMzQxMDAwMkoyNTQzNjY1OTAzIn0.6ZPZv8AflJ10Nwpjj22WTXKrG6J6ldthzJiGcEHrYwg","Bin":"405469","DDCFlag":"Y"}",
"redirectUrl": "https://iexpfront-sea.alipay.com/authorise3d?merchantId=1887SjzZ56b1lvObJWQTaqG4PhACjUGncnl0Sihzg8en5I%3D&ddcId=m47qH0MLK7A7yJNVdjLYJBM4I4E%2B6F%2BWD98QutUHkz0%3D&pass=lt%5E1&needDDC=Y&from=iexpcore"
},
"result": {
"resultCode": "PAYMENT_IN_PROCESS",
"resultMessage": "payment in process",
"resultStatus": "U"
}
}获取到的 Google Pay 报文:
{
"paymentMethod": "CARD",
"paymentMethodDetails": {
"authMethod": "CRYPTOGRAM_3DS",
"pan": "1111222233334444",
"expirationMonth": 10,
"expirationYear": 2020,
"cryptogram": "AAAAAA...",
"eciIndicator": "eci indicator"
},
"messageId": "some-message-id",
"messageExpiration": "1577862000000"
}当解密结果中的卡交易身份认证场景为
CRYPTOGRAM_3DS
时(即解密后拿到的卡信息类型为 DPAN),以下是支付请求中与 Google Pay 相关的关键参数说明:public static void payByGooglePayServer2Server() {
AlipayPayRequest alipayPayRequest = new AlipayPayRequest();
alipayPayRequest.setProductCode(ProductCodeType.CASHIER_PAYMENT);
// 替换为您的 paymentRequestId
String paymentRequestId = UUID.randomUUID().toString();
alipayPayRequest.setPaymentRequestId(paymentRequestId);
// 设置订阅信息
SubscriptionInfo subscriptionInfo = new SubscriptionInfo();
subscriptionInfo.setSubscriptionDescription("Subscription test");
LocalDateTime localNow = LocalDateTime.now();
OffsetDateTime offsetDateTime = localNow.atOffset(ZoneOffset.of("+08:00"));
String startTime = offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
subscriptionInfo.setSubscriptionStartTime(startTime);
subscriptionInfo.setSubscriptionNotifyUrl("https://www.yourDomain.com/subscription/notify");
PeriodRule periodRule = new PeriodRule();
periodRule.setPeriodType("MONTH");
periodRule.setPeriodCount(1);
subscriptionInfo.setPeriodRule(periodRule);
alipayPayRequest.setSubscriptionInfo(subscriptionInfo);
// 设置支付金额
Amount amount = Amount.builder().currency("SGD").value("4200").build();
alipayPayRequest.setPaymentAmount(amount);
// settlementStrategy
SettlementStrategy settlementStrategy = SettlementStrategy.builder().settlementCurrency("SGD").build();
alipayPayRequest.setSettlementStrategy(settlementStrategy);
// 设置支付方式- CRYPTOGRAM_3DS场景
PaymentMethod paymentMethod = PaymentMethod.builder().paymentMethodType("GOOGLEPAY").build();
alipayPayRequest.setPaymentMethod(paymentMethod);
// 设置MpiData信息 -- CRYPTOGRAM_3DS场景
Map<String, Object> paymentMethodMetaData = new HashMap<>();
paymentMethodMetaData.put("cardNo", "4054695723100768");
paymentMethodMetaData.put("cvv", "123");
paymentMethodMetaData.put("expiryMonth", "12");
paymentMethodMetaData.put("expiryYear", "99");
MpiData mapiDate = new MpiData();
mapiDate.setCavv("googlePay cryptogram");
mapiDate.setEci("eci indicator");
paymentMethodMetaData.put("mpiData", mapiDate);
paymentMethod.setPaymentMethodMetaData(paymentMethodMetaData);
// 替换为您的 orderId
String orderId = UUID.randomUUID().toString();
// 设置买家信息
Buyer buyer = Buyer.builder().referenceBuyerId("yourBuyerId").build();
// 设置订单信息
Order order = Order.builder().referenceOrderId(orderId)
.orderDescription("antom testing order").orderAmount(amount).buyer(buyer).build();
alipayPayRequest.setOrder(order);
// 设置设备环境信息
Env env = Env.builder().terminalType(TerminalType.WEB).clientIp("1.2.3.4").build();
alipayPayRequest.setEnv(env);
// 设置授权请款模式
PaymentFactor paymentFactor = PaymentFactor.builder().isAuthorization(true).build();
alipayPayRequest.setPaymentFactor(paymentFactor);
// 替换为您的通知地址
alipayPayRequest.setPaymentNotifyUrl("https://www.yourNotifyUrl.com");
// 替换为您的跳转地址
alipayPayRequest.setPaymentRedirectUrl("https://www.yourMerchantWeb.com");
// 支付
AlipayPayResponse alipayPayResponse = null;
try {
alipayPayResponse = CLIENT.execute(alipayPayRequest);
} catch (AlipayApiException e) {
String errorMsg = e.getMessage();
System.out.println("支付失败:" + errorMsg);
// 处理错误情况
}
}以下代码显示了请求报文的示例:
{
"env": {
"clientIp": "1.2.3.4",
"terminalType": "WEB"
},
"order": {
"buyer": {
"referenceBuyerId": "yourBuyerId"
},
"orderAmount": {
"currency": "SGD",
"value": "4200"
},
"orderDescription": "antom testing order",
"referenceOrderId": "b2ad9478-2eec-4aee-8403-13432ca6****"
},
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentFactor": {
"isAuthorization": true
},
"paymentMethod": {
"paymentMethodMetaData": {
"cvv": "123",
"expiryMonth": "12",
"expiryYear": "99",
"cardNo": "4054695723100768",
"mpiData": {
"cavv": "googlePay cryptogram",
"eci": "eci indicator"
}
},
"paymentMethodType": "GOOGLEPAY"
},
"paymentNotifyUrl": "https://www.yourNotifyUrl.com",
"paymentRedirectUrl": "https://www.yourMerchantWeb.com",
"paymentRequestId": "383bc587-0a45-479c-8e2a-ef719c0e****",
"productCode": "CASHIER_PAYMENT",
"settlementStrategy": {
"settlementCurrency": "SGD"
},
"subscriptionInfo": {
"periodRule": {
"periodCount": 1,
"periodType": "MONTH"
},
"subscriptionDescription": "Subscription test",
"subscriptionNotifyUrl": "https://www.yourDomain.com/subscription/notify",
"subscriptionStartTime": "2026-03-13T15:47:56.201+08:00"
}
}以下代码显示了一个响应示例:
{
"authExpiryTime": "2026-03-20T00:47:59-07:00",
"paymentAmount": {
"currency": "SGD",
"value": "4200"
},
"paymentCreateTime": "2026-03-13T00:47:58-07:00",
"paymentId": "20260313194010****001884C0282432224",
"paymentRequestId": "383bc587-0a45-479c-8e2a-ef719c0e****",
"paymentResultInfo": {
"avsResultRaw": "I",
"cardBrand": "VISA",
"cardNo": "************0768",
"credentialTypeUsed": "PAN",
"cvvResultRaw": "P",
"networkTransactionId": "20260313890313000004C984380****",
"threeDSResult": {
"cavv": "",
"eci": ""
}
},
"paymentTime": "2026-03-13T00:47:59-07:00",
"result": {
"resultCode": "SUCCESS",
"resultMessage": "success.",
"resultStatus": "S"
}
}(可选)步骤 3:跳转至 3D 验证页面 客户端
注意:在 Google Pay 场景下,Antom 托管解密或您自行解密 paymentToken 且拿到的信息为 FPAN 时,返回的 normalUrl 为 3DS 认证页面。
步骤 4:授权结果通知 服务端
步骤 5:请款并获取请款通知 服务端
注意:
- 只有授权支付成功才会触发请款。
- 您需要根据请款结果来决定是否发货。
授权支付成功后,Antom 默认自动为您请款,也支持您手动发起请款。同时,Antom 会使用 notifyCapture(单笔支付)将请款结果通知发送给您,您也可以通过主动查询来获取请款结果。您需要根据请款结果来决定是否发货,具体操作请参阅请款。
步骤 6:获取订阅通知 服务端
订阅关系生效后,Antom 会为您发送以下通知:
订阅后操作
完成订阅支付后,您可对交易进行以操作:
查询订阅相关信息 服务端
订阅确认后,您可以查询以下订阅信息:
- 查询订阅列表:您可以通过 inquireSubscriptionList 接口查询符合特定筛选条件的订阅列表。
- 查询订阅详情:您可以使用 subscriptionId 调用 inquireSubscription 接口来获取订阅详情。
- 查询订阅交易信息:您可以使用 subscriptionId 调用 inquireSubscriptionPayment 接口来获取订阅交易的列表信息。
订阅试用 服务端
终止订阅 服务端
取消交易 服务端
对于支付成功后的订单,如买家在当天内申请取消订单或退款,您可以通过 Antom 提供的取消交易能力将订单状态取消或解冻。此外,对于尚未完成支付的订单,您也可以直接进行取消,具体的集成方案见取消交易文档。