Push-Benachrichtigungen bei Änderungen an Ihren Kontodaten erhalten

Sie können die Merchant Notifications API verwenden, um Push-Benachrichtigungen über Änderungen zu erhalten mit Kontodaten. Wenn Sie beispielsweise eine Statusänderung Benachrichtigungen erhalten Sie in Echtzeit, wenn ein Produkt abgelehnt wird. Sie können Benachrichtigungen für alle Ihre Unterkonten oder andere verknüpfte Konten.

Dieser Leitfaden enthält Beispiele zum Verwalten von Benachrichtigungen zum Produktstatus Änderungen. Mit diesen Beispielen können Sie Benachrichtigungen für andere Ereignisse verwalten, indem Sie den Wert des Felds registeredEvent in Ihren Anfragen ändern. Für eine vollständige Liste der Ereignistypen siehe Merchant Notifications API Referenz.

Abonnieren

Um Benachrichtigungen zu erhalten, benötigst du eine callBackUri. Der Callback-URI muss die folgenden Anforderungen erfüllen:

  • Muss eine öffentlich zugängliche HTTPS-Adresse mit einem gültigen SSL-Zertifikat sein von einer Zertifizierungsstelle signiert.
  • HTTP-POST-Anfragen mit dem Header Content-Type und application/json-Wert.
  • Sie müssen einen der folgenden Antwortcodes zurückgeben, um zu bestätigen, dass der Benachrichtigung erhalten.
    • 102
    • 200
    • 201
    • 202
    • 204

Du kannst denselben Callback-URI für mehrere Abos verwenden. Wir empfehlen die Verwendung von eindeutige Callback-URI pro erweiterter Konto, pro Ereignistyp in die Last von Push-Anfragen an einen einzelnen URI zu minimieren.

Hier ist eine Beispielanfrage, mit der Sie über Änderungen des Produktstatus benachrichtigt werden können. für ein bestimmtes Händlerkonto. Verwenden Sie die Händler-ID des Kontos, das die Benachrichtigungen als merchantId in der Anfrage-URL erhalten und der Händler-ID des Kontos, für das Benachrichtigungen gesendet werden sollen, targetMerchantId im Anfragetext. Wenn Ihr Konto ein eigenständiges Konto ist keine verknüpften Konten haben und Sie Benachrichtigungen für Ihre Konto besitzen, verwenden Sie an beiden Stellen Ihre eigene Händler-ID.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Erfolgreiche Aufrufe geben eine name für Ihr Abo, einschließlich Abo-ID:

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Du kannst mit diesem name einzelne Abos GET und DELETE.

Sie können Benachrichtigungen über Änderungen des Produktstatus für alle Ihre verknüpfter Konten, indem "allManagedAccounts": true anstelle eines targetAccount in Ihrer Anfrage:

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

Wenn Sie ein vorhandenes Abo aktualisieren möchten, verwenden Sie PATCH mit einem update_mask zur Angabe die Felder, die Sie aktualisieren möchten, und die neuen Werte im JSON-Text:

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

Benachrichtigungen decodieren

Nachdem Sie ein Abonnement erstellt haben, erhalten Sie Benachrichtigungen an die angegebene callBackUri im folgenden Format:

{"message":{"data":"{base64_encoded_string}"}}

Die Benachrichtigungsdaten sind codiert. Sie können die Daten in einen lesbaren Text decodieren Format für Ihre Implementierung. Hier ist ein Beispiel für einen Spring Boot-Controller, die codierten Daten verarbeiten kann:

@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
  }
}

Hier ein Beispiel für eine base64_encoded_string, die decodiert wurde:

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

Die Implementierung testen

Mit der folgenden Beispielbenachrichtigung können Sie den Callback-URI und die Decodierung testen:

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

Als Reaktion auf diesen Aufruf sollte Ihre Callback-URI eine erfolgreiche Antwort zurückgeben. Code hinzu. Die decodierte Nachricht sollte folgenden Wert enthalten:

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