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 HeaderContent-Type
und dem Wertapplication/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"