您可以使用 Notifications 子 API 在 Merchant Center 账号中的数据发生变化时接收推送通知。您可以订阅直接发送到您配置的 HTTPS 端点的实时事件 Feed,而不是定期轮询 API 来检测更改。
Notifications 子 API 支持以下通知:
- 商品状态变化:当任何关联账号或子账号中的商品审批状态发生变化(例如,商品被拒批或获批)时,您会收到实时提醒。
- 账号服务变更:在创建、更新或删除
AccountService资源时(例如在建立、修改或移除账号服务关系时)接收实时提醒。
前提条件和回调 URI 设置
如需接收推送通知,您必须提供 callBackUri。您的回调 URI 必须满足以下要求:
- 必须是可公开访问的 HTTPS 地址,且具有由认可的证书授权机构签发的有效 SSL 证书。
- 必须接受 HTTP
POST请求,并将Content-Type标头设置为application/json。 必须返回以下 HTTP 状态代码之一,以确认已收到通知:
102200201202204
您可以为多个订阅使用相同的回调 URI。为了最大限度地减少单个端点上的负载,请为每个高级账号和事件类型使用唯一的回调 URI。
管理订阅
Notifications 子 API 提供用于创建、列出、检索、更新和删除通知配置的方法。
创建订阅
订阅创建操作取决于您要接收的事件类型。每种事件类型都需要不同的配置字段,并提供不同的载荷结构。
如需了解如何创建订阅以及查看每种事件类型的示例请求,请参阅相应指南:
列出订阅
如需列出账号的所有通知订阅,请向 notificationsubscriptions 集合发送 GET 请求:
GET https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions
检索订阅
如需获取特定订阅的详细信息,请使用相应订阅的资源名称:
GET https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}
更新订阅
如需更新现有订阅的回调 URI,请发送 PATCH 请求,并使用 update_mask 指定要更新的字段:
PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}?update_mask=callBackUri
{
"callBackUri": "https://example.com/updated-callback"
}
删除订阅
如需停止接收通知,请删除订阅:
DELETE https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}
解码通知
当发生事件时,Google 会向您注册的 callBackUri 发送通知。推送通知以 JSON 信封的形式到达,其中包含经过 base64 编码的 data 载荷:
{"message":{"data":"{base64_encoded_string}"}}
对数据字符串进行解码,以访问 JSON 事件载荷。以下示例 Spring Boot 控制器展示了如何接收和解码推送通知:
@RestController
public class ExampleController {
@RequestMapping(value = "/push",
method = RequestMethod.POST,
consumes = {"application/json"},
produces = {"text/plain"})
@ResponseStatus(HttpStatus.OK)
public void handleNotification(@RequestBody String message) {
JSONObject jsonObject = new JSONObject(message);
JSONObject jsonMessage = jsonObject.getJSONObject("message");
String encodedData = jsonMessage.getString("data");
byte[] decodedBytes = Base64.getDecoder().decode(encodedData);
String decodedPayload = new String(decodedBytes);
// Process decodedPayload according to the registered event type
}
}
后续步骤
如需配置订阅并处理特定事件的解码后载荷,请参阅:
- 接收有关商品状态变更的推送通知:了解如何订阅商品拒批和审批动态,以及如何解析
ProductStatusChangeMessage载荷。 - 接收有关账号服务变更的推送通知:了解如何订阅账号关系更新并解析
ResourceChangeMessage载荷。