Nhận thông báo đẩy về những thay đổi đối với dữ liệu tài khoản của bạn

Bạn có thể sử dụng API Thông báo của người bán để nhận thông báo đẩy về các thay đổi vào dữ liệu tài khoản. Ví dụ: nếu bạn đăng ký thay đổi trạng thái sản phẩm để thông báo, bạn có thể nhận được thông báo theo thời gian thực khi một sản phẩm bị từ chối. Bạn có thể đăng ký nhận thông báo cho bất kỳ tài khoản phụ hoặc tài khoản khác được liên kết tài khoản.

Hướng dẫn này cung cấp các ví dụ về cách quản lý thông báo về trạng thái sản phẩm thay đổi. Bạn có thể sử dụng các ví dụ này để quản lý thông báo cho các sự kiện khác bằng cách thay đổi giá trị của trường registeredEvent trong yêu cầu của bạn. Để có một buổi danh sách loại sự kiện, hãy xem API thông báo của người bán tham khảo.

Đăng ký

Để nhận thông báo, bạn cần có callBackUri. URI gọi lại của bạn phải đáp ứng các yêu cầu sau:

  • Phải là địa chỉ HTTPS có thể truy cập công khai có chứng chỉ SSL hợp lệ, có chữ ký của tổ chức phát hành chứng chỉ.
  • Phải chấp nhận các yêu cầu HTTP POST có tiêu đề Content-Type và Giá trị application/json.
  • Phải trả về một trong các mã phản hồi sau để xác nhận rằng đã nhận được thông báo.
    • 102
    • 200
    • 201
    • 202
    • 204

Bạn có thể sử dụng cùng một URI gọi lại cho nhiều gói thuê bao. Bạn nên dùng một URI gọi lại duy nhất cho mỗi nâng cao tài khoản theo từng loại sự kiện giảm thiểu tải các yêu cầu đẩy đến một URI.

Dưới đây là một yêu cầu mẫu về việc đăng ký nhận thông báo về các thay đổi về trạng thái sản phẩm cho một tài khoản người bán cụ thể. Sử dụng ID người bán của tài khoản cần nhận thông báo dưới dạng merchantId trong URL yêu cầu và mã người bán của tài khoản để nhận thông báo dưới dạng targetMerchantId trong nội dung yêu cầu. Nếu tài khoản của bạn là tài khoản độc lập không có liên kết tài khoản nào, và bạn muốn nhận thông báo về tài khoản của riêng bạn, hãy sử dụng mã người bán của chính bạn ở cả hai nơi.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Cuộc gọi thành công trả về a name cho gói thuê bao, bao gồm cả mã nhận dạng gói thuê bao:

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Bạn có thể sử dụng name này cho GETDELETE gói thuê bao riêng lẻ.

Bạn có thể đăng ký nhận thông báo về những thay đổi về trạng thái sản phẩm cho tất cả tài khoản được liên kết bằng cách bao gồm "allManagedAccounts": true thay vì targetAccount trong yêu cầu của bạn:

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

Để cập nhật gói thuê bao hiện có, hãy dùng PATCH cùng với update_mask để chỉ định các trường bạn muốn cập nhật và các giá trị mới trong phần nội dung JSON:

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

Giải mã thông báo

Sau khi tạo đăng ký, bạn sẽ nhận được thông báo đến callBackUri ở định dạng sau:

{"message":{"data":"{base64_encoded_string}"}}

Dữ liệu thông báo được mã hoá. Bạn có thể giải mã dữ liệu thành văn bản dễ đọc để sử dụng trong quá trình triển khai. Sau đây là một bộ điều khiển khởi động lò xo mẫu mà bạn có thể sử dụng để xử lý dữ liệu được mã hoá:

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void doStuff(@RequestBody String message) {
        //wrapped message
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        message = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(message);
        String decodedMessage = new String(decodedBytes);
        // Implement your business logic here
  }
}

Dưới đây là ví dụ về base64_encoded_string đã được giải mã:

"account": "accounts/targetMerchantId"
"managing_account": "accounts/merchantId"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "GE"
  "reporting_context": SHOPPING_ADS
},
"changes" {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "JP"
  "reporting_context": SHOPPING_ADS
},
changes {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
resource_id: "ONLINE~en~US~1234"
resource: "accounts/targetMerchantId/products/ONLINE~en~US~1234"

Nếu không có trường old_value trong thông báo, tức là một sản phẩm mới đã đã thêm vào tài khoản của bạn. Nếu không có trường new_value, tức là sản phẩm đã bị xoá từ tài khoản của bạn.

Trường reporting_context chỉ hỗ trợ (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING) từ giá trị enum ReportingContextEnum.

Kiểm tra kết quả triển khai

Dưới đây là thông báo mẫu mà bạn có thể sử dụng để kiểm tra URI gọi lại và giải mã:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

Để phản hồi lệnh gọi này, URI gọi lại của bạn sẽ trả về phản hồi thành công . Thông báo được giải mã phải có giá trị sau:

"account": "accounts/1234"
"managing_account": "accounts/5678"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
"resource_id": "ONLINE~en~US~000000000000"
"resource": "accounts/1234/products/ONLINE~en~US~000000000000"