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