Puoi utilizzare l'API Merchant Notifications per ricevere notifiche push per le modifiche ai dati dell'account. Ad esempio, se ti abboni alle notifiche relative alle modifiche dello stato dei prodotti, puoi ricevere una notifica in tempo reale quando un prodotto non viene approvato. Puoi iscriverti alle notifiche per uno qualsiasi dei tuoi subaccount o altri account collegati.
Questa guida fornisce esempi di come gestire le notifiche per le modifiche dello stato del prodotto. Puoi utilizzare questi esempi per gestire le notifiche per altri eventi modificando il valore del campo registeredEvent
nelle richieste. Per un elenco completo dei tipi di eventi, consulta la documentazione di riferimento dell'API Merchant Notifications.
Iscriviti
Per ricevere le notifiche, devi avere un callBackUri
. L'URI di callback deve soddisfare i seguenti requisiti:
- Deve essere un indirizzo HTTPS accessibile pubblicamente con un certificato SSL valido, firmato da un'autorità di certificazione.
- Deve accettare richieste
POST
HTTP con l'intestazioneContent-Type
e il valoreapplication/json
. - Deve restituire uno dei seguenti codici di risposta per confermare la ricezione della notifica.
102
200
201
202
204
Puoi utilizzare lo stesso URI di callback per più sottoscrizioni. Ti consigliamo di utilizzare un URI di callback univoco per account avanzato e per tipo di evento per ridurre al minimo il carico delle richieste push su un singolo URI.
Di seguito è riportata una richiesta di esempio per iscriversi alle notifiche relative alle modifiche dello stato dei prodotti per un account commerciante specifico. Utilizza l'ID commerciante dell'account che deve ricevere le notifiche come merchantId
nell'URL della richiesta e l'ID commerciante dell'account per cui vuoi ricevere le notifiche come targetMerchantId
nel corpo della richiesta. Se il tuo account è autonomo e non ha account collegati e vuoi ricevere notifiche per 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 elemento 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 codice da name
a GET
e DELETE
per singoli abbonamenti.
Puoi iscriverti alle notifiche relative alle modifiche dello stato dei prodotti per tutti i tuoi account collegati includendo "allManagedAccounts": true
anziché targetAccount
nella 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, utilizza PATCH
con un update_mask
per specificare i campi da 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"
}
Decodificare le notifiche
Dopo aver creato una sottoscrizione, riceverai notifiche al callBackUri
specificato nel seguente formato:
{"message":{"data":"{base64_encoded_string}"}}
I dati della notifica sono codificati. Puoi decodificare i dati in un formato di testo leggibile da utilizzare nell'implementazione. Ecco un esempio di controller di avvio a molla che potresti 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",
"managingAccount": "accounts/merchantId",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}, {
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "JP",
"reportingContext": "SHOPPING_ADS"
},{
"oldValue": "eligible",
"newValue": "disapproved",
"regionCode": "GE",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~1234",
"resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}
Se nella notifica non è presente il campo oldValue
, è stato aggiunto un nuovo prodotto al tuo account. Se non è presente il campo newValue
, il prodotto è stato eliminato dal tuo account.
Il campo reportingContext
supporta solo (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
, YOUTUBE_CHECKOUT
) del 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":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}
In risposta a questa chiamata, l'URI di callback deve restituire un codice di risposta positivo. Il messaggio decodificato deve avere il seguente valore:
{
"account": "accounts/1234",
"managingAccount": "accounts/5678",
"resourceType": "PRODUCT",
"attribute": "STATUS",
"changes": [{
"oldValue": "eligible",
"regionCode": "US",
"reportingContext": "SHOPPING_ADS"
}],
"resourceId": "ONLINE~en~US~000000000000",
"resource": "accounts/1234/products/ONLINE~en~US~000000000000",
"expirationTime": "2024-10-22T02:43:47.461464Z"
}