يمكنك تلقّي إشعارات فورية بالتغييرات التي تطرأ على بيانات حسابك.

يمكنك استخدام Merchant Notifications API لتلقّي إشعارات فورية عند حدوث تغييرات. إلى بيانات الحساب. على سبيل المثال، إذا اشتركت في خدمة تغيير حالة المنتج الإشعارات، يمكن إعلامك في الوقت الفعلي عند رفض منتج ما. يمكنك الاشتراك في الإشعارات لأي من الحسابات الفرعية أو المرتبطة الأخرى الحسابات.

يقدّم هذا الدليل أمثلة على كيفية إدارة الإشعارات الخاصة بحالة المنتج. التغييرات. يمكنك استخدام هذه الأمثلة لإدارة الإشعارات لأحداث أخرى كما يلي: تغيير قيمة الحقل registeredEvent في طلباتك. للحصول على قائمة بأنواع الأحداث، راجِع Merchant Notifications API المرجع.

اشتراك

لتلقّي الإشعارات، تحتاج إلى callBackUri. يجب أن يكون معرّف الموارد المنتظم (URI) لمعاودة الاتصال استيفاء المتطلبات التالية:

  • يجب أن يكون عنوان HTTPS متاحًا للجميع ومزوّدًا بشهادة طبقة مقابس آمنة (SSL) صالحة. وموقَّعة من مرجع مصدق.
  • يجب قبول طلبات HTTP POST التي تتضمّن العنوان Content-Type القيمة application/json.
  • يجب عرض أحد رموز الاستجابة التالية للإقرار بأنّ .
    • 102
    • 200
    • 201
    • 202
    • 204

يمكنك استخدام نفس معرِّف الموارد المنتظم (URI) لمعاودة الاتصال مع اشتراكات متعددة. ننصح باستخدام معرف موارد منتظم (URI) فريد لمعاودة الاتصال لكل متقدم account، لكل نوع حدث تقليل تحميل طلبات الدفع إلى عنوان 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"
"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"

إذا لم يكن هناك حقل old_value في الإشعار، يعني هذا أنّ المنتج الجديد تمت إضافتها إلى حسابك. أمّا إذا لم يتوفّر الحقل new_value، هذا يعني أنّه تم حذف المنتج. من حسابك.

يمكن استخدام الحقل reporting_context فقط (SHOPPING_ADS وLOCAL_INVENTORY_ADS وYOUTUBE_SHOPPING) من قيمة التعداد ReportingContextEnum.

التحقق من نجاح العملية

إليك نموذج إشعار يمكنك استخدامه لاختبار معرّف الموارد المنتظم (URI) لمعاودة الاتصال وفك ترميزه:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

ردًا على هذه المكالمة، من المفترض أن يعرض معرّف الموارد المنتظم (URI) لمعاودة الاتصال استجابة ناجحة الرمز. يجب أن تحتوي الرسالة التي تم فك ترميزها على القيمة التالية:

"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"