Skip to content

Reaproveitamento de loja na instalação

Na tela de autorização que o lojista acessa ao instalar o seu aplicativo — o redirect para /appstore/integration/HASH, etapa 3 da instalação — ele pode selecionar uma loja que já existe na conta dele, em vez de criar sempre uma nova.

O que mudou

Antes, toda instalação criava obrigatoriamente uma loja nova. Quando o lojista instalava mais de um aplicativo, ou reinstalava o mesmo, a conta acumulava lojas duplicadas — cada uma com seu próprio external_id e suas próprias credenciais, sem nenhuma relação óbvia entre elas.

Agora a tela de autorização oferece um campo de seleção de loja. O lojista escolhe entre reaproveitar uma loja existente ou criar uma nova.

INFO

Nada muda no contrato da API. As quatro etapas da instalação, o contrato da URL de validação e o processo de credenciais/tokens seguem exatamente os mesmos. Nenhum parâmetro novo é exigido do aplicativo parceiro.

Loja e site são a mesma coisa

Esta é a principal fonte de confusão, então vale explicitar:

Onde você vêTermo usado
Tela do lojista (painel Appmax, tela de autorização)loja
API e webhookssite (site_id)

É a mesma entidade, com dois nomes. Quando esta página fala em "loja existente", o equivalente na API é um site que já tem site_id. Se um webhook chega com um site_id que você já conhece, é porque a instalação foi vinculada a uma loja que já existia.

O que o lojista vê

O comportamento da tela depende do que o lojista escolhe:

CenárioCampo "Nome da loja"Campo "Selecionar Empresa"DomínioLoja criada?
Selecionou uma loja existenteNão é exibido (a loja já tem nome)Preenchido e travado com a empresa daquela lojaPreenchido com o domínio já cadastrado da lojaNão
Selecionou "Criar nova loja"Exibido, o lojista informaO lojista escolheO lojista informaSim
Lojista sem nenhuma lojaExibido, o lojista informaO lojista escolheO lojista informaSim

Quando o lojista ainda não tem nenhuma loja, o campo de seleção não aparece — o fluxo é o anterior, sem alteração.

Só entram na lista de seleção as lojas elegíveis: ativas, do próprio lojista e com empresa regular na Appmax. Uma loja que não atende a esses critérios simplesmente não é oferecida.

O que muda para a sua integração

No contrato, nada. A implicação é conceitual: a loja vinculada à instalação pode ser uma que já existia — inclusive uma em que o seu aplicativo já esteve instalado antes.

Revise a premissa "uma instalação = uma loja nova"

Se o seu sistema cria registros locais assumindo que cada instalação corresponde a uma loja recém-criada, essa premissa não vale mais. Trate a instalação como idempotente por loja: ao receber o health check, verifique se você já tem um registro para aquela loja e atualize em vez de criar uma linha nova.

Sem isso, você acumula registros órfãos apontando para a mesma loja, com external_id antigos que a Appmax já não reconhece.

Reinstalação na mesma loja

Quando o lojista reinstala o seu aplicativo selecionando a mesma loja:

O que aconteceDetalhe
O vínculo aplicativo ↔ loja é atualizadoNão é duplicado — continua existindo um único vínculo entre o seu app e aquela loja.
O external_id substitui o anteriorO valor que a sua URL de validação devolve no novo health check passa a ser o da loja. O valor antigo deixa de existir.
Um novo client_id é geradoCada instalação gera credenciais novas. A loja acumula credenciais ao longo do tempo — use sempre a mais recente.

Persista sempre o último external_id

Se o seu front continuar enviando o external_id antigo no header external-id, as requisições respondem 404 Merchant not found.

A cada health check, grave o valor novo e descarte o anterior. E lembre: você deve gerar um UUID novo a cada requisição do health check — valores repetidos são rejeitados pela Appmax. Ciclo de vida completo em external-id.

Vale a mesma recomendação de sempre: releia o external_id do seu banco a cada renderização do checkout, indexando pela loja. Se você cacheia esse valor em sessão ou em variável de ambiente, invalide o cache quando um novo health check chegar.

Disponibilidade

O recurso é liberado gradualmente. Enquanto ele não estiver ativo para uma conta, a tela de autorização segue com o comportamento anterior — toda instalação cria uma loja nova — e nada muda para as integrações existentes.

Ou seja: você não precisa esperar a liberação para ajustar seu código. Uma integração que já trata a instalação como idempotente por loja funciona nos dois modos.

Veja também