میتوانید از Merchant Notifications API برای دریافت اعلانهای فشار برای تغییرات دادههای حساب استفاده کنید. برای مثال، اگر در اعلانهای تغییر وضعیت محصول مشترک شوید، میتوانید در زمان رد شدن یک محصول به شما اطلاع داده شود. میتوانید مشترک اعلانهای هر یک از حسابهای فرعی یا سایر حسابهای مرتبط شوید .
این راهنما نمونه هایی از نحوه مدیریت اعلان ها برای تغییرات وضعیت محصول را ارائه می دهد. میتوانید با تغییر مقدار فیلد registeredEvent
در درخواستهای خود، از این مثالها برای مدیریت اعلانهای رویدادهای دیگر استفاده کنید. برای فهرست کامل انواع رویدادها، به مرجع API اطلاعیههای تجاری مراجعه کنید.
مشترک شوید
برای دریافت اعلانها، به callBackUri
نیاز دارید. URI پاسخ به تماس شما باید شرایط زیر را داشته باشد:
- باید یک آدرس HTTPS در دسترس عموم با گواهینامه SSL معتبر، امضا شده توسط یک مرجع گواهی باشد.
- باید درخواستهای HTTP
POST
را با هدرContent-Type
و مقدارapplication/json
بپذیرد. - برای تأیید دریافت اعلان، باید یکی از کدهای پاسخ زیر را برگردانید.
-
102
-
200
-
201
-
202
-
204
-
میتوانید از همان URI برگشت به تماس برای چندین اشتراک استفاده کنید. برای به حداقل رساندن بار درخواستهای فشار به یک URI واحد، برای به حداقل رساندن بار درخواستهای ارسال به یک URI، توصیه میکنیم از یک URI برگشت به تماس منحصربهفرد برای هر حساب پیشرفته ، برای هر نوع رویداد استفاده کنید.
در اینجا یک نمونه درخواست برای اشتراک در اعلانهای تغییرات وضعیت محصول برای یک حساب تاجر خاص آمده است. از شناسه تجاری حسابی که باید اعلانها را بهعنوان merchantId
در URL درخواست دریافت کند، و از شناسه تجاری حساب برای دریافت اعلانها بهعنوان targetMerchantId
در بدنه درخواست استفاده کنید. اگر حساب شما یک حساب مستقل و بدون حساب پیوندی است و میخواهید برای حساب خود اعلانهایی دریافت کنید، از شناسه فروشنده خود در هر دو مکان استفاده کنید.
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
تماسهای موفق name
برای اشتراک شما برمیگردانند، از جمله شناسه اشتراک:
{
"name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
می توانید از این name
برای GET
و DELETE
اشتراک های فردی استفاده کنید.
میتوانید با قرار دادن "allManagedAccounts": true
به جای targetAccount
در درخواست خود، در اعلانهای تغییرات وضعیت محصول برای همه حسابهای پیوندشده خود مشترک شوید:
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
برای بهروزرسانی یک اشتراک موجود، PATCH
با یک update_mask
استفاده کنید تا فیلدهایی را که میخواهید بهروزرسانی کنید و مقادیر جدید را در بدنه JSON مشخص کنید:
PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri
{
"callBackUri": "https://my-own-personal-domain.com"
}
رمزگشایی اعلان ها
پس از ایجاد اشتراک، اعلانهایی را به callBackUri
مشخص شده در قالب زیر دریافت میکنید:
{"message":{"data":"{base64_encoded_string}"}}
داده های اعلان کدگذاری شده است. می توانید داده ها را به یک قالب متنی قابل خواندن رمزگشایی کنید تا در پیاده سازی خود از آن استفاده کنید. در اینجا یک نمونه کنترلر بوت فنری وجود دارد که ممکن است برای پردازش داده های کدگذاری شده استفاده کنید:
@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
}
}
در اینجا نمونه ای از یک base64_encoded_string
است که رمزگشایی شده است:
{
"account": "accounts/targetMerchantId",
"managingAccount": "accounts/merchantId",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}, {
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "JP",
"reportingContext": "SHOPPING_ADS"
},{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "GE",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~1234",
"resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}
اگر فیلد oldValue
در اعلان وجود نداشته باشد، محصول جدیدی به حساب شما اضافه شده است. اگر فیلد newValue
وجود نداشته باشد، محصول از حساب شما حذف شده است.
فیلد reportingContext
فقط ( SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
, YOUTUBE_CHECKOUT
) را از مقدار شمارش ReportingContextEnum پشتیبانی می کند.
اجرای خود را تست کنید
در اینجا یک نمونه اعلان وجود دارد که می توانید برای آزمایش URI و رمزگشایی پاسخ به تماس خود استفاده کنید:
curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}
در پاسخ به این تماس، URI پاسخ به تماس شما باید یک کد پاسخ موفق را برگرداند. پیام رمزگشایی شده باید دارای مقدار زیر باشد:
{
"account": "accounts/1234",
"managingAccount": "accounts/5678",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~000000000000",
"resource": "accounts/1234/products/ONLINE~en~US~000000000000",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}