Push-Benachrichtigungen bei Änderungen an Ihren Kontodaten erhalten

Mit der Merchant Notifications API können Sie Push-Benachrichtigungen bei Änderungen an Kontodaten abrufen. Wenn Sie beispielsweise Benachrichtigungen zu Produktstatusänderungen abonnieren, können Sie in Echtzeit benachrichtigt werden, wenn ein Produkt abgelehnt wird. Sie können Benachrichtigungen für alle Ihre Unterkonten oder andere verknüpfte Konten abonnieren.

Dieser Leitfaden enthält Beispiele dafür, wie Benachrichtigungen zu Produktstatusänderungen verwaltet werden. Sie können diese Beispiele verwenden, um Benachrichtigungen für andere Ereignisse zu verwalten. Ändern Sie dazu den Wert des Felds registeredEvent in Ihren Anfragen. Eine vollständige Liste der Ereignistypen findest du in der Referenz zur Merchant Notifications API.

Abonnieren

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

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

Sie können denselben Callback-URI für mehrere Abos verwenden. Wir empfehlen die Verwendung eines eindeutigen Callback-URI pro erweitertem Konto und Ereignistyp, um die Belastung von Push-Anfragen an einen einzelnen URI zu minimieren.

Hier ist eine Beispielanfrage zum Abonnieren von Benachrichtigungen über Änderungen des Produktstatus eines bestimmten Händlerkontos. Verwende die Händler-ID des Kontos, an das die Benachrichtigungen gesendet werden sollen, als merchantId in der Anfrage-URL und die Händler-ID des Kontos, für das Benachrichtigungen empfangen werden sollen, als targetMerchantId im Anfragetext. Wenn dein Konto ein eigenständiges Konto ohne verknüpfte Konten ist und du Benachrichtigungen für dein eigenes Konto erhalten möchtest, verwende an beiden Stellen deine 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"
}

Bei erfolgreichen Aufrufen wird ein name für Ihr Abo zurückgegeben, einschließlich einer Abo-ID:

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

Du kannst diese name für GET- und DELETE-Einzelabos verwenden.

Sie können Benachrichtigungen über Änderungen des Produktstatus für alle Ihre verknüpften Konten abonnieren, indem Sie "allManagedAccounts": true anstelle von targetAccount in Ihre Anfrage aufnehmen:

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

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

Verwenden Sie zum Aktualisieren eines vorhandenen Abos PATCH mit einem update_mask, um die zu aktualisierenden Felder und die neuen Werte im JSON-Text anzugeben:

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

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

Benachrichtigungen decodieren

Nachdem Sie ein Abo 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 ein lesbares Textformat decodieren, das in Ihrer Implementierung verwendet werden soll. Hier ist ein Beispiel für einen Spring Boot-Controller, den Sie zur Verarbeitung der codierten Daten verwenden können:

@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 einen decodierten 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"

Die Implementierung testen

Hier ist eine Beispielbenachrichtigung, mit der Sie den Callback-URI und die Decodierung testen können:

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

Als Antwort auf diesen Aufruf sollte der Callback-URI einen Code für eine erfolgreiche Antwort zurückgeben. Die decodierte Nachricht sollte den folgenden Wert haben:

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