يمكنك استخدام Merchant Notifications API لتلقّي إشعارات فورية بشأن التغييرات التي تطرأ على بيانات المنتجات. على سبيل المثال، إذا اشتركت في تلقّي إشعارات بشأن تغيير حالة المنتجات، يمكنك تلقّي إشعار في الوقت الفعلي عند رفض أحد المنتجات. يمكنك الاشتراك في تلقّي إشعارات لأي من حساباتك الفرعية أو الحسابات المرتبطة الأخرى.
يقدّم هذا الدليل أمثلة على كيفية إدارة الإشعارات المتعلقة بتغييرات حالة المنتجات. يمكنك استخدام هذه الأمثلة لإدارة الإشعارات الخاصة بأحداث أخرى من خلال تغيير قيمة الحقل registeredEvent
في طلباتك. للحصول على قائمة كاملة بأنواع الأحداث، راجِع مرجع Merchant Notifications API.
اشتراك
لتلقّي الإشعارات، يجب أن يكون لديك callBackUri
. يجب أن يستوفي معرّف الموارد المنتظم لعنوان URL الخاص بوظيفة الاستدعاء المتطلبات التالية:
- يجب أن يكون عنوان HTTPS متاحًا للجميع ويتضمّن شهادة طبقة مقابس آمنة صالحة موقّعة من مرجع تصديق.
- يجب قبول طلبات HTTP
POST
التي تتضمّن العنوانContent-Type
والقيمةapplication/json
. - يجب أن تعرض أحد رموز الاستجابة التالية للإقرار باستلام الإشعار.
102
200
201
202
204
يمكنك استخدام معرّف الموارد المنتظم (URI) نفسه لعدة اشتراكات. ننصحك باستخدام معرّف URI فريد لكل حساب متقدّم، ولكل نوع حدث، وذلك للحدّ من عدد طلبات الإرسال إلى معرّف URI واحد.
في ما يلي نموذج لطلب الاشتراك في تلقّي إشعارات بشأن التغييرات في حالة المنتجات لحساب تاجر معيّن.
POST https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/TARGETACCOUNT_ID",
"callBackUri": "https://example.com"
}
غيِّر القيم في السلسلة على الشكل التالي:
- ACCOUNT_ID: المعرّف الفريد للحساب الذي يجب أن يتلقّى الإشعارات.
- TARGETACCOUNT_ID: المعرّف الفريد للحساب الذي تريد تلقّي إشعارات بشأنه
إذا كان حسابك على Merchant Center حسابًا مستقلاً بدون حسابات مرتبطة، وكنت تريد تلقّي إشعارات لحسابك، استبدِل كلا المتغيّرين برقم تعريف حسابك.
تعرض الطلبات الناجحة
name
لاشتراكك، بما في ذلك معرّف الاشتراك:
{
"name":"accounts/ACCOUNT_ID/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/TARGETACCOUNT_ID",
"callBackUri": "https://example.com"
}
يمكنك استخدام هذا name
في GET
وDELETE
الاشتراكات الفردية.
يمكنك الاشتراك في تلقّي إشعارات بشأن التغييرات في حالة المنتج لجميع حساباتك المرتبطة من خلال تضمين "allManagedAccounts": true
بدلاً من targetAccount
في طلبك:
POST https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
لتعديل اشتراك حالي، استخدِم PATCH
مع update_mask
لتحديد الحقول التي تريد تعديلها والقيم الجديدة في نص JSON:
PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/ACCOUNT_ID/notificationsubscriptions/SUBSCRIPTION_ID?update_mask=callBackUri
{
"callBackUri": "https://my-own-personal-domain.com"
}
فك تشفير الإشعارات
بعد إنشاء اشتراك، ستتلقّى إشعارات إلى callBackUri
المحدّد بالتنسيق التالي:
{"message":{"data":"{base64_encoded_string}"}}
يتم تشفير بيانات الإشعارات. يمكنك فك ترميز البيانات إلى نص قابل للقراءة بتنسيق لاستخدامه في عملية التنفيذ. في ما يلي نموذج لوحدة تحكّم Spring Boot يمكنك استخدامها لمعالجة البيانات المرمّزة:
@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/TARGETACCOUNT_ID",
"managingAccount": "accounts/ACCOUNT_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/TARGETACCOUNT_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}
استجابةً لهذا الطلب، يجب أن يعرض معرّف الموارد المنتظم الخاص بوظيفة الاستدعاء رمز استجابة ناجحة. يجب أن تتضمّن الرسالة التي تم فك تشفيرها القيمة التالية:
{
"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"
}