← Índice de manuales
Manual funcional · Sistema Plenario v14

MercadoPago - Cobro de cuotas online

MercadoPago es un medio de cobro online que se integra a Plenario para que los clientes puedan pagar las cuotas de sus créditos con tarjeta, dinero en cuenta o efectivo (Pago Fácil / Rapipago), usando el checkout de…

Módulo: PréstamosVersión: 1.0Actualizado: 2026-07-20

Detalle

Campo Descripción
Manual de Usuario MercadoPago - Configuración y cobro de cuotas online en Plenario

Introducción

MercadoPago es un medio de cobro online que se integra a Plenario para que los clientes puedan pagar las cuotas de sus créditos con tarjeta, dinero en cuenta o efectivo (Pago Fácil / Rapipago), usando el checkout de MercadoPago (Checkout Pro).

Funciona de forma complementaria al proveedor de cobro base (Pago360 / Mobbex): no lo reemplaza, se suma como una opción más. El circuito es el mismo que ya conocés de Pago360, pero sobre la plataforma de MercadoPago.

Se puede usar de dos maneras:

  • Desde la web de clientes (MisCreditos): el cliente entra, ve sus créditos y cuotas, elige las que quiere pagar y paga con MercadoPago.
  • Desde el Back Office (Detalle de Crédito): un operador genera un link de pago para una o varias cuotas y se lo envía al cliente por correo o WhatsApp.

Cuando el cliente paga, el cobro se imputa automáticamente (asiento contable + cuenta corriente + cuota marcada como cobrada), sin intervención manual. Este manual explica cómo configurarlo y cómo usarlo desde cero.

Acceso al módulo

MercadoPago no es una pantalla propia: se usa desde los lugares donde ya cobrás cuotas.

  1. Detalle de Crédito (Back Office) — Préstamos → Créditos → abrí un crédito → botón Operaciones. Ahí están las acciones de MercadoPago (crear link, verificar cobro) y en Ver el log de MercadoPago.
  2. Grilla de Solicitudes (Back Office) — en el ribbon hay un botón LogMercadoPago para ver los movimientos del crédito seleccionado.
  3. MisCreditos (web de clientes) — el cliente ingresa a su portal, abre un crédito, selecciona cuotas y elige Pagar con MercadoPago en la botonera de medios de pago.

Importante: para generar links de pago desde el Back Office necesitás el permiso de operaciones de solicitud de pago. Ver la sección Permisos al final.

Pantalla principal

En el Detalle de Crédito, el menú Operaciones agrupa las acciones de cobro. Además de las de Pago360 y Mobbex, vas a encontrar las de MercadoPago:

  • MercadoPago: Crear link de pago y enviar por correo al cliente
  • MercadoPago: Crear link de pago (copiar para WhatsApp)
  • MercadoPago: Verificar cobro / Conciliar

El menú Ver incluye Log MercadoPago (crédito) y Log MercadoPago (cuota seleccionada). Todas estas opciones están también en el menú contextual (clic derecho sobre la grilla de cuotas), en el mismo orden.

Configuración

Toda la configuración de MercadoPago vive en parámetros del sistema. El principal es un parámetro con un JSON (patrón config-en-parámetro, no una tabla).

Parámetro de credenciales (JSON)

Campo Descripción
Web.MisCreditos.MercadoPago.Config JSON con las credenciales. Campos: AccessToken / AccessToken_Test (tokens de MercadoPago), WebhookSecret / WebhookSecret_Test (clave secreta de firma del webhook), Entorno (test o produccion), Activo (habilita/deshabilita). El sistema usa el par Test o el productivo según Entorno.

Parámetros del cobro desde el Back Office

