Eventos & sincronização

Webhooks & notificações

Organize o recebimento de mudanças de status e conecte pagamentos aos seus próprios sistemas sem depender de polling contínuo.

EndpointHTTPS
PadrãoAssíncrono
ObjetivoSincronizar estado

Como funciona

Configure uma URL HTTPS de notificação para que sua aplicação receba mudanças relevantes da operação. O webhook deve alimentar o estado interno do pedido, cobrança ou processo correspondente.

Configuração atual. A URL é definida em Configurações → Transações Online. Apenas HTTPS é aceito. Em falha de request ou resposta diferente de 200, a documentação atual informa mais 3 tentativas.

Fluxo recomendado

01 · IOPAYStatus muda.

Uma transação ou evento relevante evolui no processamento.

02 · EndpointSeu webhook recebe.

A aplicação recebe o payload no endpoint HTTPS configurado.

03 · PersistênciaRegistre o evento.

Guarde identificadores e conteúdo suficiente para rastreabilidade.

04 · DomínioAtualize sistemas.

Pedido, ERP, OMS, financeiro e automações seguem o novo estado.

Estrutura da notificação

Os eventos transacionais informam o identificador da transação, tipo do evento, status, referência da operação, seller e assinatura da notificação.

Exemplo · transaction.succeeded
{
  "id": "8774b47d26d54a0b9138cde9d8cc421f",
  "type": "transaction.succeeded",
  "status": "succeeded",
  "reference_id": "order_102938",
  "io_seller_id": "<IO_SELLER_ID>",
  "sign_confirm": "iopay::<SIGNATURE>"
}
Eventos. Entre os eventos transacionais estão transaction.created, transaction.pending, transaction.succeeded, transaction.failed, transaction.disputed e transaction.void.succeeded.

Implementação

Exemplo conceitual · Laravel
Route::post('/webhooks/iopay', function (Request $request) {
    $payload = $request->all();

    // Identificador da transação
    $transactionId = $payload['id'] ?? null;

    // Ex.: transaction.succeeded
    $eventType = $payload['type'] ?? null;

    // Ex.: succeeded
    $status = $payload['status'] ?? null;

    // Referência enviada na criação da transação
    $referenceId = $payload['reference_id'] ?? null;

    // 1. valide sign_confirm conforme o contrato vigente
    // 2. garanta idempotência antes de aplicar efeitos
    // 3. persista o evento para rastreabilidade
    // 4. processe operações pesadas de forma assíncrona
    ProcessIopayWebhook::dispatch($payload);

    return response()->json(['received' => true], 200);
});
Importante. O exemplo é arquitetural. A validação de sign_confirm deve seguir o contrato vigente da integração antes de o evento ser considerado confiável.

Idempotência e robustez

Idempotência

Não processe duas vezes.

Webhooks podem ser reenviados. Garanta que o mesmo evento não produza efeitos duplicados na sua aplicação.

Resposta

Acknowledge rápido.

Evite operações longas antes de retornar HTTP 200 ao webhook.

Ordem

Valide o estado atual.

Não dependa apenas da ordem de chegada; compare o evento com o estado conhecido.

Observabilidade

Guarde histórico.

Registre recebimento, processamento, erro e correlação com pedido/transação.

Checklist

  • URL HTTPS configurada e acessível externamente.
  • Timeout baixo e processamento pesado em fila.
  • Validação de sign_confirm.
  • Idempotência para evitar efeitos duplicados.
  • Logs com id, type, reference_id e io_seller_id.
  • Alertas para falhas repetidas de processamento.
  • Rotina de reconciliação por consulta à API para casos excepcionais.