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 HeaderContent-Type
undapplication/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"
Wenn die Benachrichtigung kein Feld old_value
enthält, wurde ein neues Produkt
die Ihrem Konto hinzugefügt wurden. Wenn kein Feld „new_value
“ vorhanden ist, wurde das Produkt gelöscht
aus Ihrem Konto.
Das Feld reporting_context
unterstützt nur (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
) aus dem Enum-Wert ReportingContextEnum.
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"