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 GET
và DELETE
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"