Pular para o conteúdo principal

Integração pré-paga

No pré-pago o cliente paga antes e consome até o saldo acabar. A Enjoy.it só libera a torneira enquanto houver crédito disponível.

Em troca dessa segurança, você assume uma responsabilidade a mais: manter o saldo sincronizado.

O problema central: o mesmo dinheiro em dois lugares

O cliente tem R$ 100. Ele pode gastar esse dinheiro em dois lugares diferentes: na torneira (controlada pela Enjoy.it) e no seu PDV (comida, produtos, o que a loja vender).

Veja o que acontece quando ele recarrega R$ 100:

  1. Na torneira, controlada pela Enjoy.it, o cliente tira R$ 60 de chope.
  2. No seu PDV, ele compra R$ 50 de comida.
  3. Total gasto: R$ 110 de um saldo de R$ 100.

Isso acontece se os dois lados não conversarem. Por isso, no pré-pago, além das três chamadas do pós-pago, existem mais duas:

Chamada extraQuando
POST .../rechargesSempre que o cliente colocar crédito
PUT .../balanceSempre que o cliente gastar fora da Enjoy.it

A jornada do cliente

MomentoO que o cliente viveO que o seu sistema fazAPI
ChegadaRecebe a comandaConsulta a sessão ou abre uma nova com limiteGET e POST .../checkin
PagamentoEscolhe o valor e pagaAguarda a aprovação e só então registra o créditoPOST .../recharges
ServiçoEncosta a comanda e serveNada. A Enjoy.it confere o saldo e libera ou recusaNenhuma
Fim da servidaVê o volume e o valor debitadosRecebe ou consulta a transação para manter seu saldo conciliadoconsumptionIpn ou GET .../transactions
Nova recargaPaga maisRegistra apenas pagamentos aprovadosPOST .../recharges
Compra no PDVCompra comida ou produtosConcilia os chopes, valida o saldo e atualiza o disponívelGET .../transactions e PUT .../balance
SaídaVai embora e devolve a comandaConferência final, acerto do saldo e bloqueioGET .../transactions, depois POST .../checkout

1. Abertura com saldo

{
"plan": "prepaid",
"hasConsumptionLimit": true,
"balance": 120,
"consumer": {
"name": "Maria Silva",
"consumerReference": "cliente-123"
}
}
CampoObservação
planSempre prepaid neste fluxo
hasConsumptionLimittrue. É este campo que faz a torneira respeitar o saldo
balanceO crédito já disponível na abertura, em reais

O campo balance serve para crédito que já existe — um bônus, um pacote incluso na entrada, um saldo trazido de outro sistema. Quando o cliente estiver pagando naquele momento, prefira abrir a sessão e registrar o pagamento pelo endpoint de recarga: assim o meio de pagamento fica auditável no extrato.

aviso

Se hasConsumptionLimit ficar false em um fluxo pré-pago, a torneira libera consumo mesmo sem saldo. Esse é o erro que mais aparece em homologação de pré-pago.

2. Recargas

A ordem é obrigatória e não pode ser invertida:

1. Seu PDV pede o pagamento à maquininha / Pix
2. O pagamento é APROVADO
3. POST .../recharges com value e paymentMethod
4. 201 Created
5. Só agora o cliente vê o saldo novo na tela

Registrar a recarga antes da aprovação libera chope para um pagamento que pode ser recusado.

{
"value": 50,
"paymentMethod": "credit-card"
}

paymentMethod é opcional e aceita valores como debit-card, credit-card, cash ou on-the-house (cortesia).

Endpoints por identificador:

3. Receber os consumos

Cada chope servido debita o saldo do cliente na Enjoy.it. O seu sistema precisa conhecer esses débitos por dois motivos: fechar a conta corretamente e saber quanto o cliente ainda tem antes de autorizar uma compra fora da Enjoy.it.

FormaO que você fazPrecisa dar baixa (ack)?
WebhookInforma consumptionIpn no check-in e recebe um POST a cada servidaNão. A sua resposta de sucesso já confirma
ConsultaChama GET .../transactions no extrato, antes de cada compra externa e antes do fechamentoSim, pelo endpoint de confirmação

Repare na diferença em relação ao pós-pago: aqui existe um terceiro momento de consulta, antes de autorizar qualquer venda fora da Enjoy.it. Sem ele, você autoriza uma compra usando um saldo que já foi gasto na torneira.

Em qualquer uma das formas, use o idTransaction para não lançar a mesma transação duas vezes.

O passo a passo de cada opção, a política de reentrega do webhook, o endpoint de baixa e a importação por varredura estão em Receber os consumos e dar baixa.

4. Compras fora da Enjoy.it

