A OriPay envia um POST JSON para a sua URL a cada evento.

Configurar

A URL e o secret ficam no OriPay Web (app.oripaysolutions.com.br), em Conta → API → Webhook, com confirmação por PIN. Não dá para alterá-los pela API: se uma chave vazar, ninguém consegue desviar os seus eventos. Ao salvar a URL pela primeira vez, o OriPay Web mostra o secret (whsec_...) uma vez. Guarde em cofre. Trocar a URL depois mantém o mesmo secret. Confira a configuração atual com GET /v1/webhook-endpoint (sem o secret).

Eventos

Formato

Os nomes de header são enviados em minúsculas; trate-os sem diferenciar maiúsculas. oripay-delivery-attempt é o número da tentativa daquele evento. data é o recurso completo, no mesmo formato do GET, como estava quando o evento foi gerado. Ele traz o seu metadata e o payer (quem pagou), para você identificar o cliente. Para o estado mais recente, faça GET do recurso.

Quando o evento é gerado

Os eventos saem do livro-razão da conta, não da notificação do banco: a cada cerca de 10 segundos a OriPay confere o que mudou e gera os eventos novos, um por recurso e tipo. Conte com alguns segundos (em geral até uns 20 s) entre o dinheiro se mover e o webhook sair. Se o webhook estiver desligado, os eventos continuam registrados como pending, podem ser consultados em GET /v1/events e são entregues quando você religar.

Responda rápido

  • Responda 2xx em até 10 segundos e processe depois, em fila.
  • O corpo da sua resposta é ignorado.
  • Qualquer outra resposta, timeout ou redirect conta como falha.

Reenvio automático

Se a entrega falhar, tentamos de novo após 1 min, 5 min, 30 min, 2 h, 6 h e 12 h: até 7 tentativas em cerca de 21 h. Depois disso o evento fica com status failed. Ele continua em GET /v1/events por 30 dias e pode ser reenviado manualmente. Depois de 30 dias o evento é apagado.

Garanta três coisas

  1. Valide a assinatura de todo evento. Ver Assinatura.
  2. Evite duplicidade: o mesmo evento pode chegar mais de uma vez. Guarde o oripay-event-id e ignore os repetidos.
  3. Não dependa da ordem: eventos podem chegar fora de ordem. Use data.status ou faça GET do recurso.