Saltar al contenido principal

Fuentes de pago & Tokenización

Cambio importante en el API
Para la creación de transacciones y fuentes de pago, pensando en la privacidad y el correcto manejo de los datos personales de nuestros usuarios, es ahora obligatorio el uso de Tokens de Aceptación a la hora de crear cualquiera de estos dos recursos a través de nuestro API.

En Wompi, no sólo puedes ofrecer a tus usuarios realizar pagos de una sola vez -como el de un carrito de compras-, sino que también puedes ofrecer que paguen por tus productos y servicios sin su intervención directa, como es el caso de un cobro periódico -una suscripción a una revista por ejemplo-, o el cobro de un servicio on-demand, como entregas a domicilio o servicios de transporte, por ejemplo, donde idealmente tus usuarios sólo provean su información de pago una única vez y los cargos se hagan a futuro, según lo requiera tu modelo de negocio.

A este tipo de pagos se les conoce también como pagos automáticos.

Esto lo puedes ofrecer usando nuestra funcionalidad de fuentes de pago del API. Tus usuarios los pueden realizar usando tarjetas o cuentas Nequi, y requieren que el usuario lleve a cabo un único proceso inicial, donde provea bien sea la información de su tarjeta o de su cuenta Nequi, que será usada posteriormente para hacer los cobros respectivos.

Tan sólo debes seguir el paso a paso descrito a continuación:

Guía de nivel intermedio - avanzado
Los pasos descritos a continuación requieren una integración y uso directo de nuestra API, por lo cual está orientado a desarrolladores de nivel intermedio-avanzado que estén familiarizados con el uso de APIs. Sin embargo, Wompi planea facilitar el proceso pronto, ofreciendo realizar el primer paso a través de nuestro Widget.

Paso a paso

  • Paso 1 — Solicita la información del método de pago.
  • Paso 2 — Crea una fuente de pago.
  • Paso 3 — Crea una transacción usando la fuente de pago.

Paso 1: Solicita la información del método de pago

El primero de estos 3 pasos para realizar un cobro usando fuentes de pago, requiere el almacenamiento de forma segura de una tarjeta o cuenta Nequi. Para eso, usarás nuestro API de manera que Wompi almacene de manera segura información de tarjetas y cuentas Nequi.

¡Nunca guardes información sensible!
Desaconsejamos completamente que guardes información sensible de tarjetas, cuentas Nequi o cualquier método de pago, pues no sólo pones en riesgo la información de tus usuarios sino que podrías enfrentar sanciones y problemas legales según la regulación de tu país. Wompi cuenta con los más altos estándares de la industria en cuanto a seguridad y encripción, de manera que la información repose de manera 100% segura.

Al proceso de guardar y representar la información de una tarjeta de manera segura le llamamos: Tokenización. Esto quiere decir que debes enviar al endpoint respectivo del API de Wompi la información del método de pago, una única vez, y obtendrás un token el cual podrás usar para crear la fuente de pago en el Paso 2 de esta guía.

Ten en cuenta el ambiente del API
Recuerda que en Wompi hay ambiente de Sandbox, para que realices pruebas sin usar información real de métodos de pago, y ambiente de Producción, contra el cual debes procesar tus pagos reales.

Tarjetas

Para tarjetas de crédito o débito el endpoint que debes usar es /v1/tokens/cards realizando un POST con el siguiente cuerpo JSON:

{
"number": "4242424242424242", // Número de tarjeta (como un string, sin espacios)
"exp_month": "06", // Mes de expiración (como string de 2 dígitos)
"exp_year": "29", // Año de expiración (como string de 2 dígitos)
"cvc": "123", // Código de seguridad (como string de 3 o 4 dígitos)
"card_holder": "Pedro Pérez" // Nombre del tarjeta habiente (string de mínimo 5 caracteres)
}

Como resultado a esta petición recibirás la siguiente respuesta:

{
"status": "CREATED",
"data": {
"id": "tok_prod_15_44c5638281if67l04eA63f705bfA5bde",
"created_at": "2020-09-07T19:09:31.585+00:00",
"brand": "VISA",
"name": "VISA-4242",
"last_four": "4242",
"bin": "538696",
"exp_year": "29",
"exp_month": "06",
"card_holder": "Pedro Pérez",
"expires_at": "2021-09-05T19:09:30.000Z"
}
}

Si en el campo status recibes el valor "CREATED", esto quiere decir que la tarjeta ha sido tokenizada correctamente y puedes usar la propiedad id para registrar la fuente de pago.

Cuentas Nequi

