קבלת התראות על שינויים בנתוני החשבון

אפשר להשתמש ב-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"