Split de Cobro
En algunos modelos de negocio, el dinero de cada pago recibido se tiene que dividir entre dos o más participantes.
En esta guía te mostramos cómo automatizar esa división entre Cuentas PAGOS360 con nuestra API. Usamos como ejemplo el modelo de marketplace, donde el dinero de cada venta se divide entre el vendedor y la plataforma.
Un marketplace es una plataforma de ventas online donde distintos comerciantes ofrecen sus productos a los consumidores. Funciona como un mercado online que conecta vendedores con compradores.
Conceptos iniciales
Antes del paso a paso técnico, repasemos cómo se divide un pago recibido.
Hay diferentes estrategias para dividir un pago:
Un importe, dos pagos. El total se reparte en dos cobros independientes. Cada participante crea su propia Solicitud de Pago por su parte, y el comprador paga cada una por separado. No es una función de PAGOS360: son dos Solicitudes de Pago comunes, cada una creada con la API Key de su cuenta. El comprador paga dos veces, y vos tenés que resolver el caso en que pague solo una.
Un importe, un pago, una transferencia. El comprador paga una sola vez el total en una cuenta, y después una parte de ese dinero se transfiere a otra cuenta. Esta es la estrategia que implementa el Split de Cobro.
El Split de Cobro es una función que genera automáticamente una Transferencia Programada de una Cuenta PAGOS360 a otra en el momento en que se paga una Solicitud de Pago.
En esta guía vamos a usar estos nombres:
Rol | Qué hace |
|---|---|
Cuenta origen | Crea la Solicitud de Pago con su API Key, recibe el pago completo y transfiere una parte. |
Cuenta destino | Recibe la Transferencia Programada. Tiene que estar habilitada para recibir splits (ver el paso 1). |
Tené en cuenta que:
Las Transferencias Programadas funcionan solo entre Cuentas PAGOS360 conectadas.
El split se define al crear la Solicitud de Pago. El importe que se transfiere es un monto fijo (no un porcentaje).
La suma de lo que se transfiere no puede superar un porcentaje máximo del importe de la solicitud, que define PAGOS360 (ver el paso 2).
Diagrama del flujo
En el ejemplo del marketplace, la venta se cobra en la cuenta del vendedor (cuenta origen) y la comisión de la plataforma se transfiere a la cuenta del marketplace (cuenta destino).
El modelo también funciona al revés (la plataforma cobra y le transfiere una parte al vendedor), siempre que la cuenta que recibe la transferencia sea la habilitada como destino. Como el importe transferido tiene un tope porcentual, el esquema del ejemplo (transferir la comisión) es el que mejor se adapta.
1. Conectar las cuentas
Para conectar las cuentas, contactá a tu ejecutivo de cuenta o a Soporte. La conexión la configura el equipo de PAGOS360 a pedido: hoy no se puede hacer desde la API.
Cuando PAGOS360 habilita una cuenta como destino de Split de Cobro:
Se genera un Marketplace Secret para esa cuenta.
Se habilita el canal Transferencia Programada en su cuadro tarifario.
Para crear solicitudes con split, la cuenta origen necesita dos datos de la cuenta destino:
Dato | Descripción |
|---|---|
ID de cuenta | Identificador de la Cuenta PAGOS360 destino (por ejemplo |
Marketplace Secret | Clave secreta de la cuenta destino. Autoriza a enviarle Transferencias Programadas. |
Guardá el Marketplace Secret en tu backend, igual que tu API Key, y mantenelo fuera del navegador y de las apps móviles. Funciona como una credencial: quien lo tiene puede crear solicitudes que le transfieren dinero a la cuenta destino.
La cuenta destino tiene que estar activa. Si no está habilitada, no tiene Marketplace Secret o el secret no coincide, la API rechaza la solicitud (ver Errores frecuentes, más abajo).
2. Crear una Solicitud de Pago con split
El split se crea junto con la Solicitud de Pago, con un POST a /payment-request desde el backend de la cuenta origen. Además de los atributos habituales (Crear solicitud de pago), tenés que enviar:
El atributo
transfer_todentro depayment_request, con una lista de transferencias.Un header
X-Connect-Accountpor cada cuenta destino, para autorizar la transferencia.
El atributo transfer_to
transfer_to es un array de objetos. Cada objeto es una Transferencia Programada:
Atributo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| string | Sí | ID de la Cuenta PAGOS360 destino. No puede ser la misma cuenta que crea la solicitud. |
| float | Sí | Importe fijo a transferir, con punto como separador decimal. Tiene que ser mayor a |
| string | Sí | Concepto de la transferencia (entre 1 y 255 caracteres). La cuenta destino lo ve en la descripción de la solicitud que recibe. |
| string | No | Referencia para la cuenta destino (entre 1 y 255 caracteres). Si no la enviás, se usa el |
| boolean | No | Indica si la transferencia se revierte cuando se devuelve o se revierte el pago original (ver el paso 3). Si no lo enviás, vale |
Tope del split: la suma de los amount de transfer_to no puede superar un porcentaje de first_total. Ese porcentaje lo define PAGOS360 (el valor por defecto es 50%). El tope se calcula siempre sobre first_total, aunque la solicitud tenga segundo vencimiento.
El header X-Connect-Account
Por cada cuenta destino, enviá un header con este formato:
Podés enviar hasta 5 cuentas destino con los headers
X-Connect-Account,X-Connect-Account-1,X-Connect-Account-2,X-Connect-Account-3yX-Connect-Account-4.Cada
account_iddetransfer_totiene que tener su header, y cada header tiene que corresponder a unaccount_iddetransfer_to.Usá un valor distinto en cada header.
Ejemplo con curl
En este ejemplo, el vendedor cobra una venta de $10.000 y le transfiere $1.000 de comisión al marketplace:
En este ejemplo, <API Key> es la API Key de la cuenta origen (la del vendedor), y 1A2B3C4D y <Marketplace Secret> son los datos de la cuenta destino (la del marketplace).
Respuesta
Si la solicitud se crea correctamente, la API responde 201 Created. La respuesta incluye transfer_to tal como lo enviaste (respuesta recortada):
A partir de acá, el cobro sigue el flujo habitual: llevás al comprador al checkout_url (ver la guía de Botón de Pago Dinámico).
3. Qué pasa cuando se paga
Cuando se acredita el pago de la Solicitud de Pago, PAGOS360 procesa el split de forma asincrónica (en segundo plano). Por cada elemento de transfer_to:
En la cuenta destino se crea una nueva Solicitud de Pago, ya en estado
paid, por el importe deamount. Esa solicitud tiene:description:Pago en cuenta conectada <nombre de la cuenta origen> (ID <id de la solicitud original>). Concepto: <description>.external_reference: el detransfer_too, si no lo enviaste, el de la solicitud original.payer_name: el nombre de la cuenta origen.
En la cuenta origen se registra la Transferencia Programada, que descuenta
amountde su saldo. En el historial de movimientos figura comoTransferencia Programada a <nombre de la cuenta destino> (<ID de cuenta destino>).
En los pagos con medios en efectivo o por archivo de rendición (por ejemplo Rapipago, Pago Fácil o débito en CBU), el split se genera cuando PAGOS360 procesa la rendición del medio de pago, es decir, el informe con los cobros que ese medio recibió.
Asegurate de que la cuenta destino esté activa: si no lo está en el momento del pago, esa transferencia no se genera. El importe de la transferencia es siempre el amount que enviaste, aunque el comprador pague con segundo vencimiento.
Estados de la Transferencia Programada
Estado | Descripción |
|---|---|
| La transferencia se generó, pero el dinero todavía no está disponible. |
| El dinero ya está disponible en la cuenta destino. |
| La transferencia se revirtió (ver más abajo). |
La transferencia pasa a transferred cuando el cobro de la cuenta origen queda disponible, según los plazos de acreditación del medio de pago con el que se pagó.
Comisiones
La cuenta origen paga la comisión del cobro según su cuadro tarifario, calculada sobre el importe total pagado. La transferencia no tiene una comisión adicional para la cuenta origen.
La cuenta destino recibe el dinero como un cobro por el canal Transferencia Programada, al que se le aplican las condiciones de su propio cuadro tarifario para ese canal.
Devoluciones y contracargos
Si se devuelve el pago original o el comprador desconoce el cargo (contracargo), lo que pasa con la transferencia depende de refundable:
| Qué pasa con la transferencia |
|---|---|
| Se revierte: se le descuenta el importe a la cuenta destino, la transferencia pasa a |
| No se revierte. La cuenta origen asume el total de la devolución y necesita saldo suficiente para cubrirla. |
La reversión solo se aplica si la solicitud de la cuenta destino todavía está en estado paid.
4. Webhooks y consultas
Cada cuenta recibe los webhooks en la URL que tiene configurada (Webhooks):
Cuenta | Evento | Cuándo |
|---|---|---|
Origen |
| Cuando se paga la solicitud original. |
Origen |
| Cuando se devuelve o se revierte el pago original. |
Destino |
| Cuando se genera la Transferencia Programada. El |
Destino |
| Cuando se revierte una transferencia con |
Ejemplo del webhook que recibe la cuenta destino:
Para consultar el detalle, cada cuenta usa GET /payment-request/{id} con su propia API Key (Consultar solicitud de pago):
La cuenta origen consulta la solicitud original. La respuesta incluye
transfer_tocon las transferencias que pediste.La cuenta destino consulta la solicitud generada por el split, con el
idque recibe en el webhook.
Usá external_reference en transfer_to para que la cuenta destino pueda conciliar cada transferencia con la venta que la originó.
La API pública no tiene hoy un endpoint para consultar el estado de una Transferencia Programada (pending, transferred o refunded).
Errores frecuentes
Si falla la validación, la API responde 400 Bad Request.
Mensaje | Causa y solución |
|---|---|
| La suma de |
| Un |
| Falta el header |
| Enviaste el mismo valor en dos headers |
| Enviaste más de 5 headers |
Los errores de headers llegan con este formato:
Si falta account_id, amount o description, o si amount es 0 o negativo, la API devuelve un error de validación sobre transfer_to.