Suscripciones y cobros únicos
Una suscripción permite cobrar a un cliente de forma recurrente. Un cobro único permite cobrar a un cliente una sola vez.
('1', 'Nueva Suscripcion'),
('2', 'Abandono'),
('6', 'Dada de baja'),
('7', 'Recuperada'),
('10', 'Cancelada por el Cliente'),
('11', 'Cambio de metodo'),
('12', 'Recuperada por CC'),
('13', 'No autorenovar por CC'),
('14', 'Expirada'),
('15', 'Suscripcion Impaga'),
('16', 'Cambio de monto'),
('17', 'Suscripción pasa a monto personalizado'),
('18', 'Cambio de fecha de cobro'),
('19', 'Aplicado descuento de recuperacion')En Reveniu tenemos dos tipos de planes de cobro: Cobros Recurrentes o Suscripciones; y Cobros Únicos. Esto estará determinado por el tipo de Plan al que se asocia tu cliente. Ejemplo, si asocias al cliente a un Plan de Cobro Mensual, se creará una Suscripción. Si asocias al cliente a un plan de Pago Único, se creará un Cobro Único.
La diferencia principal es que las suscripciones recurrentes permiten el cobro al cliente varias veces con un solo registro de su tarjeta: El cliente registra su método de pago una sola vez y Reveniu se encarga de cobrar automáticamente en las fechas indicadas por su intervalo. Los cobros únicos solo se crean para procesar el pago UNA sola vez al cliente.
Si el plan al que estás asociando a tu cliente es de pago único, sólo recibirás la confirmación del pago al final del proceso, pero si deseas cobrar un monto adicional el cliente deberá ingresar de nuevo sus datos e iniciar el proceso nuevamente.
- 1.Se genera un cobro único al momento de iniciar el checkout
- 2.Se intenta automáticamente un cobro, recibiendo del gateway la respuesta del pago respectivo
- 3.Se registra el resultado del pago, con el estatus definido.
- 4.Los cobros únicos no pueden ser reintentados, renovados o actualizados
Una suscripción es un modelo dinámico, y puede tener diferentes estados durante su proceso de vida. Típicamente una suscripción está asociada a un número de pagos exitosos que debe completar antes de renovarse o declararse expirada. Si tiene una duración indefinida, la suscripción seguirá cobrando en su intervalo definido hasta que sea cancelada por ti o por el cliente.
- 1.Al inicio del checkout, la suscripción será creada con un status automático "Abandonada". En el transcurso de 10 minutos se intentará el 1er pago de dicha subscripción y se actualizará su status:
- 1.Si el pago es exitoso, su status cambiará a "On time". Se resta 1 de los intentos de pago del total de pagos y se programa la próxima fecha de pago tomando en cuenta la fecha del pago exitoso y el intervalo configurado para la suscripción. Ejemplo, si es una suscripción mensual, se programará para el mismo día del mes siguiente.
- 2.Si el pago es fallido, su status cambiará a "Failed 1 time" y se programará un intento de pago para el siguiente día calendario.
- 1.La suscripción realizará hasta 4 intentos totales de pago, pasando su estado a:
- 1.Failed 1 time
- 2.Failed 2 time
- 3.Failed 3 time
- 4.Failed
- 2.Si la suscripción llega a su estado Failed, no realizará mas cobros. Podrá ser reactivada si el cliente actualiza los datos de su tarjeta o si el comercio inicia un ciclo de recuperación.
- 2.Al culminar su número de pagos programados, la suscripción verificará si debe ser o no renovada. De ser renovada mantendrá su estatus "On time". Si no, llegará al status ¨Expired¨
En ambos casos, internamente se crea un modelo Suscripción, por lo que manejarás siempre el mismo url api/v1/subscriptions/ . No existen en esta versión los endpoints del tipo api/v1/onetime_payment, por ejemplo.
Objeto
JSON
ATRIBUTO | TIPO | DESCRIPCION |
interval | integer | |
status | integer | |
cicles | integer | Número de ciclos de cobro que debe completar un suscripción antes de terminarse o renovarse.
Si se trata de un link de cobro indefinido y auto renovable siempre aparecerá como 1 |
remaining_cicles | integer | Número de ciclos de cobro que le faltan por cobrar a la suscripción. |
trial_cicles | integer | Número de meses de prueba gratis que quieres agregar a un plan mensual. El número debe ser menor estricto al parámetro cicles |
link_title | string | Título del plan. |
link_description | string | Descripción del plan. |
is_custom_amount | boolean | Falso Si el plan tiene un monto fijo, Verdadero si tiene un monto definido por el cliente al momento del checkout. |
is_uf | boolean | Verdadero Sí el cobro es con CLP, Falso sí el cobro es con UF. |
plan_id | integer | Identificador del plan al que pertenece la suscripción. |
is_auto_renew | boolean | Verdadero Sí la suscripción se auto renovará cuando remaining_cicles sea 0. |
link_amount | number | Monto a cobrar en cada recurrencia. |
discount | object |
|
customer | object |
|
last_payment | object |
|
dte_type | list | Códigos de los DTE que puede generar la suscripción (sólo disponible con integración a Open Factura) |
subscription_custom_fields | object list | Listado de los valores de campos custom que se definan al crear el plan |
total_successful_payments | integer | Número de pagos exitosos procesados con esta suscripción |
payment_method | object |
|
external_id | string | Si deseas asociar esta suscripción a un identificador arbitrario |
{
"id": 2080,
"interval": "3",
"created_on": "2022-11-30T15:14:27.361634Z",
"status": "1",
"cicles": 1,
"remaining_cicles": 1,
"link_title": "Plan de Prueba",
"link_description": "",
"plan_amount": 1000.0,
"is_uf": false,
"next_due": "2022-12-30T15:00:00Z",
"plan_id": 345678,
"is_auto_renew": false,
"discount_rate": 0,
"discount_is_fixed": false,
"discount_cicles": 0,
"customer": { "id": 764, "email": "[email protected]", "name": "Kenny Vivas" },
"last_payment": { "date": "2022-11-30T15:24:45.604953Z", "status": "0" },
"dte_type": {},
"subscription_custom_fields": [],
"total_successful_payments": 1,
"payment_method": { "last_4_card_digits": "XXXXXXXXXXXX6623", "payment_method_type": "Visa" }
}
post
https://integration.reveniu.com
/api/v1/subscriptions/
Crear una suscripción o un cobro único, dependiendo de la frecuencia definida por el plan asociado
Permite iniciar una suscripción a través del API, evitándole al usuario tener que ingresar su información y permitiendo redirigir desde tu aplicación directamente a la selección de medio de pago.
Parameters
Header
Reveniu-Secret-Key
string
Identificador para acceder al API.
Body
plan_id
integer
Identificador único del plan al que corresponderá la suscripción.
field_values
object
Datos a asociar a la suscripción.
extra_customer_fields
Array
Array de objetos Field si necesitas agregar campos adicionales que no están en la lista de field_values pre definidos por Reveniu
Cada campo se define como un objeto Field de esta forma:
{
"name":"El nombre del campo custom",
"tag_name":"identificador_en_snake_case",
"content":"El contenido del campo"
(Siempre sera un string)
}
¡Los tres elementos del objeto son requeridos!
external_id
integer
Puedes generar un id adicional para la suscripción. Esto NO reemplazará al id generado por Reveniu, pero permite reconocer a la suscripción por un identificador adicional.
Responses
200
La respuesta incluye el id de la suscripción (que puede ser consultado posteriormente), una URL donde debes dirigir al usuario para que complete la inscripción de su medio de pago. y un token de seguridad necesario para redirigir a tu cliente al formulario de registro de sus datos de pago (requerido en muchos medios de pago).
Ejemplo
curl https://integration.reveniu.com/api/v1/subscriptions/ \
-H "Reveniu-Secret-Key: your-secret" \
-X POST \
-H "Content-Type: application/json" \
--data '{
"plan_id": 123,
"external_id": "IDENTIFICADOR_EXTERNO_1",
"field_values": {
"email": "[email protected]",
"name": "Perico de los Palotes",
// Si tu plan es de monto indefinido, debes definir el monto del cobro con este campo
"amount": 15000,
// Hasta aqui los parámetros obligatorios. Si deseas puedes agregar:
"address": "Avenida de los Palotes 123, Palotes, RM, Chile",
// Los campos de rut y ent_rut reciben strings, por lo que se puede
//agregar el dígito verificador sin problemas y en diferentes formatos
"rut": "1111111k",
"ent_rut": "1111111-1" //(Rut de empresa)
"bday": "26/10/2015",
"phone": 1111111,
"comuna": 1,
"region": 1,
"country": 1,
"rsocial": "Razon social",
"comments": "Comentarios"
}
// Si deseas agregar campos adicionales aparte de los listados en el objeto field_values
// (como, 'color de ojos' o 'talla de camisa', lo que necesites!)
// Debes agregar el siguiente array (al mismo nivel de "field_values") de objetos, llamado
// "extra_customer_fields"
"extra_customer_fields":
[
{
"name":"El nombre de primer campo custom",
"tag_name":"identificador_en_snake_case",
"content":"El contenido del campo" (Siempre sera un string)
},
{
"name":"El nombre de otro campo custom",
"tag_name":"identificador_del_otro_campo_en_snake_case",
"content":"El contenido del otro campo" (Recuerda, los valores SIEMPRE seran strings)
}
],
...
}'
{ "id": INTEGER,
"completion_url": "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi", "security_token": "01ab49732ee545e5c4644ad4bb8e8b538e58ea604c4b72952946d7c906986531", "status_code": 200 }
La respuesta incluye el id de la suscripción (que puede ser consultado posteriormente), una URL donde debes dirigir al usuario para que complete la inscripción de su medio de pago. y un token de seguridad necesario para redirigir a tu cliente al formulario de registro de sus datos de pago (requerido en muchos medios de pago). Podrás tomar el control final del flujo mediante el
success_url
o el failure_url
del plan, pero te recomendamos siempre usar el webhook subscription_succeeded para completar en tu backend la operación (pues aún si el navegador del usuario o la conexión del usuario sufre un problema, recibirás el llamado a tu webhook).Al redireccionar al
success_url
o a failure_url
que definas en cada link de pago, incluímos un parametro GET id=id__de_suscripcion. Puedes usar este parámetro para verificar que el id que recibes es en efecto el perteneciente una suscripción creada. Recuerda que al recibir esta redirección es muy probable que la suscripción aún no tenga su primer cobro, por lo que puedes esperar hasta un máximo de 10 minutos para verificar su pago. Consulta la sección Ciclo de vida de una suscripción para mas detalles.Uso de external_id
Si deseas que tu suscripcion tenga un identificador arbitrario que generes desde tu backend, puedes asignarlo. Esto NO ALTERA ni REEMPLAZA al id de la suscripción, pero siempre lo recibirás en la info de los webhooks y los demas servicios del api. No es posible realizar una busqueda por external_id en los servicios de búsqueda del api.
Actualmente estamos usando Transbank como gateway de pagos de forma general en Reveniu. Tanto para los planes de pago único (WebpayPlusMall) como en los casos de pago recurrente (OneClickMall) es necesario redirigir via POST a la dirección
completion_url
y el parámetro TBK_TOKEN igual a security_token
. Dejamos un snippet de ejemplo de cómo hacerlo automáticamente creado un formulario con javascript.Te recomendamos que te asegures de almacenar el parámetro id que identifica a la suscripción, debido a que o bien recibirás por webhook la notificación de que la suscripción fue activada o bien puedes tu mismo preguntar por el estatus de la suscripción usando el servicio que te suministramos al efecto
Una vez que tu cliente culmine el proceso de registro será redirigido a la página de éxito o fracaso que definas para cada plan (incluyendo el parámetro
id
=Id de la suscripción, por GET) De no tener una página definida de éxito o fracaso en el plan que estás usando, Reveniu mostrará sus propias páginas de éxito o fracaso por defecto.Ejemplo (Javascript)
var form = document.createElement('form');
form.method = 'POST';
form.action = data.**completion_url**;
form.target = '_self';
var input = document.createElement('input');
input.id = 'TBK_TOKEN';
input.name = 'TBK_TOKEN';
input.type = 'hidden';
input.value = data.**security_token**;
form.appendChild(input);
document.body.appendChild(form);
form.submit();
get
https://integration.reveniu.com
/api/v1/subscriptions/
Listar todas las suscripciones
Ejemplo
curl https://integration.reveniu.com/api/v1/subscriptions/ \
-H "Reveniu-Secret-Key: your-secret"
get
https://integration.reveniu.com
/api/v1/subscriptions/{id}
Devuelve los detalles de una suscripción
Ejemplo
curl https://integration.reveniu.com/api/v1/subscriptions/123 \
-H "Reveniu-Secret-Key: your-secret"
get
https://integration.reveniu.com
/api/v1/subscriptions/search?email={email}
Listar suscripciones asociadas a un correo electrónico
Ejemplo
curl https://integration.reveniu.com/api/v1/subscriptions/[email protected] \
-H "Reveniu-Secret-Key: your-secret"
get
https://integration.reveniu.com
/api/v1/subscriptions/{id}/payments
Devuelve los pagos asociados a una suscripción
Ejemplo
curl https://integration.reveniu.com/api/v1/subscriptions/{id}/payments \
-H "Reveniu-Secret-Key: your-secret"
get
https://integration.reveniu.com
/api/v1/subscriptions/{id}/interactions/
Listar en orden cronológico inverso todas las interacciones que ha tenido la suscripción
('1', 'Nueva Suscripcion'),
('2', 'Abandono'),
('6', 'Dada de baja'),
('7', 'Recuperada'),
('10', 'Cancelada por el Cliente'),
('11', 'Cambio de metodo'),
('12', 'Recuperada por CC'),
('13', 'No autorenovar por CC'),
('14', 'Expirada'),
('15', 'Suscripcion Impaga'),
('16', 'Cambio de monto'),
('17', 'Suscripción pasa a monto personalizado'),
('18', 'Cambio de fecha de cobro'),
('19', 'Aplicado descuento de recuperacion')
post
https://integration.reveniu.com
/v1/subscriptions/reactivate/{id}
Intenta recuperar una suscripción por su id
post
https://integration.reveniu.com
/api/v1/subscriptions/reactivate/
Forzar la recuperación de un listado de suscripciones (actualización por lotes)
post
https://integration.reveniu.com
/api/v1/subscriptions/{id}/payments/authorize/
Genera un pago por un monto arbitrario a una suscripción activa
post
https://integration.reveniu.com
/api/v1/subscriptions/{id}/disable/
Dar de baja una suscripción conociendo su id
post
https://integration.reveniu.com
/api/v1/subscriptions/{Id de sub}/disablerenew/
Desactiva la renovación de una suscripción
post
https://integration.reveniu.com
/api/v1/subscriptions/{Id de sub}/dueday/
Cambiar el día preferido de cobro de una suscripción
post
https://integration.reveniu.com
/api/v1/subscriptions/change_method/
Enviar a un cliente el link para cambio de método de pago de una suscripción
post
https://integration.reveniu.com
/api/v1/subscriptions/{id}/amount/
Cambiar el monto de cobro de una suscripción
Last modified 10d ago