Ricevi notifiche push per le modifiche ai dati del tuo account

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