Notifications sub-API 概览

您可以使用 Notifications 子 API 在 Merchant Center 账号中的数据发生变化时接收推送通知。您可以订阅直接发送到您配置的 HTTPS 端点的实时事件 Feed,而不是定期轮询 API 来检测更改。

Notifications 子 API 支持以下通知:

  • 商品状态变化:当任何关联账号或子账号中的商品审批状态发生变化(例如,商品被拒批或获批)时,您会收到实时提醒。
  • 账号服务变更:在创建、更新或删除 AccountService 资源时(例如在建立、修改或移除账号服务关系时)接收实时提醒。

前提条件和回调 URI 设置

如需接收推送通知,您必须提供 callBackUri。您的回调 URI 必须满足以下要求:

  • 必须是可公开访问的 HTTPS 地址,且具有由认可的证书授权机构签发的有效 SSL 证书。
  • 必须接受 HTTP POST 请求,并将 Content-Type 标头设置为 application/json
  • 必须返回以下 HTTP 状态代码之一,以确认已收到通知:

    • 102
    • 200
    • 201
    • 202
    • 204

您可以为多个订阅使用相同的回调 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
  }
}

后续步骤

如需配置订阅并处理特定事件的解码后载荷,请参阅: