Este guia explica como lidar com erros retornados pela API Merchant. Entender a estrutura e a estabilidade da resposta de erro é fundamental para criar integrações robustas que podem se recuperar automaticamente de falhas ou fornecer feedback significativo aos usuários.
Visão geral
Quando uma solicitação da API Merchant falha, a API retorna um código de status HTTP padrão (4xx ou 5xx) e um corpo de resposta JSON com detalhes sobre o erro.
A API Merchant segue o padrão AIP-193 para detalhes de erros, fornecendo informações legíveis por máquina que permitem que seu aplicativo processe cenários de erros específicos de maneira programática.
Estrutura da resposta de erro
A resposta de erro é um objeto JSON que contém campos padrão como code,
message e status. É importante ressaltar que ele também inclui uma matriz details. Para
processar erros de forma programática, procure um objeto em details
em que o @type é type.googleapis.com/google.rpc.ErrorInfo.
Esse objeto ErrorInfo fornece dados estáveis e estruturados sobre o erro:
- domain: o agrupamento lógico do erro, normalmente
merchantapi.googleapis.com. - metadata: um mapa de valores dinâmicos relacionados ao erro. Isso inclui o seguinte:
- REASON: um identificador específico e estável para o erro exato (por exemplo,
INVALID_NAME_PART_NOT_NUMBER,PERMISSION_DENIED_ACCOUNTS). Esse campo está sempre presente. Use esse campo para tratamento de erros refinado na lógica do aplicativo. - HELP_CENTER_LINK: fornece mais contexto e instruções para corrigir o problema. Esse campo não está presente em todos os erros, mas planejamos expandir a cobertura com o tempo para os erros em que mais contexto pode ser necessário.
- Outros campos dinâmicos: outras chaves que fornecem contexto, como o nome do campo inválido (
FIELD_LOCATION) ou o valor que causou o erro (FIELD_VALUE).
- REASON: um identificador específico e estável para o erro exato (por exemplo,
Exemplos de respostas de erro
O JSON a seguir demonstra a estrutura de um erro da API Merchant em que um nome de recurso estava malformado.
{
"error": {
"code": 400,
"message": "[name] The part `account` of the resource name in field `name` must be a number, but has value: `abcd`.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"VARIABLE_NAME": "account",
"FIELD_LOCATION": "name",
"FIELD_VALUE": "abcd",
"REASON": "INVALID_NAME_PART_NOT_NUMBER"
}
}
]
}
}
Confira um exemplo de erro de autenticação:
{
"error": {
"code": 401,
"message": "The caller does not have access to the accounts: [1234567]",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "unauthorized",
"domain": "merchantapi.googleapis.com",
"metadata": {
"ACCOUNT_IDS": "[1234567]",
"REASON": "PERMISSION_DENIED_ACCOUNTS"
}
}
]
}
}
Estabilidade dos campos de erro
Ao escrever uma lógica de tratamento de erros, é importante saber em quais campos é seguro confiar e quais podem mudar.
- Campos estáveis:
details.metadata.REASON: o identificador de erro específico. Confie nesse campo para a lógica de fluxo de controle do seu aplicativo.- Chaves
details.metadata: as chaves no mapa de metadados (por exemplo,FIELD_LOCATION,ACCOUNT_IDS) estão estáveis. code: o código de status HTTP de alto nível (por exemplo,400,401,503) está estável.
- Chaves
Campos instáveis:
message: a mensagem de erro legível não é estável. Ele é destinado apenas à depuração de desenvolvedores. Não escreva código que analise ou dependa do conteúdo de texto do campomessage, porque ele pode mudar sem aviso prévio para melhorar a clareza ou adicionar contexto.- Valores
details.metadata: embora as chaves sejam estáveis, os valores das chaves informativas podem mudar. Por exemplo, se uma chaveHELP_CENTER_LINKfor fornecida, o URL específico a que ela aponta poderá ser atualizado para uma página de documentação mais recente sem aviso prévio. No entanto, como mencionado anteriormente, o valor dedetails.metadata.REASONé estável.
Práticas recomendadas
Siga estas práticas recomendadas para garantir que sua integração processe erros de maneira adequada.
Usar details.metadata.REASON para lógica
Sempre use o REASON específico dentro do mapa metadata para determinar a causa de um erro. Não confie apenas no código de status HTTP, já que vários erros
podem compartilhar o mesmo código.
Não analisar a mensagem de erro
Conforme observado na seção de estabilidade, o campo message é para consumo humano.
Se você precisar de informações dinâmicas (como qual campo era inválido), extraia-as do mapa metadata usando chaves estáveis, como FIELD_LOCATION e VARIABLE_NAME.
Implementar espera exponencial
Para erros que indicam indisponibilidade temporária ou limitação de taxa, implemente uma estratégia de espera exponencial. Isso significa esperar um curto período antes de tentar novamente e aumentar o tempo de espera a cada falha subsequente.
quota/request_rate_too_high: esse erro indica que você excedeu sua cota de minuto para um grupo de cotas específico. Reduza a taxa de solicitação.internal_error: geralmente são temporários. Tente de novo com espera exponencial. Observação:se o problemainternal_errorpersistir após várias tentativas com redução exponencial, consulte Como entrar em contato com o suporte da API Merchant.
Como entrar em contato com o suporte da API Merchant
Se você precisar entrar em contato com o suporte da API Merchant sobre um erro específico, forneça as seguintes informações na sua solicitação:
- A resposta de erro exata recebida
- O nome do método da API
- O payload da solicitação
- Carimbos de data/hora ou o período em que o método foi chamado e os erros foram recebidos