برای تغییرات داده‌های حسابتان، اعلان‌های فشاری دریافت کنید

می‌توانید از 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"
}