Puoi utilizzare l'API Merchant Notifications per ricevere notifiche push relative alle modifiche ai dati dell'account. Ad esempio, se ti abboni alle notifiche di modifica dello stato dei prodotti, puoi ricevere una notifica in tempo reale quando un prodotto viene disapprovato. Puoi iscriverti alle notifiche per tutti i tuoi subaccount o altri account collegati.
Questa guida fornisce esempi di come gestire le notifiche per le modifiche allo stato dei prodotti. 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 il riferimento dell'API Merchant Notifications.
Iscriviti
Per ricevere le notifiche, è necessario un callBackUri
. L'URI di callback deve 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
e il valoreapplication/json
. - È necessario 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ù abbonamenti. Ti consigliamo di utilizzare un URI di callback univoco per ogni account avanzato, in base al tipo di evento, al fine di ridurre al minimo il carico delle richieste push a un singolo URI.
Ecco un esempio di richiesta di iscrizione 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 ricevere le notifiche come targetMerchantId
nel corpo della richiesta. Se il tuo account è un account autonomo senza account collegati e vuoi ricevere le notifiche per il tuo account, utilizza il tuo ID commerciante in entrambi.
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 usare questo name
per GET
e DELETE
abbonamenti individuali.
Puoi iscriverti alle notifiche relative alle modifiche dello stato dei prodotti per tutti i tuoi
account collegati includendo nella richiesta "allManagedAccounts": true
anziché
targetAccount
:
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 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"
}
Decodifica le notifiche
Dopo aver creato un abbonamento, riceverai le notifiche relative all'entità callBackUri
specificata 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 nella tua 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"
"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"
Verificare la tua implementazione
Di seguito è riportata una notifica di esempio che puoi utilizzare per testare l'URI di 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 di callback deve restituire un codice di risposta riuscita. 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"