Cómo integrar marketplace en el Checkout Pro
Para comenzar debes:
- Dar de alta una aplicación de tipo Marketplace.
- Solicitar a tus vendedores que se vinculen.
- Crear preferencias de pago en nombre de tus vendedores.
1. Cómo crear tu aplicación
Crea tu aplicación, marcando la opción MP Connect / Marketplace mode y los scopes read
, write
y offline_access
.
También debes completar una Redirect URI donde serán redireccionados los vendedores para poder ser vinculados correctamente.
Una vez creada, obtendrás el APP_ID
(identificador de aplicación) necesario para el siguiente paso.
2. Vinculación de cuentas
Para operar en Mercado Pago en nombre de tu vendedor, debes primero solicitarle autorización.
2.1. Para esto, redirige al usuario a la siguiente URL reemplazando en client_id
, el valor de APP_ID
y la misma redirect_uri
que configuraste en el paso anterior:
https://auth.mercadopago.com.pe/authorization?client_id=APP_ID&response_type=code&platform_id=mp&redirect_uri=http://www.URL_de_retorno.com
2.2. Recibirás el código de autorización en la URL que especificaste:
http://www.URL_de_retorno.com?code=AUTHORIZATION_CODE
El AUTHORIZATION_CODE
será utilizado para crear las credenciales y tiene un tiempo de validez de 10 minutos.
2.3. También puedes incluir el parámetro `state` en la URL de autorización para identificar a quién corresponde el código que recibiste. Realiza esto de manera segura, asignando en dicho parámetro un identificador aleatorio que sea único por cada intento.
Al incluir este parámetro, la URL de redirección quedaría de la siguiente forma:
https://auth.mercadopago.com.pe/authorization?client_id=APP_ID&response_type=code&platform_id=mp&state=id=RANDOM_ID=&redirect_uri=http://www.URL_de_retorno.com
Ahora recibirás en la URL de retorno especificada el código de autorización y también el identificador seguro:
https://www.URL_de_retorno.com?code=AUTHORIZATION_CODE&state=id=RANDOM_ID
Crea las credenciales de tus vendedores
Usa el código de autorización, obtenido en el paso anterior, para obtener las credenciales del usuario mediante la API de oAuth y así poder operar en su nombre.
Request:
curl
curl -X POST \
-H 'accept: application/json' \
-H 'content-type: application/x-www-form-urlencoded' \
'https://api.mercadopago.com/oauth/token' \
-d 'client_secret=ACCESS_TOKEN' \
-d 'grant_type=authorization_code' \
-d 'code=AUTHORIZATION_CODE' \
-d 'redirect_uri=REDIRECT_URI'
Los parámetros que debes incluir son:
client_secret
: TuACCESS_TOKEN
. Puedes obtenerlo desde el detalle de tu aplicación.code
: El código de autorización que obtuviste al redirigir al usuario de vuelta a tu sitio.redirect_uri
: Debe ser la misma Redirect URI que configuraste en tu aplicación.
Response:
json
{
"access_token": "MARKETPLACE_SELLER_TOKEN",
"token_type": "bearer",
"expires_in": 15552000,
"scope": "offline_access read write",
"refresh_token": "TG-XXXXXXXX"
}
En la respuesta, además del Access Token del vendedor que se ha vinculado, obtienes el Refresh Token que debes utilizar para renovar periódicamente sus credenciales.
Renueva las credenciales de tus vendedores
Este proceso debes efectuarlo periódicamente para asegurar tener almacenado en tu sistema credeciales de vendedores que estén vigentes, dado que son válidas por 6 meses.
Sugerimos que si en el flujo de pago obtienes algún error relacionado al Access Token que estás utilizando, refresques automáticamente y reintentes el pago, antes de mostrar un error al comprador.
curl
curl -X POST \
-H 'accept: application/json' \
-H 'content-type: application/x-www-form-urlencoded' \
'https://api.mercadopago.com/oauth/token' \
-d 'client_secret= ACCESS_TOKEN' \
-d 'grant_type=refresh_token' \
-d 'refresh_token=USER_RT'
Respuesta esperada:
json
{
"access_token": "MARKETPLACE_SELLER_TOKEN",
"token_type": "bearer",
"expires_in": 15552000,
"scope": "offline_access read write",
"refresh_token": "TG-XXXXXXXX"
}
3. Integra el checkout
Para cobrar en nombre de tus vendedores debes integrar Checkout Pro, generando las preferencias de pago con el Access Token de cada vendedor para tu aplicación.
Si deseas cobrar una comisión por cada pago que procesa tu aplicación en nombre de tu vendedor, sólo debes agregar dicho monto en el parámetro marketplace_fee
al crear la preferencia:
curl -X POST \
-H 'accept: application/json' \
-H 'content-type: application/json' \
-H 'Authorization: Bearer SELLER_AT' \
'https://api.mercadopago.com/checkout/preferences' \
-d '{
"items": [
{
"title": "Item title",
"description": "Description",
"quantity": 1,
"unit_price": 50,
"currency_id": "PEN",
"picture_url": "https://www.mercadopago.com/org-img/MP3/home/logomp3.gif"
}
],
"marketplace_fee": 2.29
}'
<?php
$preference = new MercadoPago\Preference();
$item = new MercadoPago\Item();
$item->title = "Blue shirt";
$item->quantity = 10;
$item->currency_id = "PEN";
$item->unit_price = 150;
$payer = new MercadoPago\Payer();
$payer->email = "test_user_19653727@testuser.com";
$preference->items = array($item);
$preference->payer = $payer;
$preference->marketplace_fee = 2.56
$preference->notification_url = "http://urlmarketplace.com/notification_ipn"
$preference->save();
?>
Preference preference = new Preference();
Item item = new Item();
item.setId("1234")
.setTitle("Blue shirt")
.setQuantity(10)
.setCategoryId("PEN")
.setUnitPrice((float) 14.5);
Payer payer = new Payer();
payer.setEmail("john@yourdomain.com");
preference.setPayer(payer);
preference.appendItem(item);
preference.setMarketPlace(2.56);
preference.setNotificationUrl("http://urlmarketplace.com/notification_ipn");
preference.save();
var preference = {}
var item = {
title: 'Blue shirt',
quantity: 10,
currency_id: 'PEN',
unit_price: 150
}
var payer = {
email: "john@yourdomain.com"
}
preference.items = [item]
preference.payer = payer
preference.marketplace_fee = 2.56
preference.notification_url = "http://urlmarketplace.com/notification_ipn";
mercadopago.preferences.create(preference).then(function (data) {
// Do Stuff...
}).catch(function (error) {
// Do Stuff...
});
preference = MercadoPago::Preference.new()
item = MercadoPago::Item.new()
item.title="Blue shirt"
item.quantity= 10
item.currency_id = 'PEN'
item.unit_price = 150
payer = MercadoPago::Payer.new()
payer.email="john@yourdomain.com"
preference.items = [item]
preference.payer = payer
preference.marketplace_fee = 2.56
preference.notification_url = "http://urlmarketplace.com/notification_ipn"
preference.save
El vendedor va a recibir la diferencia entre el monto total y las comisiones, tanto la de Mercado Pago como la del Marketplace, así como cualquier otro importe que se deba descontar de la venta.
Notificaciones
Es necesario que envíes tu notification_url
, donde recibirás aviso de todos los nuevos pagos y actualizaciones de estados que se generen, así como también alta y baja de usuarios en tu Marketplace.
En el artículo de notificaciones puedes obtener más información.
Devoluciones y cancelaciones
Las devoluciones y cancelaciones podrán ser realizadas tanto por el Marketplace como por el vendedor, vía API o desde la cuenta de Mercado Pago. En caso de que la devolución la realice el Marketplace, se deberán utilizar las credenciales obtenidas para cobrar en nombre del vendedor.
En el caso de las cancelaciones, solo podrán ser realizadas utilizando la API de cancelaciones.
Puedes encontrar más información en el articulo sobre devoluciones y cancelaciones.