אפשר להשתמש ב-Merchant Notifications API כדי לקבל התראות על שינויים בנתוני החשבון. לדוגמה, אם נרשמתם לקבלת התראות על שינוי סטטוס של מוצר, תוכלו לקבל התראה בזמן אמת על פסילה של מוצר. תוכלו להירשם לקבלת התראות בכל אחד מחשבונות המשנה שלכם או בחשבונות מקושרים אחרים.
במדריך הזה מפורטות דוגמאות לניהול התראות לגבי שינויים בסטטוסים של המוצרים. אפשר להשתמש בדוגמאות האלה כדי לנהל התראות לגבי אירועים אחרים על ידי שינוי הערך בשדה registeredEvent
בבקשות. בחומר העזר בנושא Merchant התראות API תוכלו למצוא רשימה מלאה של סוגי האירועים.
הרשמה
כדי לקבל התראות, צריך callBackUri
. ה-URI של הקריאה החוזרת (callback) חייב לעמוד בדרישות הבאות:
- חייבת להיות כתובת HTTPS נגישה לכולם עם אישור SSL תקף, חתום על ידי רשות אישורים.
- חובה לקבל בקשות HTTP
POST
עם הערךContent-Type
הכותרת והערךapplication/json
. - כדי לאשר שההודעה התקבלה, עליכם להחזיר אחד מקודי התגובה הבאים.
102
200
201
202
204
אפשר להשתמש באותו 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"
"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"
בדיקת ההטמעה
הנה דוגמה להודעה שאפשר להשתמש בה כדי לבדוק את ה-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"