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 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'intestazione Content-Type e application/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": trueinvece 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"

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 di 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"