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ề những thay đổi đối với dữ liệu tài khoản. Ví dụ: nếu đăng ký nhận thông báo về việc thay đổi trạng thái sản phẩm, bạn có thể nhận được thông báo theo thời gian thực khi 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ụ nào hoặc tài khoản được liên kết khác.

Hướng dẫn này cung cấp các ví dụ về cách quản lý thông báo về những thay đổi về trạng thái sản phẩm. 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 các yêu cầu. Để biết danh sách đầy đủ các loại sự kiện, hãy xem Tài liệu tham khảo về API Thông báo của người bán.

Đă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ệ và do một tổ chức phát hành chứng chỉ ký.
  • 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 đây để 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 sử dụng một URI gọi lại duy nhất cho mỗi tài khoản nâng cao, cho mỗi loại sự kiện để giảm thiểu tải của các yêu cầu đẩy đến một URI duy nhất.

Dưới đây là yêu cầu mẫu để đăng ký nhận thông báo về các thay đổi trạng thái sản phẩm cho một tài khoản người bán cụ thể. Hãy sử dụng mã người bán của tài khoản sẽ nhận được 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à một tài khoản độc lập, không có tài khoản nào được liên kết và bạn muốn nhận thông báo cho tài khoản của mình, hãy sử dụng mã người bán của 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"
}

Các lệnh gọi thành công sẽ trả về một name cho gói thuê bao của bạn, 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 từng gói thuê bao name cho GETDELETE.

Bạn có thể đăng ký nhận thông báo về sự thay đổi 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 thêm "allManagedAccounts": true thay vì targetAccount vào yêu cầu:

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 sử dụng PATCH 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 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 một gói thuê bao, bạn sẽ nhận được thông báo tới callBackUri đã chỉ định ở đị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 định dạng văn bản có thể đọc được để sử dụng trong quá trình triển khai. Dưới đây là mẫu trình điều khiển khởi động mùa xuân mà bạn có thể sử dụng để xử lý dữ liệu đã 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ề một 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"

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ề mã phản hồi thành công. Thông báo đã 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"