En esta página, se describen los códigos de error canónicos que debes devolver en las respuestas de la API cuando realices la integración con Google a través del Universal Commerce Protocol (UCP). Los códigos de error coherentes garantizan una comunicación clara y ayudan a Google a controlar diferentes situaciones de manera adecuada.
Cuando se produce un error comercial, tu API debe devolver un mensaje de respuesta que incluya el code adecuado de la tabla. Para algunos códigos de error, se recomienda una estructura JSON específica para el array messages en la respuesta. Estos ejemplos se proporcionan en la sección Ejemplos de códigos de error que se encuentra debajo de la tabla. En estos ejemplos, debes usar el campo path para proporcionar información más específica sobre la ubicación del error dentro del objeto de solicitud o respuesta.
Manejo de errores
La forma de informar errores depende del tipo de error:
Errores de protocolo o servidor:
- Usa códigos de estado HTTP estándar (p.ej., 4xx para errores del cliente y 5xx para errores del servidor) para problemas como solicitudes con formato incorrecto, fallas de autenticación o falta de disponibilidad del servidor.
- Consulta la Especificación de UCP para obtener más detalles.
Errores o advertencias de lógica empresarial:
- Devuelve un estado HTTP 200 OK. Esto incluye los rechazos de pagos y los rechazos por fraude, incluso si tu puerta de enlace de pagos descendente muestra un error 4xx o 5xx.
- Describe el problema dentro del array
messagesen el cuerpo de la respuesta JSON. - Cada objeto del array
messagesdebe incluir lo siguiente:type:"error"o"warning"code: Es un código estandarizado de esta guía. No uses códigos genéricos o no reconocidos, como"invalid".content: Es una descripción legible.severity: Es obligatorio cuandotypees"error". Este campo indica explícitamente si el error es terminal (unrecoverable) o te permite solicitarle al comprador que corrija el problema (recoverable), en lugar de depender del código de error en sí.
Tipos de mensajes: Error versus advertencia
El campo type en el array de mensajes indica la gravedad del problema. La UCP define dos tipos principales:
error: Indica que no se pudo completar la operación solicitada. Es probable que la plataforma o el usuario deban tomar medidas y volver a intentarlo. Consulta la especificación de message-error.- La naturaleza terminal de un error se determina por el campo
severity(unrecoverableorecoverable), no por el errorcode.
- La naturaleza terminal de un error se determina por el campo
warning: Indica que la operación no se bloqueó, pero hay algo notable que se debe comunicar al usuario. Esto no detiene el proceso, pero proporciona un contexto importante. Consulta la especificación de message-warning.
Referencia de código de error
| Código de error | Tipo recomendado | Descripción |
|---|---|---|
out_of_stock |
Error | El artículo no está disponible. Por lo general, esto da como resultado ucp.status: “error”. Usa el campo path para indicar el índice del elemento en las confirmaciones de compra con varios elementos. Consulta el ejemplo a continuación. |
item_unavailable |
Error | No se pudo encontrar el elemento. Por lo general, esto genera ucp.status: “error” para estos errores relacionados con el elemento. |
item_ineligible |
Error | El elemento existe, pero no se puede comprar con la UCP. |
quantity_invalid_limit_exceeded |
Error | La cantidad solicitada supera el límite permitido. Consulta el ejemplo a continuación. |
quantity_invalid_minimum_not_met |
Error | La cantidad solicitada es inferior a la cantidad mínima requerida. |
totals_changed |
Advertencia | El precio o los demás totales cambiaron desde el último paso. Usa el campo path para indicar qué total cambió. Consulta el ejemplo a continuación. |
totals_invalid_minimum_not_met |
Error | El valor del pedido no cumple con el requisito mínimo. |
missing_buyer_info |
Error | Falta la información obligatoria del comprador. Usa el campo path para especificar el campo faltante. Consulta el ejemplo a continuación. |
address_undeliverable |
Error | Este es un código de error estándar de UCP. Usa el campo path para indicar el destino específico o el artículo restringido. Consulta el ejemplo a continuación. |
address_unverifiable |
Error | No se pudo verificar la dirección proporcionada. Usa el campo path para indicar si se trata de la dirección de facturación o de envío. Consulta el ejemplo a continuación. |
missing_fulfillment_info |
Error | Falta información de cumplimiento obligatoria. Usa el campo path para especificar el campo faltante. |
eligibility_invalid |
Error | El usuario o el pedido no son aptos para la acción. Este es un código de error estándar de UCP. Usa el campo path para obtener detalles. |
discount_code_invalid |
Advertencia | El código de descuento no es válido. No se encontró el código o tiene un formato incorrecto. |
discount_code_expired |
Advertencia | El código de descuento venció. |
discount_code_already_applied |
Advertencia | Ya se aplicó el código de descuento. |
discount_code_combination_disallowed |
Advertencia | El código de descuento no se puede combinar con otras ofertas. |
discount_code_user_not_logged_in |
Advertencia | El usuario debe estar conectado para usar el código de descuento. |
discount_code_user_ineligible |
Advertencia | El usuario no es apto para usar el código de descuento. |
missing_billing_info |
Error | Falta la información de facturación obligatoria. Usa el campo path para especificar los campos de dirección de facturación que faltan. Consulta el ejemplo a continuación. |
identity_required |
Error | Se requiere la identidad del usuario para la operación solicitada, pero no se proporcionó, no es válida, venció o no se puede verificar. En el caso de REST, usa el código de estado 401. Consulta el ejemplo a continuación. |
insufficient_scope |
Error | El token de identidad del usuario es válido, pero no tiene los permisos que requiere la operación. En el caso de REST, usa el código de estado 403. Consulta el ejemplo a continuación. |
payment_declined |
Error | La entidad emisora de la tarjeta o el banco rechazaron el pago. Entre los motivos, se pueden incluir fondos insuficientes, sospecha de fraude o problemas con la tarjeta. Consulta el ejemplo a continuación. |
payment_failed |
Error | El pago falló debido a un problema técnico durante el procesamiento, como un error de red, un tiempo de espera agotado de la puerta de enlace o un problema de integración, que impidió que el banco tomara una decisión. |
payment_ineligible |
Error | No se acepta la forma de pago seleccionada. Es adecuado para los casos en los que el usuario necesita probar otra forma de pago. |
rejected_for_fraud |
Error | Se rechazó el pedido debido a sospechas de fraude. Consulta el ejemplo a continuación. |
Ejemplos de códigos de error
En esta sección, se proporcionan ejemplos de JSON para el array messages para códigos de error específicos.
out_of_stock
Confirmación de compra de un solo artículo:
{
"type": "error",
"severity": "unrecoverable",
"code": "out_of_stock",
"content": "Unfortunately, the item 'Example Product 1' is out of stock."
}
Cobro de varios artículos:
Usa el campo path para indicar el índice del elemento específico que está agotado.
{
"type": "error",
"severity": "recoverable",
"code": "out_of_stock",
"path": "$.checkout.line_items[1]",
"content": "The item 'Example Product 2' is out of stock. Remove it from your cart to continue."
}
quantity_invalid_limit_exceeded
{
"type": "error",
"severity": "recoverable",
"code": "quantity_invalid_limit_exceeded",
"path": "$.checkout.line_items[0].quantity",
"content": "The requested quantity for 'Example Product 2' exceeds the maximum allowed limit of 5."
}
totals_changed
{
"type": "warning",
"code": "totals_changed",
"path": "$.totals[2]",
"content": "Shipping cost has changed."
}
missing_buyer_info
{
"type": "error",
"severity": "recoverable",
"code": "missing_buyer_info",
"path": "$.buyer.first_name",
"content": "Missing buyer first name."
}
address_undeliverable
Restricción a nivel del pedido (p.ej., no admitido el código postal):
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"content": "Delivery is not supported for the provided zipcode."
}
Restricción a nivel del artículo:
Usa el campo path para indicar un artículo específico que no se puede entregar en el destino elegido (p.ej., prohibiciones específicas del estado).
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"path": "$.checkout.line_items[1]",
"content": "The item 'Example Product 2' cannot be delivered to the selected address."
}
address_unverifiable
Dirección de facturación:
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.payment.instruments[0].billing_address",
"content": "Invalid billing address. Update the address before trying again."
}
Dirección de entrega:
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.fulfillment.methods[0].destinations[0]",
"content": "The fulfillment address couldn't be verified. Update the address and try again."
}
missing_billing_info
Usa el campo path para especificar los campos faltantes en la dirección de facturación.
{
"type": "error",
"severity": "recoverable",
"code": "missing_billing_info",
"path": "$.payment.instruments[0].billing_address.street_address",
"content": "Missing billing street address."
}
identity_required
En la API de REST, este error se debe devolver con el código de estado HTTP 401.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "identity_required",
"content": "User identity is required to access order history."
}
insufficient_scope
En la API de REST, este error se debe mostrar con el código de estado HTTP 403.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "insufficient_scope",
"content": "This operation requires scopes: dev.ucp.shopping.order:read, dev.ucp.shopping.order:manage"
}
Errores de pago
payment_declined
{
"type": "error",
"severity": "recoverable",
"code": "payment_declined",
"path": "$.payment.instruments[0]",
"content": "Payment was declined by the issuer. Try a different payment method or contact your bank."
}
rejected_for_fraud
{
"type": "error",
"severity": "recoverable",
"code": "rejected_for_fraud",
"path": "$.payment.instruments[0]",
"content": "The order was rejected due to suspected fraud. Try a different payment method."
}