Puedes usar la API de Merchant Notifications para recibir notificaciones push sobre los cambios en los datos de la cuenta. Por ejemplo, si te suscribes a las notificaciones de cambios de estado de los productos, puedes recibir notificaciones en tiempo real cuando se rechace un producto. Puedes suscribirte a las notificaciones de cualquiera de tus cuentas secundarias o de otras cuentas vinculadas.
En esta guía, se proporcionan ejemplos de cómo administrar notificaciones para cambios en el estado de los productos. Puedes usar estos ejemplos para administrar notificaciones de otros eventos. Para ello, cambia el valor del campo registeredEvent
en tus solicitudes. Para obtener una lista completa de los tipos de eventos, consulta la referencia de la API de Merchant Notifications.
Suscribirse
Para recibir notificaciones, necesitas un callBackUri
. Tu URI de devolución de llamada debe cumplir 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 encabezadoContent-Type
y el valorapplication/json
. - Debe mostrar uno de los siguientes códigos de respuesta para confirmar que se recibió la notificación.
102
200
201
202
204
Puedes usar el mismo URI de devolución de llamada para varias suscripciones. Te recomendamos que uses un URI de devolución de llamada único por cuenta avanzada y por tipo de evento para minimizar la carga de solicitudes push en un solo URI.
A continuación, se incluye un ejemplo de solicitud de suscripción a notificaciones sobre cambios en el estado del producto
para una cuenta de comerciante específica. Usa el ID del comercio de la cuenta que debe recibir las notificaciones como merchantId
en la URL de la solicitud y el ID del comercio de la cuenta para recibir notificaciones como targetMerchantId
en el cuerpo de la solicitud. Si tu cuenta es independiente
sin cuentas vinculadas y deseas recibir notificaciones de la
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 muestran 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 esta name
para GET
y DELETE
suscripciones individuales.
Para suscribirte a notificaciones sobre cambios en el estado de los productos de todas tus cuentas vinculadas, incluye "allManagedAccounts": true
en lugar de 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"
}
Cómo decodificar notificaciones
Después de crear una suscripción, recibirás notificaciones del callBackUri
especificado en el siguiente formato:
{"message":{"data":"{base64_encoded_string}"}}
Los datos de la notificación están codificados. Puedes decodificar los datos a un formato de texto legible para usarlos en tu implementación. Este es un controlador de arranque de primavera de muestra que 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",
"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"
}
Si no hay un campo oldValue
en la notificación, significa que se agregó un producto nuevo a tu cuenta. Si no hay un campo newValue
, significa que el producto se borró de tu cuenta.
El campo reportingContext
solo admite (SHOPPING_ADS
, LOCAL_INVENTORY_ADS
, YOUTUBE_SHOPPING
, YOUTUBE_CHECKOUT
) del valor de enumeración ReportingContextEnum.
Cómo probar tu implementación
Esta es una notificación de muestra 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":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}
En respuesta a esta llamada, el URI de devolución de llamada debe mostrar un código de respuesta correcta. El mensaje decodificado debe tener el siguiente valor:
{
"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"
}