Para pagos con Nequi, el endpoint que debes usar es /v1/tokens/nequi realizando un POST con la Llave Pública como autorizador con el siguiente cuerpo JSON:

{
"phone_number": "3017654321"
}

Recibirás como respuesta en la propiedad id el token con el que podrás registrar la fuente de pago. Sin embargo, el cliente tendrá que haber aceptado primero la suscripción en su celular de modo que el estado pase de "PENDING" a "APPROVED".

{
"data": {
"id": "nequi_prod_RQkUiuv3lEnDLiSao2Cz0iQLdFlyQOI5",
"status": "PENDING",
"phone_number": "3107654321",
"name": "Company Name"
}
}

Para chequear el estado de la suscripción, puedes hacer GET en el endpoint de /v1/tokens/nequi/ con el token obtenido:

GET /v1/tokens/nequi/nequi_prod_RQkUiuv3lEnDLiSao2Cz0iQLdFlyQOI5

Una vez se obtenga un "APPROVED" en la propiedad "status" será posible registrar la fuente de pago.

{
"data": {
"id":"nequi_prod_RQkUiuv3lEnDLiSao2Cz0iQLdFlyQOI5",
"status":"APPROVED",
"phone_number":"3107654321",
"name":"Company Name"
}
}

Paso 2: Crea una fuente de pago

Usa tu llave privada para crear fuentes de pago
Ten presente que en este caso, el endpoint de creación de fuentes de pago requiere el uso de tu llave privada y que debe hacerse desde tu back-end (servidor) para mantener protegida dicha llave. Nunca debes hacerlo desde el dispositivo del usuario (navegador, dispositivo móvil, etc)

Para crear una fuente de pago, se debe hacer un POST a

/v1/payment_sources

Con los campos:

  • "customer_email" que es el email del pagador
  • "type" para indicar el medio de pago correspondiente al token, que puede ser "NEQUI" o "CARD"
  • "token" el token de Nequi o Tarjeta que hayas obtenido
  • "acceptance_token" un token de aceptación

Tarjetas

El cuerpo de la petición debe ser similar al siguiente:

{
"type": "CARD",
"token": "tok_prod_1_BBb749EAB32e97a2D058Dd538a608301",
"customer_email": "pepito_perez@example.com",
"acceptance_token": "eyJhbGciOiJIUzI1NiJ9.eyJjb250cmFjdF9pZCI6MSwicGVybWFsaW5rIjoiaHR0cHM6Ly93b21waS5jby93cC1jb250ZW50L3VwbG9hZHMvMjAxOS8wOS9URVJNSU5PUy1ZLUNPTkRJQ0lPTkVTLURFLVVTTy1VU1VBUklPUy1XT01QSS5wZGYiLCJmaWxlX2hhc2giOiIzZGNkMGM5OGU3NGFhYjk3OTdjZmY3ODExNzMxZjc3YiIsImppdCI6IjE1ODEwOTIzNjItMzk1NDkiLCJleHAiOjE1ODEwOTU5NjJ9.JwGfnfXsP9fbyOiQXFtQ_7T4r-tjvQrkFx0NyfIED5s"
}

Obtendremos una respuesta con una estructura como la siguiente indicándonos que fue creada exitosamente:

{
"data": {
"id": 3891,
"public_data": {
"type": "CARD"
},
"type": "CARD",
"status": "AVAILABLE"
}
}

Cuentas Nequi

El cuerpo de la petición debe ser similar al siguiente:

{
"type": "NEQUI",
"token": "nequi_prod_RQkUiuv3lEnDLiSao2Cz0iQLdFlyQOI5",
"customer_email": "pepito_perez@example.com",
"acceptance_token": "eyJhbGciOiJIUzI1NiJ9.eyJjb250cmFjdF9pZCI6MSwicGVybWFsaW5rIjoiaHR0cHM6Ly93b21waS5jby93cC1jb250ZW50L3VwbG9hZHMvMjAxOS8wOS9URVJNSU5PUy1ZLUNPTkRJQ0lPTkVTLURFLVVTTy1VU1VBUklPUy1XT01QSS5wZGYiLCJmaWxlX2hhc2giOiIzZGNkMGM5OGU3NGFhYjk3OTdjZmY3ODExNzMxZjc3YiIsImppdCI6IjE1ODEwOTIzNjItMzk1NDkiLCJleHAiOjE1ODEwOTU5NjJ9.JwGfnfXsP9fbyOiQXFtQ_7T4r-tjvQrkFx0NyfIED5s"
}

Obtendremos una respuesta con una estructura como la siguiente indicándonos que fue creada exitosamente:

