Recibe notificaciones push sobre los cambios en los datos de tu cuenta

Puedes usar la API de Merchant Notifications para recibir notificaciones push sobre los cambios. a datos de la cuenta. Por ejemplo, si te suscribes al cambio de estado del producto notificaciones, puedes recibir una notificación en tiempo real cuando se rechaza un producto. Puedes suscribirte a las notificaciones de cualquiera de tus subcuentas u otras vinculadas de servicio.

En esta guía, se proporcionan ejemplos de cómo administrar las notificaciones de estado de los productos cambios. Puedes usar estos ejemplos para administrar las notificaciones de otros eventos: Cambia el valor del campo registeredEvent en tus solicitudes. Para obtener una lista de los tipos de eventos, consulta la API de Merchant Notifications referencia.

Suscribirse

Para recibir notificaciones, necesitas un callBackUri. El URI de devolución de llamada debe cumplan con los siguientes requisitos:

  • Debe ser una dirección HTTPS de acceso público con un certificado SSL válido. firmado por una autoridad certificadora.
  • Debes aceptar solicitudes HTTP POST con el encabezado Content-Type y Valor application/json.
  • Se debe mostrar uno de los siguientes códigos de respuesta para confirmar que el se recibió la notificación.
    • 102
    • 200
    • 201
    • 202
    • 204

Puedes usar el mismo URI de devolución de llamada para varias suscripciones. Recomendamos usar un URI de devolución de llamada único por valor avanzado cuenta, por tipo de evento, para minimizar la carga de solicitudes de envío a un solo URI.

A continuación, se incluye un ejemplo de solicitud para suscribirse a notificaciones sobre cambios en el estado de los productos para una cuenta de comerciante específica. Usa el ID del comerciante de la cuenta que debería recibirás las notificaciones como merchantId en la URL de la solicitud, y el ID del comerciante de la cuenta para la que se recibirán notificaciones, ya que targetMerchantId en el cuerpo de la solicitud. Si tu cuenta es independiente no tiene cuentas vinculadas y deseas recibir notificaciones de tu tu propia cuenta, usa tu propio ID de comerciante en ambos lugares.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Las llamadas correctas devuelven un name para tu suscripción, incluido un ID de suscripción:

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Puedes usar este name para GET y DELETE suscripciones individuales.

Puedes suscribirte a las notificaciones de cambios en el estado de los productos de todos tus cuentas vinculadas al incluir "allManagedAccounts": true, en lugar de una targetAccount en tu solicitud:

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

Para actualizar una suscripción existente, usa PATCH con un update_mask para especificar. los campos que deseas actualizar y los valores nuevos en el cuerpo JSON:

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

Decodificar notificaciones

Después de crear una suscripción, recibirás notificaciones de la callBackUri en el siguiente formato:

{"message":{"data":"{base64_encoded_string}"}}

Los datos de la notificación están codificados. Puedes decodificar los datos en un texto legible formato para usar en tu implementación. Este es un ejemplo de un controlador de arranque por resorte podrías usar para procesar los datos codificados:

@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
  }
}

Este es un ejemplo de un base64_encoded_string que se decodificó:

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

Cómo probar tu implementación

A continuación, se incluye una notificación de ejemplo que puedes usar para probar tu URI de devolución de llamada y la decodificación:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

En respuesta a esta llamada, tu URI de devolución de llamada debería mostrar una respuesta correcta. automático. El mensaje decodificado debe tener el siguiente valor:

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