Campo Descripción
BO.MercadoPago.WebHooks URL base de la API de Plenario adonde MercadoPago avisa el pago (ej. https://apiqa.plenario.net.ar/PlenarioServices.svc/json). Es el mismo que usa MisCreditos.
BO.MercadoPago.UrlRetorno Página de "gracias" a la que vuelve el cliente después de pagar.
BO.MercadoPago.Link.DiasVigencia Días de vigencia del link desde el día de emisión (default 7; 0 = sin vencimiento). Pasado ese plazo el link deja de funcionar.
BO.MercadoPago.Asunto.Correo Asunto del mail con el link de pago.
BO.MercadoPago.Solicitud_Pago.Descripcion Texto que acompaña al link cuando no se usa una carta.
BO.MercadoPago.Solicitud_Pago.Id_Carta Id de carta (plantilla) para el body del mail. Si es 0, se envía texto plano. La carta puede usar el tag <MercadoPago_Link_CheckOut_Url> donde va el link.
BO.MercadoPago.Conciliar.Token Token interno que protege el endpoint de conciliación (lo usan el botón "Verificar cobro" y la tarea automática).
Web.MercadoPago.WebHooks.Cobros.ProveedoresFinancieros Id del inversor / proveedor financiero contra el que se hace el asiento del cobro. Debe apuntar a un inversor con cuenta contable definida.

Configuración en el panel de MercadoPago

  1. Credenciales — en el panel de MercadoPago, sección Credenciales, copiá el Access Token al parámetro JSON (campo Test o productivo según corresponda).
  2. Webhook — en la sección Webhooks / Notificaciones, cargá la URL (…/MercadoPago/WebHooks) y copiá la Clave secreta al parámetro JSON. Ojo: el panel tiene Modo de prueba y Modo productivo, cada uno con su propia clave secreta; usá la que corresponda al entorno de tus pagos.

Importante: si el token es de producción, los pagos salen reales (live_mode:true) y MercadoPago firma con la clave secreta productiva. Para probar sin plata real, usá credenciales de test + un usuario de prueba comprador (así los pagos son live_mode:false).

Circuito de cobro (cómo se imputa)

El cobro se imputa por dos vías complementarias, con doble red de seguridad:

Campo Descripción
Webhook automático Cuando el cliente paga, MercadoPago avisa a la API de Plenario (MercadoPago/WebHooks). El sistema valida la firma, consulta el pago y, si está aprobado, imputa la cuota (asiento + cuenta corriente + marca la cuota cobrada). Es el camino normal, sin intervención.
Conciliación (respaldo) Si el webhook no llega o no valida (error de red, firma, etc.), la conciliación consulta MercadoPago directamente y cobra los pagos aprobados que todavía no se imputaron. Se dispara a mano (botón "Verificar cobro") o automáticamente por una tarea programada cada 10 minutos.

Importante: el cobro está garantizado por la conciliación aunque el webhook falle. Ningún pago se pierde: si el webhook no lo imputó, la tarea automática lo levanta en pocos minutos.

Acciones disponibles

Campo Descripción
Crear link y enviar por correo Genera el link de pago para las cuotas seleccionadas y lo envía por mail al cliente.
Crear link (copiar para WhatsApp) Genera el link y lo copia al portapapeles para que lo pegues en el chat de WhatsApp con el cliente.
Verificar cobro / Conciliar Consulta MercadoPago por los pagos del crédito e imputa los aprobados que falten (respaldo manual del webhook).
Log MercadoPago (crédito / cuota) Muestra las preferencias, webhooks y cobros de MercadoPago del crédito o de la cuota seleccionada.

Cómo generar y enviar un link de pago

  1. Abrí el crédito — Préstamos → Créditos → abrí el crédito del cliente.
  2. Seleccioná las cuotas — marcá en la grilla las cuotas a cobrar (deben ser impagas y consecutivas desde la primera pendiente).
  3. Operaciones — hacé clic en Operaciones y elegí Crear link y enviar por correo o Crear link (copiar para WhatsApp).
  4. Enviá — si es por correo, se manda solo; si es WhatsApp, pegá el link (ya está en el portapapeles) en el chat del cliente.

Importante: si ya existe un pago activo (aprobado o en curso) para esas cuotas, el sistema no genera un link nuevo y avisa, para evitar el doble pago.

Cómo verificar un cobro manualmente

  1. Abrí el crédito y hacé clic en Operaciones → Verificar cobro / Conciliar.
  2. Resultado — el sistema consulta MercadoPago e imputa lo que falte. Muestra cuántas cuotas imputó.

Ejemplo práctico

Querés cobrarle a un cliente la cuota 3 de su crédito mandándole el link por WhatsApp:

  1. Abrí el crédito en Préstamos → Créditos.
  2. Seleccioná la cuota 3 en la grilla.
  3. OperacionesMercadoPago: Crear link de pago (copiar para WhatsApp).
  4. Pegá el link (ya copiado) en el chat de WhatsApp del cliente.
  5. Esperá el pago — cuando el cliente pague, la cuota se marca cobrada sola (webhook) o, si tarda, hacés Verificar cobro para imputarla al toque.

Consejos útiles

El link tiene vencimiento (por defecto 7 días desde que lo emitís): si el cliente no paga en ese plazo, generá uno nuevo.

Si el cliente dice que pagó pero la cuota figura impaga, usá Verificar cobro / Conciliar antes de preocuparte: en pocos minutos la tarea automática también la levanta.

No hace falta esperar el webhook: la conciliación es la red de seguridad y cobra igual.

Para pagos de prueba, usá un usuario de prueba comprador de MercadoPago y una tarjeta de test con titular APRO (fuerza la aprobación).

Preguntas frecuentes

¿MercadoPago reemplaza a Pago360 o Mobbex? No. Es un medio **complementario**: convive con el proveedor base (Pago360 / Mobbex). El cliente elige con cuál pagar.
El cliente pagó pero la cuota sigue impaga, ¿qué hago? Usá **Operaciones → Verificar cobro / Conciliar** en el crédito: consulta MercadoPago e imputa el pago. Además, la tarea automática lo hace sola cada 10 minutos.
¿Se puede cobrar dos veces la misma cuota? No. El sistema controla idempotencia por pago (no procesa dos veces el mismo pago) y por cuota (solo cobra cuotas impagas). Aunque el webhook y la conciliación coincidan, la cuota se cobra una sola vez.
¿Cuánto dura el link de pago? Por defecto 7 días desde su emisión (configurable en `BO.MercadoPago.Link.DiasVigencia`). Con `0` no vence.
¿Por qué me rechaza el pago de prueba? Porque estás pagando con una cuenta real o una tarjeta guardada. En sandbox, pagá con un **usuario de prueba comprador** y una **tarjeta nueva** con titular `APRO`.

Permisos

Permiso Habilita
Prestamos.Creditos.Busquedas.Operaciones_SolicitudDePago360 Generar links de pago (mail / WhatsApp) desde el Detalle de Crédito. Es el mismo permiso que las operaciones de Pago360.

Ver el log de MercadoPago no requiere permiso adicional. El endpoint de conciliación se protege con el token interno BO.MercadoPago.Conciliar.Token, no con permisos de usuario.

Información técnica

Sección de referencia para soporte/desarrollo. Basada en la implementación real de la v14 (changesets 23190–23208).

Componentes principales

Componente Detalle
Config MercadoPago_Config (VPNET_DataModel/Modelo/ServiciosExternos/MercadoPago_Config.cs), POCO cargado del parámetro JSON Web.MisCreditos.MercadoPago.Config.
Cliente REST Rest_MercadoPago (VPNET_DataModel/…/ServiciosExternos/Rest_MercadoPago.cs) sobre el SDK oficial mercadopago-sdk 2.3.8: CrearPreferenciaAsync (con vencimiento expires/expiration_date), GetPaymentAsync, BuscarPagosPorExternalRef, ExistePagoActivoPorExternalRef (guard), ValidarFirma (prueba ambas secrets). El search usa el SDK (no HttpClient crudo) porque el HttpClient crudo negocia TLS de forma intermitente contra la API de MercadoPago.
Orquestador BO MercadoPago_Solicitud_Manager (dentro de MercadoPago_Manager.cs): ValidarCrearLinkMercadoPago_ByIdDetalle_Credito (valida crédito/cuotas, calcula importe con punitorios, arma external_reference, genera link, envía mail) y ConciliarCredito. RunSync evita deadlock async en el hilo de UI.
Persistencia / log MercadoPago_Manager (getLog/GetHooks/GetHooksCobros, HookProcesadoConCobros, Save_Log/Save_Hooks, GetSolicitudesPendientesConciliar).
UI Back Office frmPrestamos_Creditos_Detalle.vb (menú Operaciones/Ver + contextual), frmPrestamos_Solicitudes.vb (botón Log en ribbon), FormMercadoPago_Log (VPNET_WinForms/Servicios/).
API / webhook VPNET_WCF/…/Externos/MercadoPago.cs: endpoints MercadoPago/WebHooks (IPN, valida firma → imputa), MercadoPago/Conciliar (por solicitud) y MercadoPago/ConciliarPendientes (batch, para la tarea programada). La imputación reusa la lógica de Pago360 (MercadoPago_ImputarCobro).
Web cliente VPNET_WEB_MisCreditos (HomeController.ProcesarPago branch Medio=="MP", vista PagoExitosoMercadoPago.cshtml, botonera en Index.cshtml).

Tablas de base de datos principales

Tabla / entidad Contenido
MercadoPago_Log Preferencias creadas (Identificador = external_reference, Id_Referencia = preference id, CheckOut_Url, Estado).
MercadoPago_Hooks Webhooks recibidos (Data_Payment_Id, Data_Payment_Status, Procesado).
MercadoPago_Hooks_Cobros Cuotas cobradas por cada hook (Id_Prestamos_Creditos_Detalle).
Prestamos_Creditos_Detalle Cuotas (Fecha_Cobro se marca al imputar).

Relación con otros módulos / manuales

Se conecta con Cómo
Medios de cobro (Pago360 / Mobbex) Es complementario: reusa la lógica de imputación de Pago360 (MercadoPago_ImputarCobro) y el mismo layout de external_reference. Ver Préstamos - Medios de cobro.
Préstamos (Detalle de Crédito) Se opera desde el Detalle de Crédito; imputa marcando la cuota en Prestamos_Creditos_Detalle. Ver Nueva solicitud de crédito.
Contabilidad Cada cobro genera asiento contable (contra el inversor/proveedor financiero del parámetro Web.MercadoPago.WebHooks.Cobros.ProveedoresFinancieros).
Cuentas Corrientes El cobro genera el movimiento en la cuenta corriente del cliente.
Web de clientes (MisCreditos) El mismo circuito se dispara desde el portal VPNET_WEB_MisCreditos. Ver Web de Workflow.
Cartas / Notificaciones El mail con el link usa una carta (plantilla) del módulo de Cartas (BO.MercadoPago.Solicitud_Pago.Id_Carta).

Notas para soporte (comportamiento real)

  • external_reference: {Id_Solicitud},{Id_Credito},{Id_PCD…} (mismo layout que Pago360). El webhook lo parsea para imputar. Es agnóstico al origen: un link nacido en el BO imputa igual que uno de MisCreditos.
  • Idempotencia (3 capas): HookProcesadoConCobros (por payment_id) + cuotas solo Fecha_Cobro == null + transacción IsolationLevel.Snapshot (conflicto de escritura si dos procesos imputan la misma cuota a la vez → el segundo hace rollback).
  • Firma del webhook: manifiesto id:{queryDataId};request-id:{x-request-id};ts:{ts}; firmado HMAC-SHA256. Los headers se leen de HttpContext.Current.Request (WebOperationContext no los expone bien). ValidarFirma prueba las secrets de test y producción.
  • Vencimiento del link: expires=true + expiration_date_from/to desde el día de emisión, según BO.MercadoPago.Link.DiasVigencia.
  • Conciliación automática: conviene armar una tarea programada (Programador de tareas de Windows u otro scheduler) en un equipo que quede siempre encendido —un servidor o una PC que no se apague— para que cada pocos minutos (por ejemplo, cada 10) ejecute un script que llame al endpoint MercadoPago/ConciliarPendientes de la API. Así, aunque un webhook no llegue, los pagos aprobados que quedaron sin imputar se levantan solos a los pocos minutos. Conviene que la tarea corra bajo una cuenta con permiso para ejecutarse desatendida.

Esquema del script de conciliación (PowerShell). No incluye credenciales: reemplazá los marcadores <...> por los valores de tu instalación. El token es el valor del parámetro BO.MercadoPago.Conciliar.Token y la URL es la de la API de Plenario (la misma base que el webhook).

# Fuerza TLS 1.2 (requerido para hablar con la API)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$uri   = "<URL_API>/MercadoPago/ConciliarPendientes"   # misma base que el webhook
$token = "<TOKEN_CONCILIACION>"                         # = parametro BO.MercadoPago.Conciliar.Token
$log   = "<RUTA_DEL_LOG>"                               # archivo donde registrar el resultado
$body  = '{"token":"' + $token + '","dias":15,"max":200}'

try {
    $r = Invoke-WebRequest -Uri $uri -Method Post -Body $body `
         -Headers @{ "Content-Type" = "application/json" } -UseBasicParsing -TimeoutSec 240
    Add-Content $log ("{0} OK {1}"    -f (Get-Date), $r.Content)
} catch {
    Add-Content $log ("{0} ERROR {1}" -f (Get-Date), $_.Exception.Message)
}

En el cuerpo, dias indica cuántos días hacia atrás revisar y max el tope de solicitudes por corrida. El endpoint es idempotente: nunca vuelve a imputar una cuota ya cobrada, así que es seguro correrlo tan seguido como quieras.

¿Te resultó útil este manual?