Este artículo se centra en la explicación del funcionamiento de un Marketplace. Para su implementación en código, subí una aplicación sencilla hecha con NodeJS a este repositorio.
Cuando se habla de Mercado Pago lo normal es imaginarse una transacción entre dos personas, una simple transferencia de dinero. Y si somos dueños de una tienda en línea entonces imaginamos a nuestros clientes pagandonos por nuestros productos.
Pero este artículo toma en cuenta otro punto de vista, en el que ofrecemos no productos, si no una plataforma para que otras personas puedan vender. En este caso, estamos hablando de ser los dueños de un Marketplace.
Definición
Un Marketplace es una plataforma o aplicación web donde existen múltiples proveedores y múltiples clientes. Generalmente el modelo de negocio de estas plataformas es el cobro de una comisión o tarifa por cada transacción que se realice entre proveedor y cliente.
Funcionamiento de pagos en un eCommerce
Antes de hablar sobre la implementación de un Marketplace, hay que ver rápidamente como funcionan los pagos simples.

En una aplicación donde existe un único vendedor, solo necesitamos las credenciales del mismo para poder crear pagos, suscripciones, etc, usando Mercado Pago.
Lo que hacemos en este tipo de aplicaciones es como sigue:
1. Creamos una aplicación.
Lo primero que hacemos es ingresar en Mercado Pago Developers.
Y allí crear una aplicación, el proceso es sumamente sencillo.
2. Obtenemos las credenciales.
Una vez creada la aplicación, debemos obtener las credenciales, de producción en el caso de que se quieran realizar pagos reales, o de prueba para desarrollar.
Las credenciales constan de tres datos principalmente: App Id, Access Token y Client Secret. Siendo el Access Token el único requerido para la creación de un pago.
Usando este dato en los headers junto con la API de Mercado Pago, podemos crear básicamente todo lo que un usuario puede crear desde la propia aplicación móvil de MP.

3. Creamos un endpoint para generar el link de pago.
Cuando un usuario ve un producto o item del catalogo y da click en “Comprar”, se envía una petición a nuestro servidor, específicamente a este endpoint para que se realice la consulta a la API de MP (Con el Access Token en los headers) y devuelva el link de pago o “init point”.
4. Creamos un endpoint para recibir notificaciones.
Cuando el usuario entra en el “init point”, completa un formulario con sus datos personales e inicia la transacción, MP nos puede enviar una notificación con toda la información sobre la misma.
Por eso lo mejor es implementar una función en nuestro servidor que reciba estas peticiones y simplemente enviar un mensaje por Telegram o guardar la información en una base de datos.
Funcionamiento de pagos en un Marketplace
Como vimos, cuando se trata de una persona enviándole dinero a otra, se requiere el Access Token de la persona que está vendiendo.
En un Marketplace tenemos varios vendedores por lo que necesitamos las credenciales de cada uno de ellos. Por supuesto que no les vamos a decir “Che, ¿me podes pasar el Access Token de tu cuenta así generamos los links de pago?”.
Un bosquejo de las entidades presentes en un Marketplace:

Primero tenemos al Marketplace Owner o el dueño de la plataforma (Nosotros). Las credenciales de esta entidad se obtienen a mano, yendo a la aplicación que creamos en MP y principalmente se van a utilizar para obtener acceso a las cuentas de los vendedores.
El siguiente paso es obtener las credenciales de los vendedores (Access y Refresh Token). Existe un protocolo con el que los usuarios pueden otorgar a nuestra aplicación acceso a información privada de su cuenta de MP, y en consecuencia permitirnos actuar en su lugar (Crear pagos, suscripciones, etc en MP). Este protocolo es OAuth.
Es decir, en nuestro Marketplace, antes de permitir a los vendedores publicar productos y ofrecérselos a los clientes, debemos pedir que nos autoricen a utilizar sus credenciales de MP para poder crear los pagos.
Cuando el vendedor se conecta exitosamente a nuestra aplicación (Nos da acceso), recibimos un código que MP nos envía.
Vamos a verlo de cerca.
Para usar OAuth en Mercado Pago, no necesitamos realizar ninguna petición, basta con enviarle el siguiente link al vendedor:
const randomId = nanoid() // idnwdna9082n8d289b9
const redirectUrl = 'https://nuestroservidor.com/OAuthResult'
const link = `
https://auth.mercadopago.com/authorization
?client_id=${process.env.APP_ID}
&response_type=code
&platform_id=mp
&state=${randomId}
&redirect_uri=${redirectUrl}`
Escriban el link en una sola línea, en este caso lo hice en varias para que se vean claramente los parámetros.
En el link:
client_id: uno de los datos de nuestras credenciales, lo obtenemos yendo a la aplicación que creamos en MP. Es el identificador de nuestra app.
state: este campo debe ser un identificador único para cada intento de autorización, que no sea información confidencial. Es decir debemos generar un id cada vez que le enviemos el link a un usuario.
redirect_uri: es la URI donde se ubica la función de nuestro servidor que va a recibir el código, con el que luego podremos obtener las credenciales del vendedor.
Una vez se conecta, recibimos el código en la URI que especificamos en anteriormente.
https://nuestroservidor.com/OAuthResult?code=CODE&state=idnwdna9082n8d289b9
Con este código y nuestras credenciales realizamos una petición a la API nuevamente (En este endpoint) y ahora si obtenemos las credenciales del vendedor en cuestión (Los Tokens).
El último paso es guardar los Tokens y utilizarlos cuando se quiera crear un link de pago que corresponda a ese vendedor.
Ejemplo: un usuario quiere comprar un producto con id=1. Obtenemos los datos del producto, donde está también el campo “vendedor_id: 24”. Buscamos el Access Token en la tabla digamos “credenciales”, donde vendedor_id=24. Generamos el link de pago usando ese token y se lo enviamos al cliente.
Además, si queremos cobrar una comisión en la transacción basta con incluir un campo “marketplace_fee” o “application_fee” indicando el monto (No porcentaje) que se cobrará como comisión en la creación del pago. Puedes ver esta documentación que explica algunos detalles.
Saludos.