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 encabezadoContent-Type
y Valorapplication/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"