← Í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.2Actualizado: 2026-09-17

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 Log → MercadoPago 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 llega a la pantalla "Confirmar Pago" con la botonera de medios de pago:
Botón Qué hace
VOLVER Cancela y vuelve al listado.
Pagar con Tarjetas Proveedor base (Pago360 o Mobbex). El texto sale del parámetro Web.Comerc.Dashboard.MetodoPago: "Pagar con Pagos360" si vale 0, o "Pagar con Tarjetas" si vale 1 (Mobbex).
Pagar con MercadoPago Checkout Pro de MercadoPago.

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). El sistema usa el par Test o el productivo según Entorno. No hay campo Activo: la integración se activa sola cuando está cargado el Access Token del entorno elegido. Si el JSON está mal formado (una coma de más, comillas curvas al copiar/pegar), la integración queda apagada y el error se registra en el log.

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.

Parámetros de MisCreditos (web de clientes) y del webhook

Campo Default Descripción
Web.MisCreditos.MercadoPago.Habilitado — En 1, muestra el botón "Pagar con MercadoPago" en la botonera de MisCreditos.
Web.MisCreditos.MercadoPago.Link.DiasVigencia 7 Vigencia del link generado desde MisCreditos (0 = sin vencimiento). Es el equivalente del BO.MercadoPago.Link.DiasVigencia pero para los links de la web de clientes: antes esos links nunca vencían.
Web.MercadoPago.WebHooks.ValidarFirma 0 Modo de validación de la firma del webhook. 0 (default) = registra el diagnóstico y continúa aunque la firma no valide; 1 = modo estricto, descarta la notificación. Ver la nota de seguridad en Información técnica.
Web.MercadoPago.WebHooks.Cobros.IdUsuario 0 (Administrador) Usuario de Seguridad_Usuarios con el que se registran los cobros (Id_Usuario_Add). Conviene un usuario propio de la pasarela (como con Mobbex) para separar en los listados lo cobrado online de lo cobrado por caja.
Web.Prestamos.Creditos.MercadoPago.CobroCuota.EnvioMail vacío En 1, manda al cliente un mail avisando el cobro.

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).

Medios de pago y cuotas del checkout

Cuatro parámetros definen qué le ofrece MercadoPago al cliente en cada link. Aplican a todos los links (los de la web MisCreditos, los que manda el Back Office y los que genera la API) y sólo tienen efecto en los links que se generan después del cambio.

Parámetro Default Qué hace
Web.MisCreditos.MercadoPago.Checkout.CuotasMaximas 1 Máximo de cuotas con tarjeta de crédito. 1 = sin cuotas (un solo pago).
Web.MisCreditos.MercadoPago.Checkout.TiposPagoExcluidos vacío Tipos de pago que no se ofrecen (saca el tipo completo).
Web.MisCreditos.MercadoPago.Checkout.MediosPagoExcluidos vacío Marcas puntuales que no se ofrecen (el resto del tipo sigue).
Web.MisCreditos.MercadoPago.Checkout.ModoBinario 0 En 1, el pago se aprueba o se rechaza en el momento: nunca queda pendiente.

Con los valores por defecto el checkout ofrece todos los medios de pago, pero la tarjeta de crédito paga en un solo pago.

Cuotas máximas — sólo afecta a la tarjeta de crédito (débito, prepaga, dinero en cuenta y efectivo siempre van en un pago):

Valor Resultado
1 (default) Sin cuotas: la tarjeta de crédito se cobra en un solo pago.
2 a 36 El cliente elige hasta esa cantidad. 36 es el máximo de MercadoPago; un número mayor se toma como 36.
0 Sin límite propio: se ofrecen las cuotas que tenga habilitadas la cuenta de MercadoPago.
vacío, negativo o texto Se usa 1 y el valor inválido queda en el log de errores.

El interés de las cuotas lo define la cuenta de MercadoPago, no Plenario: la cuota del crédito se imputa siempre por el importe del link, sin el interés de la tarjeta.

Tipos de pago excluidos — códigos separados por coma (ej. ticket,digital_currency); excluir un tipo saca todas sus marcas:

Código Qué es
credit_card Tarjetas de crédito (Visa, Mastercard, Amex, Naranja, Cabal, Argencard, Diners).
debit_card Tarjetas de débito (Visa Débito, Mastercard Débito, Maestro, Cabal Débito).
prepaid_card Tarjetas prepagas (Visa, Mastercard y Cabal prepagas).
ticket Efectivo: el cliente genera un cupón y lo paga en Rapipago o Pago Fácil.
digital_currency Cuotas sin Tarjeta de MercadoPago (MercadoPago le financia el pago al cliente).
crypto_transfer Criptomonedas.
account_money Dinero en la cuenta de MercadoPago. No se puede excluir: si se manda, MercadoPago rechaza el link; el sistema lo ignora y lo deja en el log.

