Puoi utilizzare l'API Merchant Notifications per ricevere notifiche push per le modifiche ai dati dell'account. Ad esempio, se ti abboni alla modifica dello stato dei prodotti. puoi ricevere una notifica in tempo reale quando un prodotto non viene approvato. Puoi iscriverti alle notifiche per qualsiasi tuo subaccount o altri account collegati .
Questa guida fornisce esempi su come gestire le notifiche per lo stato dei prodotti
modifiche. Puoi utilizzare questi esempi per gestire le notifiche per altri eventi
modificare il valore del campo registeredEvent
nelle richieste. Per un
dei tipi di evento, consulta l'articolo sull'API Merchant Notifications
riferimento.
Iscriviti
Per ricevere le notifiche devi avere un callBackUri
. L'URI di callback deve
devono soddisfare i seguenti requisiti:
- Deve essere un indirizzo HTTPS pubblicamente accessibile con un certificato SSL valido, firmato da un'autorità di certificazione.
- Deve accettare le richieste HTTP
POST
con l'intestazioneContent-Type
eapplication/json
valore. - Devi restituire uno dei seguenti codici di risposta per confermare che il
notifica.
102
200
201
202
204
Puoi utilizzare lo stesso URI di callback per più sottoscrizioni. È consigliabile utilizzare un URI di callback univoco per ogni Google Cloud, per tipo di evento al minimo il carico delle richieste push a un singolo URI.
Ecco un esempio di richiesta di iscrizione alle notifiche per le modifiche allo stato dei prodotti
per un account commerciante specifico. Utilizza l'ID commerciante dell'account che deve
ricevere le notifiche come merchantId
nell'URL di richiesta e
ID commerciante dell'account per cui ricevere notifiche come
targetMerchantId
nel corpo della richiesta. Se il tuo account è un account autonomo
account senza account collegati e desideri ricevere notifiche relative ai tuoi
il tuo account, utilizza il tuo ID commerciante in entrambe le posizioni.
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
Le chiamate riuscite restituiscono un
name
per il tuo
abbonamento, incluso un ID abbonamento:
{
"name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"targetAccount": "accounts/targetMerchantId",
"callBackUri": "https://example.com"
}
Puoi utilizzare questo name
per GET
e DELETE
singoli abbonamenti.
Puoi iscriverti alle notifiche relative alle modifiche dello stato dei prodotti per tutti i tuoi
account collegati includendo "allManagedAccounts": true
invece di un
targetAccount
nella tua richiesta:
POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"allManagedAccounts": true,
"callBackUri": "https://example.com"
}
Per aggiornare un abbonamento esistente, usa PATCH
con un update_mask
per specificare
i campi che vuoi aggiornare e i nuovi valori nel corpo JSON:
PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri
{
"callBackUri": "https://my-own-personal-domain.com"
}
Decodifica delle notifiche
Dopo aver creato un abbonamento, riceverai le notifiche all'indirizzo
callBackUri
nel seguente formato:
{"message":{"data":"{base64_encoded_string}"}}
I dati della notifica sono codificati. Puoi decodificare i dati in un testo leggibile formato da usare nella tua implementazione. Ecco un esempio di controller di avvio a molla potrebbe utilizzare per elaborare i dati codificati:
@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
}
}
Ecco un esempio di base64_encoded_string
che è stato decodificato:
"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"
Se la notifica non contiene alcun campo old_value
, significa che è stato eseguito un nuovo prodotto
aggiunto al tuo account. Se non è presente alcun campo new_value
, il prodotto è stato eliminato
dal tuo account.
Il campo reporting_context
supporta solo (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
) dal valore enum ReportingContextEnum.
Verificare la tua implementazione
Ecco una notifica di esempio che puoi utilizzare per testare l'URI del callback e la decodifica:
curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}
In risposta a questa chiamata, l'URI del callback dovrebbe restituire una risposta riuscita Google Cloud. Il messaggio decodificato deve avere il seguente valore:
"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"