Esta página descreve os códigos de erro canônicos que você precisa retornar nas respostas da API ao fazer a integração com o Google usando o Protocolo de Comércio Universal (UCP). Códigos de erro consistentes garantem uma comunicação clara e ajudam o Google a lidar com diferentes cenários de maneira adequada.
Quando um erro comercial ocorre, a API precisa retornar uma mensagem de resposta que inclua o code apropriado da tabela. Para alguns códigos de erro, uma estrutura JSON específica é recomendada para a matriz messages na resposta. Esses exemplos são fornecidos na seção Exemplos de código de erro abaixo da tabela. Nesses exemplos, use o campo path para fornecer informações mais específicas sobre a localização do erro no objeto de solicitação ou resposta.
Tratamento de erros
A forma de informar erros depende do tipo:
Erros de protocolo/servidor:
- Use códigos de status HTTP padrão (por exemplo, 4xx para erros do cliente, 5xx para erros do servidor) em problemas como solicitações malformadas, falhas de autenticação ou indisponibilidade do servidor.
- Consulte a especificação da UCP para mais detalhes.
Erros/avisos de lógica de negócios:
- Retorne um status HTTP 200 OK. Isso inclui recusas de pagamento e rejeições por fraude, mesmo que o gateway de pagamento downstream retorne um erro 4xx ou 5xx.
- Descreva o problema na matriz
messagesno corpo da resposta JSON. - Cada objeto na matriz
messagesprecisa incluir:type:"error"ou"warning".code: um código padronizado deste guia. Não use códigos genéricos ou não reconhecidos, como"invalid".content: uma descrição legível.severity: obrigatório quandotypeé"error". Esse campo indica explicitamente se o erro é fatal (unrecoverable) ou permite solicitar que o comprador corrija o problema (recoverable), em vez de depender do próprio código de erro.
Tipos de mensagens: erro x aviso
O campo type na matriz de mensagens indica a gravidade do problema. O UCP define dois tipos principais:
error: indica que não foi possível concluir a operação solicitada. A plataforma ou o usuário provavelmente precisará tomar medidas e tentar de novo. Consulte message-error specification.- A natureza terminal de um erro é determinada pelo campo
severity(unrecoverableourecoverable), não pelo errocode.
- A natureza terminal de um erro é determinada pelo campo
warning: indica que a operação não foi bloqueada, mas há algo importante que precisa ser comunicado ao usuário. Isso não interrompe o processo, mas fornece um contexto importante. Consulte a especificação message-warning.
Referência do código de erro
| Código do erro | Tipo recomendado | Descrição |
|---|---|---|
out_of_stock |
Erro | O item não está disponível. Isso geralmente resulta em ucp.status: “error”. Use o campo path para indicar o índice do item em finalizações de compra com vários itens. Confira um exemplo abaixo. |
item_unavailable |
Erro | Não foi possível encontrar o item. Isso geralmente resulta em ucp.status: “error” para esses erros relacionados a itens. |
item_ineligible |
Erro | O item existe, mas não pode ser comprado usando o UCP. |
quantity_invalid_limit_exceeded |
Erro | A quantidade solicitada excede o limite permitido. Confira um exemplo abaixo. |
quantity_invalid_minimum_not_met |
Erro | A quantidade solicitada está abaixo do mínimo exigido. |
totals_changed |
Alerta | O preço ou outros totais mudaram desde a última etapa. Use o campo path para indicar qual total mudou. Confira um exemplo abaixo. |
totals_invalid_minimum_not_met |
Erro | O valor do pedido não atende ao requisito mínimo. |
missing_buyer_info |
Erro | Faltam informações obrigatórias do comprador. Use o campo path para especificar o campo ausente. Confira um exemplo abaixo. |
address_undeliverable |
Erro | Esse é um código de erro padrão da UCP. Use o campo path para indicar o destino específico ou o item restrito. Confira um exemplo abaixo. |
address_unverifiable |
Erro | Não foi possível verificar o endereço informado. Use o campo path para indicar se é o endereço de faturamento ou de entrega. Confira um exemplo abaixo. |
missing_fulfillment_info |
Erro | Faltam informações obrigatórias de fulfillment. Use o campo path para especificar o campo ausente. |
eligibility_invalid |
Erro | O usuário ou pedido não qualificado para a ação. Esse é um código de erro padrão da UCP. Use o campo path para detalhes. |
discount_code_invalid |
Alerta | O código de desconto é inválido. O código não foi encontrado ou está incorreto. |
discount_code_expired |
Alerta | O código de desconto expirou. |
discount_code_already_applied |
Alerta | O código de desconto já foi aplicado. |
discount_code_combination_disallowed |
Alerta | O código de desconto não pode ser combinado com outras ofertas. |
discount_code_user_not_logged_in |
Alerta | O usuário precisa fazer login para usar o código de desconto. |
discount_code_user_ineligible |
Alerta | O usuário não está qualificado para usar o código de desconto. |
missing_billing_info |
Erro | Faltam informações de faturamento obrigatórias. Use o campo path para especificar os campos de endereço de faturamento ausentes. Confira um exemplo abaixo. |
identity_required |
Erro | A identidade do usuário é necessária para a operação solicitada, mas estava ausente, inválida, expirada ou não pôde ser verificada. Para REST, use o código de status 401. Confira um exemplo abaixo. |
insufficient_scope |
Erro | O token de identidade do usuário é válido, mas não tem os escopos exigidos pela operação. Para REST, use o código de status 403. Confira um exemplo abaixo. |
payment_declined |
Erro | O pagamento foi recusado pelo emissor do cartão ou pelo banco. Os motivos podem incluir saldo insuficiente, suspeita de fraude ou problemas com o cartão. Confira um exemplo abaixo. |
payment_failed |
Erro | O pagamento falhou devido a um problema técnico durante o processamento, como um erro de rede, um tempo limite de gateway ou um problema de integração, que impediu o banco de tomar uma decisão. |
payment_ineligible |
Erro | A forma de pagamento selecionada não é aceita. Adequado para casos em que o usuário precisa tentar outra forma de pagamento. |
rejected_for_fraud |
Erro | O pedido foi rejeitado devido a suspeita de fraude. Confira um exemplo abaixo. |
Exemplos de códigos de erro
Esta seção fornece exemplos de JSON para a matriz messages de códigos de erro específicos.
out_of_stock
Finalização da compra de um único item:
{
"type": "error",
"severity": "unrecoverable",
"code": "out_of_stock",
"content": "Unfortunately, the item 'Example Product 1' is out of stock."
}
Finalização de compra de vários itens:
Use o campo path para indicar o índice do item específico que está fora de
estoque.
{
"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
Restrição no nível do pedido (por exemplo, CEP indisponível):
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"content": "Delivery is not supported for the provided zipcode."
}
Restrição no nível do item:
Use o campo path para indicar um item específico que não pode ser entregue no
destino escolhido (por exemplo, proibições específicas de um 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
Endereço de faturamento:
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.payment.instruments[0].billing_address",
"content": "Invalid billing address. Update the address before trying again."
}
Endereço de fulfillment:
{
"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
Use o campo path para especificar campos ausentes no endereço de faturamento.
{
"type": "error",
"severity": "recoverable",
"code": "missing_billing_info",
"path": "$.payment.instruments[0].billing_address.street_address",
"content": "Missing billing street address."
}
identity_required
Na API REST, esse erro precisa ser retornado com o código de status HTTP 401.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "identity_required",
"content": "User identity is required to access order history."
}
insufficient_scope
Na API REST, esse erro precisa ser retornado com o código de status 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"
}
Erros de pagamento
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."
}