Marcas excluidas — códigos separados por coma (ej. amex,diners); excluir una marca deja disponible el resto de su tipo:

Tipo Códigos
Crédito visa, master, amex, naranja, cabal, argencard, diners
Débito debvisa, debmaster, maestro, debcabal
Efectivo rapipago, pagofacil

Ojo con las prepagas: usan el mismo código que la tarjeta de crédito de su marca (visa, master, cabal). Excluir visa saca la Visa de crédito y la Visa prepaga, pero no la Visa Débito (que es debvisa).

Modo binario — en 1 el pago se aprueba o rechaza al instante (lo que hubiera quedado pendiente o en revisión se rechaza) y, como un cupón siempre nace pendiente, el sistema además saca el efectivo del checkout. Ventaja: no quedan pagos pendientes que bloqueen un nuevo link. Desventaja: baja el porcentaje de pagos aprobados.

Configuraciones típicas:

Objetivo CuotasMaximas TiposPagoExcluidos ModoBinario
Default: todos los medios, sin cuotas 1 — 0
Sin efectivo (evita cupones pendientes) 1 ticket 0
Sin ninguna financiación 1 digital_currency 0
Hasta 3 cuotas, sin Amex ni Diners 3 — (marcas: amex,diners) 0
Aprobación instantánea 1 — 1

Importante: MercadoPago no avisa si un código está mal escrito (simplemente no excluye nada). El sistema valida los tipos y deja lo descartado en el log; se toleran mayúsculas, espacios, ; y repetidos. El dinero en cuenta no se puede excluir (no existe un checkout "solo tarjetas") y CuotasMaximas no limita las Cuotas sin Tarjeta (para sacarlas, excluí el tipo digital_currency). Después de cambiar cualquiera de estos parámetros hay que reciclar el AppPool de la web y de la API (y reiniciar el Back Office en las demás PC) y conviene abrir un link de prueba para ver qué ofrece el checkout.

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. Operaciones → MercadoPago: 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. La vigencia se controla por parámetro según el origen: BO.MercadoPago.Link.DiasVigencia para los links del Back Office y Web.MisCreditos.MercadoPago.Link.DiasVigencia para los de la web de clientes (0 = sin vencimiento).

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), por cuota (solo cobra cuotas impagas) y por concurrencia (transacción Snapshot). Además, el guard anti doble-pago chequea cuota por cuota: si alguna de las cuotas seleccionadas ya tiene un pago activo, no genera un link nuevo. (Antes comparaba el conjunto exacto de cuotas; tener la cuota 1 pendiente y seleccionar [1,2] colaba un segundo cobro de la 1 — ya está corregido.)
El cliente intentó pagar de nuevo y le apareció un aviso. Es el guard anti doble-pago: si alguna de las cuotas seleccionadas tiene un pago en curso (un cupón sin pagar, un pago en revisión) o un pago aprobado que todavía no se imputó, el sistema no genera un link nuevo y el mensaje aclara cuál de los dos casos es. Un pago parcial ya imputado no bloquea: el cliente puede pagar el saldo que quede.
¿El cliente puede pagar en cuotas con tarjeta? Por defecto no: Web.MisCreditos.MercadoPago.Checkout.CuotasMaximas nace en 1 (un solo pago). Para permitir cuotas, cargá la cantidad máxima (2 a 36). Ver Medios de pago y cuotas del checkout en Configuración.
No aparece Rapipago / Pago Fácil en el checkout. Puede ser que el tipo ticket (o las marcas rapipago / pagofacil) esté excluido, que el modo binario esté activo (saca el efectivo) o que el importe sea menor al mínimo que MercadoPago acepta para efectivo.
Excluí un medio de pago y sigue apareciendo. Revisá que el código esté bien escrito (MercadoPago no avisa) y mirá el log de errores. Recordá que la configuración vale para los links nuevos y que hay que reciclar el AppPool de la web y de la API. La opción "Ingresar con mi cuenta" (dinero en cuenta) aparece siempre: no se puede excluir.
¿Cuánto dura el link de pago? Por defecto 7 días desde su emisión. La vigencia se configura según el origen: BO.MercadoPago.Link.DiasVigencia (Back Office) y Web.MisCreditos.MercadoPago.Link.DiasVigencia (web de clientes). 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–23329; medios de pago y cuotas del checkout en 23613).

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). InterpretarConfigCheckout convierte el texto de los 4 parámetros Web.MisCreditos.MercadoPago.Checkout.* en la config y AplicarConfigCheckout la vuelca en PreferenceRequest.PaymentMethods (Installments, ExcludedPaymentTypes, ExcludedPaymentMethods) y en BinaryMode. 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 según Web.MercadoPago.WebHooks.ValidarFirma → imputa), MercadoPago/Conciliar (por solicitud), MercadoPago/ConciliarPendientes (batch, para la tarea programada) y MercadoPago/CrearLinkPagoPorCuota (genera un link desde el asistente por WhatsApp / ClientIA). 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 Links/preferencias generados (Identificador = external_reference, Id_Referencia = preference id, CheckOut_Url, Estado). Columnas desnormalizadas (para consultar sin parsear el JSON): Origen (BO / MisCreditos / API), Id_Usuario, Id_Credito, Cuotas, Importe/Moneda, Vence + Fecha_Vencimiento (vigencia), Http_Status, Fecha_Pago (cuándo se cobró → mide conversión).
MercadoPago_Hooks Notificaciones recibidas (Data_Payment_Id, Data_Payment_Status, Data_Payment_Total = bruto, Procesado). Columnas desnormalizadas: Fee_MercadoPago (comisión que retiene MP, ~4,1%), Neto_Acreditado (lo que MP deposita realmente — clave para conciliación bancaria), Monto_Devuelto (devoluciones/refunds), Fecha_Aprobacion, Fecha_Liberacion, Payment_Method_Id/Payment_Type_Id, Status_Detail, Payer_Email/Payer_Doc, Card_Ultimos4/Installments, Live_Mode, Order_Id.
MercadoPago_Hooks_Cobros Cuotas cobradas por cada hook (Id_Prestamos_Creditos_Detalle); FK a MercadoPago_Hooks con borrado en cascada.
Prestamos_Creditos_Detalle Cuotas (Fecha_Cobro se marca al imputar).

