Eventos & sincronización

Webhooks y notificaciones

Organiza la recepción de cambios de estado y conecta los pagos con tus propios sistemas sin depender de un polling continuo.

EndpointHTTPS
PatrónAsíncrono
ObjetivoSincronizar el estado

Cómo funciona

Configura una URL HTTPS de notificación para que tu aplicación reciba los cambios relevantes de la operación. El webhook debe alimentar el estado interno del pedido, cobro o proceso correspondiente.

Configuración actual. La URL se define en Configuraciones → Transacciones Online. Solo se acepta HTTPS. Ante un fallo de request o una respuesta distinta de 200, la documentación actual indica 3 intentos más.

Flujo recomendado

01 · IOPAYEl estado cambia.

Una transacción o evento relevante avanza en el procesamiento.

02 · EndpointTu webhook lo recibe.

La aplicación recibe el payload en el endpoint HTTPS configurado.

03 · PersistenciaRegistra el evento.

Guarda identificadores y contenido suficiente para la trazabilidad.

04 · DominioActualiza los sistemas.

Pedido, ERP, OMS, finanzas y automatizaciones siguen el nuevo estado.

Estructura de la notificación

Los eventos transaccionales informan el identificador de la transacción, el tipo de evento, el estado, la referencia de la operación, el seller y la firma de la notificación.

Ejemplo · 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 los eventos transaccionales están transaction.created, transaction.pending, transaction.succeeded, transaction.failed, transaction.disputed y transaction.void.succeeded.

Implementación

Ejemplo conceptual · 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. El ejemplo es arquitectónico. La validación de sign_confirm debe seguir el contrato vigente de la integración antes de considerar fiable el evento.

Idempotencia y robustez

Idempotencia

No proceses dos veces.

Los webhooks pueden reenviarse. Asegúrate de que el mismo evento no produzca efectos duplicados en tu aplicación.

Respuesta

Acknowledge rápido.

Evita operaciones largas antes de devolver HTTP 200 al webhook.

Orden

Valida el estado actual.

No dependas solo del orden de llegada; compara el evento con el estado conocido.

Observabilidad

Guarda el historial.

Registra recepción, procesamiento, error y correlación con pedido/transacción.

Checklist

  • URL HTTPS configurada y accesible externamente.
  • Timeout bajo y procesamiento pesado en cola.
  • Validación de sign_confirm.
  • Idempotencia para evitar efectos duplicados.
  • Logs con id, type, reference_id e io_seller_id.
  • Alertas para fallos repetidos de procesamiento.
  • Rutina de reconciliación mediante consultas a la API para casos excepcionales.