Interfejs API powiadomień sprzedawcy umożliwia otrzymywanie powiadomień push o zmianach do danych na koncie. Na przykład jeśli zasubskrybujesz informację o zmianie stanu produktu powiadomień, możesz otrzymywać powiadomienia w czasie rzeczywistym o odrzuceniu produktu. Możesz zasubskrybować powiadomienia dotyczące subkonta lub inne powiązane konta kont.
W tym przewodniku znajdziesz przykłady zarządzania powiadomieniami o stanie produktów
zmian. Możesz wykorzystać te przykłady do zarządzania powiadomieniami o innych wydarzeniach przez
zmianę wartości w polu registeredEvent
w Twoich żądaniach. Aby uzyskać pełną
z listą typów zdarzeń – zapoznaj się z artykułem na temat interfejsu Merchant Notification API
odniesienie.
Subskrybuj
Aby otrzymywać powiadomienia, musisz mieć callBackUri
. Identyfikator URI wywołania zwrotnego musi
spełniasz te wymagania:
- Musi to być publicznie dostępny adres HTTPS z ważnym certyfikatem SSL. podpisany przez urząd certyfikacji.
- Musi akceptować żądania HTTP
POST
z nagłówkiemContent-Type
i Wartośćapplication/json
. - Musisz zwrócić jeden z tych kodów odpowiedzi, aby potwierdzić, że
odebrano powiadomienie.
102
200
201
202
204
Możesz użyć tego samego identyfikatora URI wywołania zwrotnego dla wielu subskrypcji. Zalecamy użycie unikalny identyfikator URI wywołania zwrotnego dla każdego zaawansowanych funkcji , według typu zdarzenia, zminimalizować obciążenie żądań push wysyłanych do pojedynczego identyfikatora URI;
Oto przykładowa prośba o zasubskrybowanie powiadomień o zmianach stanu usługi
dla konkretnego konta sprzedawcy. Użyj identyfikatora sprzedawcy na koncie, które powinno
będzie otrzymywać powiadomienia jako element merchantId
w adresie URL żądania oraz
identyfikatora sprzedawcy konta, o którym chcesz otrzymywać powiadomienia.
targetMerchantId
w treści żądania. Jeśli konto jest oddzielne
z kontem, na którym nie masz połączonych kont, a chcesz otrzymywać powiadomienia dotyczące
na swoim koncie, w obu miejscach użyj swojego identyfikatora sprzedawcy.
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
Udane połączenia zwracają błąd
name
dla
subskrypcji, w tym jej identyfikator:
{
"name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
Możesz wykorzystać tę kwotę z name
do GET
i DELETE
indywidualnych subskrypcji.
Możesz zasubskrybować powiadomienia o zmianach stanu wszystkich swoich
połączonych kont przez dodanie parametru "allManagedAccounts": true
zamiast
targetAccount
w Twoim żądaniu:
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
Aby zaktualizować istniejącą subskrypcję, użyj właściwości PATCH
z parametrem update_mask
, aby określić tę wartość
pola, które chcesz zaktualizować, oraz nowe wartości w treści JSON:
PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri
{
"callBackUri": "https://my-own-personal-domain.com"
}
Dekodowanie powiadomień
Po utworzeniu subskrypcji będziesz otrzymywać powiadomienia na określony
callBackUri
w tym formacie:
{"message":{"data":"{base64_encoded_string}"}}
Dane powiadomień są zakodowane. Możesz zdekodować dane do postaci czytelnego tekstu. do wykorzystania w implementacji. Oto przykładowy kontroler sprężynowego rozruchu, których może użyć do przetwarzania zaszyfrowanych danych:
@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
}
}
Oto przykład zdekodowanego elementu 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"
Jeśli w powiadomieniu nie ma pola old_value
, oznacza to, że nowy produkt został
dodany do Twojego konta. Jeśli nie ma pola new_value
, produkt został usunięty.
z Twojego konta.
Pole reporting_context
obsługuje tylko wartości (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
) z wartości wyliczeniowej ReportingContextEnum.
Testowanie implementacji
Oto przykładowe powiadomienie, które możesz wykorzystać do przetestowania identyfikatora URI wywołania zwrotnego i dekodowania:
curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}
W odpowiedzi na to wywołanie identyfikator URI wywołania zwrotnego powinien zwracać uznaną odpowiedź w kodzie. Zdekodowany komunikat powinien mieć taką wartość:
"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"