Se imputa el bruto al cliente; MP deposita el neto (bruto − comisión). Ambos quedan guardados (Data_Payment_Total vs Neto_Acreditado), lo que permite conciliar contra el depósito bancario. Toda columna/tabla nueva debe estar en el proyecto SSDT VPNET_Database o el publish del DACPAC la borra.

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. Para las cuotas y el vencimiento del link de Mobbex, ver Setup de Mobbex.
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 (no bloqueante por defecto): 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); se usa el data.id del query string; ValidarFirma prueba las secrets de test y producción. Los pagos reales llegan con live_mode:true y su firma no se pudo reproducir con la clave configurada, así que con Web.MercadoPago.WebHooks.ValidarFirma = 0 (default) la firma NO bloquea: si no valida, se registra el diagnóstico y el proceso continúa. Esto no debilita la seguridad: la notificación nunca es la fuente de verdad — el sistema consulta el pago a MercadoPago con su propio Access Token privado y solo imputa si MP responde approved y el external_reference corresponde a un crédito propio (una notificación falsificada solo lograría consultar un pago inexistente). De hecho, la conciliación imputa esos mismos pagos sin validar ninguna firma. Con = 1 se restaura el modo estricto.
  • Vencimiento del link: expires=true + expiration_date_from/to desde el día de emisión, según BO.MercadoPago.Link.DiasVigencia.
  • Medios de pago y cuotas del checkout (23613): los 4 parámetros Web.MisCreditos.MercadoPago.Checkout.* se mandan en cada preferencia (payment_methods + binary_mode). Validaciones contra el comportamiento real de la API (probado en sandbox 17/09/2026): account_money no se puede excluir (la API responde 400 account_money cannot be excluded) → se descarta y va al log; código inexistente/mal escrito → 201 sin efecto, se valida contra la lista conocida; marca cargada como tipo (o viceversa) → se mueve a la lista correcta; installments fuera de 1..36 → 0 no se manda, mayor a 36 se toma 36, inválido = 1; con modo binario se excluye ticket (la API no lo saca sola). Si la lectura de la config falla, el link se genera igual con el default (sin cuotas) y el error queda registrado. La config con la que salió cada link queda en MercadoPago_Log.Request (nodos PaymentMethods y BinaryMode).
  • 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?