Quando o cliente compra comida ou produtos no seu PDV usando o mesmo crédito, o saldo disponível para chope precisa diminuir.

Se você recebe por webhook

1. Os chopes já chegam sozinhos e você os lança
2. O cliente pede um lanche de R$ 30
3. Você valida com o saldo que já conhece
4. Registra a venda no seu PDV
5. PUT .../balance com o novo saldo

Se você recebe por consulta

O passo extra é no início: você não sabe quanto o cliente já bebeu até perguntar.

1. GET .../transactions -> importa os chopes ainda não lançados
2. Recalcula o saldo real do cliente
3. Verifica se dá para pagar o lanche de R$ 30
- Não dá? Recuse a venda ou peça recarga
4. Registra a venda no seu PDV
5. PUT .../balance com o novo saldo

Pular o passo 1 é o caminho direto para o cliente gastar mais do que tem: ele pode ter bebido R$ 80 desde a sua última consulta.

Ao importar cada chope no passo 1, dê baixa na transação — veja dar baixa nas transações importadas.

Como atualizar o saldo

O endpoint aceita as duas formas:

{
"balance": 75.5
}
FormaChamadaQuando usar
AbsolutaPUT .../balanceVocê calculou o saldo final e quer que ele valha. Mais previsível
RelativaPUT .../balance?relative=trueVocê quer somar ou subtrair do saldo atual

Prefira a forma absoluta sempre que conseguir calcular o total: ela corrige divergências em vez de acumulá-las.

Opcional: registrar a venda em vez de só ajustar o número

Em vez de recalcular o saldo por fora, você pode registrar a venda como uma transação na Enjoy.it:

POST /places/{idPlace}/tabs/{idTab}/transactions

Esse endpoint lança o item e já sensibiliza o saldo, dispensando o PUT .../balance naquela venda. Como efeito colateral útil, o extrato da Enjoy.it passa a refletir a conta inteira do cliente, e não só o chope.

Não é obrigatório: se o seu sistema já controla o saldo e prefere apenas informar o novo valor, PUT .../balance continua válido. Escolha um dos dois caminhos por venda — usar os dois na mesma venda desconta duas vezes.

Ver o modelo de produto externo

Alternativa: deixar a Enjoy.it perguntar o saldo (balanceIpn)

Se o seu sistema não puder atualizar o saldo a cada venda, existe o caminho inverso: informe um balanceIpn no check-in e a Enjoy.it consulta o seu sistema para saber o saldo disponível antes de liberar a torneira.

Atualizar o saldo (PUT .../balance)Ser consultado (balanceIpn)
Onde vive o saldo verdadeiroNos dois lados, sincronizadosSó no seu sistema
Você precisa sincronizarSim, a cada venda externaNão
Impacto no atendimentoNenhumO cliente espera a sua resposta na torneira
RecomendaçãoPreferívelVálido quando não há alternativa
O custo do balanceIpn é sentido pelo cliente

Essa consulta entra no caminho crítico do atendimento: toda vez que o cliente encosta o cartão na torneira, a liberação depende de uma chamada ao seu sistema. Com várias torneiras e movimento, são muitas chamadas, e qualquer lentidão vira fila na chopeira.

Use balanceIpn quando não houver como sincronizar o saldo. Nesse caso, trate esse endereço como crítico: resposta rápida, alta disponibilidade e monitoramento.

Ver o contrato do balanceIpn

5. Encerramento

1. Recolha a comanda ou o cartão
2. GET .../transactions -> conferência final
3. Recalcule o saldo e persista o extrato
4. Acerte a devolução de saldo, se a regra da loja previr
5. POST .../checkout
6. Aguarde 200 OK

Endpoints: comanda, RFID ou Wallet.

Erros comuns neste fluxo

SintomaCausa provávelCorreção
Cliente consome além do saldohasConsumptionLimit está falseAbra a sessão com true
Cliente gasta o mesmo dinheiro duas vezesCompra externa sem PUT .../balanceAtualize o saldo após toda venda no seu PDV
Saldo do PDV diferente do saldo da Enjoy.itUso de saldo relativo com chamadas repetidasMigre para saldo absoluto e reconcilie pelo extrato
Cliente não consegue servir após pagarRecarga não registrada ou registrada antes da aprovaçãoRegistre a recarga logo após o 201 do pagamento
Chope liberado com pagamento recusadoRecarga registrada antes da aprovaçãoInverta a ordem: aprova, depois registra
Valide concorrência na homologação

Um cliente pode estar servindo chope no mesmo instante em que o caixa registra um lanche. Teste esse cenário antes de ir para produção: é onde as divergências de saldo aparecem.

Próximo passo

Para totens de autoatendimento e recarga sem operador, veja Totens e Wallets.