Descripción
Los links de captura permiten obtener la información de un método de pago de un cliente sin que tengas que cumplir con la normativa PCI DSS. Cuando el cliente completa el formulario, OnePay envía este webhook con el identificador del método de pago capturado, para que puedas cobrarlo después sin volver a pedirle los datos. El evento se llamaconnect_link.completed y se genera una vez por cada formulario completado.
El objeto event no incluye un identificador propio, así que para deduplicar hay que armarlo. No alcanza con connect_link.id: un link con single_use: false se puede completar muchas veces y todas las capturas comparten ese id, así que descartarlas por id te haría perder capturas legítimas. Usa connect_link.id junto con connect_link.completed, que es el número de captura y aumenta de a uno en cada una. Ese mismo campo te sirve para ordenar: si te llegan dos eventos del mismo link, el de completed más alto es el más reciente.
Cada entrega llega firmada. Antes de procesar el evento, verifica los headers como se explica en Autenticación de los eventos.
Los dos identificadores de cliente
El payload trae dos identificadores de cliente, y son cosas distintas. Es el punto que más confusión genera, así que conviene tenerlo claro antes de integrar:Usa
connect_link.customer_id en tus cobros siempre que lo tengas: es el cliente que tú registraste. Cuando el link se creó sin cliente —solo es posible desde el panel; la API exige customer_id— ese campo llega en null y el que debes usar es customer.id.Qué identificador usar después
Ejemplo
El payload real incluye además
connect_link.company, con la configuración de tu empresa. Se omite en este ejemplo porque no lo necesitas para cobrar.El objeto payment_method
Su forma depende de payment_method_type.
card
account
Una cuenta capturada con
subtype: SAVINGS es una cuenta bancaria por riel ACH. No es lo mismo que una billetera enrolada: el enrolamiento de una billetera (Nequi, Daviplata) usa subtype: ELECTRONIC_DEPOSIT con el celular como número de cuenta, y requiere que el titular autorice la vinculación desde la app. Para capturar una billetera por link, habilita allows.wallets.