Ricevi notifiche push per le modifiche ai dati del tuo account

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'intestazione Content-Type e il valore application/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": trueanziché 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"