Saltar al contenido principal
Próximamente. Este webhook todavía no está disponible.
TapiPay te avisa con este webhook cuando se crea una orden de pago o cuando falla la creación del cargo. Solo acompaña a tres respuestas de POST /v2/debts/orders: 201, 422 ORDER_NOT_CREATED y 500. Con cualquier otra (por ejemplo, un campo inválido, un contacto que no existe o una llave ya usada), no hay webhook: el motivo te llega solo en la respuesta. Ante un 500, este webhook puede llegar o no. Si llega ORDER_CREATION_FAILED con PROVIDER_UNAVAILABLE, no significa que no se cobró: reintenta con el mismo externalRequestId, como se indica en Reintentos e idempotencia.
Forma parte de los webhooks de órdenes y medios de pago: comparte con ellos el endpoint, la seguridad y el contrato. Su llave de idempotencia es id.

Creación y cobro son avisos distintos

ORDER_CREATION_SUCCESS informa que la orden se creó, no que se cobró. El resultado del cargo te llega después, con el pago de una orden. Puede llegarte ORDER_CREATION_FAILED y después ORDER_PAYMENT_CONFIRMED de la misma orden, si el banco terminó procesando el cargo. En ese caso, toma como definitivo el cobro: el dinero ingresó.

El payload

Si orderId o paymentMethod no vienen, la clave no está: no llegan en null ni vacíos. Verifica que existan antes de leerlos.

Motivos

creationError.code es un código de TapiPay, no el del banco. message viene en inglés y sirve para tus logs, no para mostrárselo al usuario.
Trata la lista de códigos como abierta: se pueden agregar códigos nuevos. Si te llega uno que no conoces, trátalo como un fallo de creación sin acción específica.

Ejemplos

Una orden que se crea, una que se crea pero falla, y una cuya creación falló antes de que la orden existiera (sin orderId). Los ejemplos corresponden a una integración sin llave pública, por eso hash viene en null.

Recomendaciones

  • Procesa cada notificación una sola vez. La misma notificación puede llegar más de una vez, siempre con el mismo id. Guarda los id procesados en almacenamiento persistente.
  • Correlaciona por externalOrderId. Es el único identificador que viene siempre: orderId falta si la orden no llegó a crearse.
  • No asumas un orden de llegada entre este aviso y los del pago de una orden.
  • Ignora los campos que no conozcas: se pueden agregar campos nuevos.