Prepare sua integração Merchant API para produção.
Prerequisitos:
Aplicativo completamente pronto para teste
Conta Profissional (CNPJ) — Contas Pessoal/Estudante (CPF) não são aceitas
Token de acesso válido fornecido durante onboarding
Checklist de endpoints
Valide que cada endpoint funciona corretamente:
Endpoint
Método
Critério de aprovação
/merchants
GET
Retorna array de lojas com id, name, corporateName
/merchants/{merchantId}
GET
Retorna objeto com operações e endereço completo
/merchants/{merchantId}/status
GET
Retorna state (OK/WARNING/CLOSED/ERROR) com validações
/merchants/{merchantId}/interruptions
GET
Retorna array vazio ou com interrupções ativas
/merchants/{merchantId}/interruptions
POST
Cria pausa com id, start, end e retorna 201
/merchants/{merchantId}/interruptions/{id}
DELETE
Remove pausa e retorna 204 sem conteúdo
/merchants/{merchantId}/opening-hours
GET
Retorna array de turnos com dayOfWeek, start, duration
/merchants/{merchantId}/opening-hours
PUT
Atualiza horários e retorna 201 com turnos criados
Cenários de teste
Autenticação
Teste: Requisição sem token
Expected:401 Unauthorized com mensagem clara
Pass: Erro retornado com código 401Teste: Token inválido
Expected:401 UnauthorizedPass: Erro retornado com código 401Teste: Token válido
Expected:200 com dados da loja
Pass: Resposta bem-sucedida
Listagem de lojas
Teste:GET /merchants sem parâmetros
Expected: Array com todas as lojas
Pass: Mínimo 1 loja retornada com id válidoTeste:GET /merchants?page=1&size=10Expected: Máximo 10 lojas por página
Pass: Resposta contém até 10 lojas
Status da loja
Teste:GET /merchants/{merchantId}/status com loja ABERTA
Expected:state: OK ou WARNING com available: truePass: Validação is-connected retorna OKTeste:GET /merchants/{merchantId}/status com loja FECHADA
Expected:state: CLOSED com available: falsePass: Validação opening-hours retorna CLOSED
Pausas (Interrupções)
Teste: Criar pausa válida com POST /interruptionsExpected: Response 201 com ID da pausa criada
Pass: Pausa aparece em GET /interruptionsTeste: Criar pausa com sobreposição
Expected:409 InterruptionOverlapPass: Erro retornadoTeste: Remover pausa com DELETE /interruptions/{id}Expected: Response 204 (sem conteúdo)
Pass: Pausa não aparece em listagem posterior
Horários
Teste: Consultar horários com GET /opening-hoursExpected: Array de turnos configurados
Pass: Cada turno tem dayOfWeek, start, durationTeste: Atualizar horários com múltiplos turnos
Expected: Response 201 com turnos criados
Pass:GET /opening-hours retorna novos valoresTeste: Tentar turnos sobrepostos
Expected:400 BadRequestPass: Erro retornado
Tratamento de erros
Verifique respostas de erro para:
Código
Cenário
Verificação
400
Parâmetros inválidos
Corpo inclui code e message
401
Token inválido/expirado
Mensagem clara sobre autenticação
403
Sem acesso à loja
Erro indica permissão insuficiente
409
Recurso em conflito
Código específico (ex: InterruptionOverlap)
429
Rate limit
Header Retry-After presente
500
Erro do servidor
Mensagem genérica, sem expor detalhes
Considerações finais
Implemente retry com backoff exponencial para erros 5xx
Respeite limite de 1000 requisições por segundo
Use polling mínimo de 30 segundos para status
Valide tokens antes de usar em produção
Teste em ambiente homologação antes de subir para produção