{
"data": {
"id": 3891,
"public_data": {
"type": "NEQUI",
"phone_number": "3105671703"
},
"type": "NEQUI",
"status": "AVAILABLE"
}
}

Paso 3: Crea una transacción

Usa tu llave privada para crear transacciones usando fuentes de pago
Ten presente que, para crear transacciones usando una fuente de pago, el endpoint de creación de transacciones requiere el uso de tu llave privada y que debe hacerse desde tu back-end (servidor) para mantener protegida dicha llave. Nunca debes hacerlo desde el dispositivo del usuario (navegador, dispositivo móvil, etc)

Al tener disponible un id de una fuente de pago, podrás usarlo para hacer cargos a tus usuarios sin necesidad de que ellos intervengan directamente en cada ocasión. Así podrás por ejemplo cobrar mensualmente una suscripción a un servicio, realizar cobros por servicios on-demand (como ventas a domicilio o servicios de transporte), cobrar por el uso de tu plataforma, etc.

Para esto, debes usar el mismo endpoint de transacciones que usan los pagos simples (POST a /v1/transactions), con la diferencia de que en esta ocasión enviarás información del método de pago (objeto payment_method) con el número de cuotas si la fuente de pago representa una tarjeta, de lo contrario este objeto no se tiene que enviar. En cualquier caso debes enviar un payment_source_id, por ejemplo:

{
"amount_in_cents": 4990000, // Monto current centavos
"currency": "COP", // Moneda
"signature": "37c8407747e595535433ef8f6a811d853cd943046624a0ec04662b17bbf33bf5", //Firma de integridad
"customer_email": "example@gmail.com", // Email del usuario
"payment_method": {
"installments": 2 // Número de cuotas si la fuente de pago representa una tarjeta de lo contrario el campo payment_method puede ser ignorado.
},
"reference": "sJK4489dDjkd390ds02", // Referencia única de pago
"payment_source_id": 3891 // ID de la fuente de pago
}

NOTA: Si tienes dudas de como generar el valor de la firma de integridad puedes revisar la siguiente documentación: Genera una firma de integridad

Transacciones con COF

Cuando el medio de pago corresponde a una tarjeta de la franquicia MasterCard o VISA y el procesador de pagos es RBM, se puede hacer uso de Credential On File (COF) y así aumentar la taza de aprobación en las transacciones del comercio. Para esto, es necesario enviar recurrent, teniendo en cuenta que payment_source_id se convierte en un campo obligatorio.

recurrent debe ser un valor Booleano:

  • true: Hace referencia a todas las transacciones en las que el titular autoriza que se almacenen los datos de su tarjeta y posteriormente se realicen cobros con el mismo monto de manera periódica. (Transacción de venta COF con recurrencia)
  • false: Hace referencia a todas las transacciones en las que el titular autoriza que se almacenen los datos de su tarjeta y posteriormente se realicen cobros con diferentes montos sin ningún tipo de periodicidad. (Transacción de venta COF almacenada)
{
"amount_in_cents": 4990000, // Monto en centavos
"currency": "COP", // Moneda
"customer_email": "example@gmail.com", // Email del usuario
"payment_method": {
"installments": 2 // Número de cuotas si la fuente de pago representa una tarjeta de lo contrario el campo payment_method puede ser ignorado.
},
"reference": "sJK4489dDjkd390ds02", // Referencia única de pago
"payment_source_id": 3891, // ID de la fuente de pago (obligatorio)
"recurrent": true // Recurrente
}
Aclaración
Ten presente que:
  • Sí no se envía recurrent, la transacción se realizará sin COF.
  • Sí se envía recurrent en transacciones con tarjetas de franquicia diferente a MasterCard o VISA, la transacción se realizará sin COF.
  • Sí se envía recurrent y el procesador habilitado para el comercio es diferente a RBM, la transacción se realizará sin COF.

Widget en modo de tokenización

Puedes integrar nuestro Widget en modo tokenización para que puedas guardar la información de tus usuarios de forma más rápida y segura.

Con tan solo unas líneas de HTML:

    <form method="POST" action="/process_token">
<script
src="https://checkout.wompi.co/widget.js"
data-render="button"
data-widget-operation="tokenize"
data-public-key="pub_test_X0zDA9xoKdePzhd8a0x9HAez7HgGO2fH"
>
</script>
</form>

Con el token dentro de la respuesta debes hacer un POST a /v1/payment_sources desde tu servidor y usando tu llave privada de comercio. Recuerda nunca usar la llave privada en contextos inseguros como tu código HTML.