Sugiere cambios
Ayúdanos a mejorar la documentación
¿Viste información errónea, te gustaría que expliquemos algo más o que mejoremos nuestras guías? Déjanos tus sugerencias en GitHub.

Notificaciones Webhooks

Pre-requisitos

  • Tener implementado API.

Un webhook es una notificación que se envía de un servidor a otro mediante una llamada HTTP POST en relación a tus transacciones.

Para recibir las notificaciones de los eventos en tu plataforma, debes configurar previamente una URL a la cual Mercado Pago tenga acceso.

También puedes configurar la notificación cuando hagas el POST del pago, indicandola en el campo notificaction_url:

Json

{
    "transaction_amount":100,
    ....
    "notification_url":"http://requestbin.fullcontact.com/1ogudgk1",
    ....
}

Eventos

Siempre que suceda un evento, te enviaremos una notificación en formato json usando HTTP POST a la URL que especificaste.

Notificaremos los siguientes eventos:

Tipo de notificación Acción Descripción
payment payment.created Creación de un pago
payment payment.updated Actualización de un pago
mp-connect application.deauthorized Desvinculación de una cuenta
mp-connect application.authorized Vinculación de una cuenta
plan application.authorized Vinculación de una cuenta
subscription application.authorized Vinculación de una cuenta
invoice application.authorized Vinculación de una cuenta

Mercado Pago enviará las notificaciones con el siguiente esquema de reintentos y tiempos por los que espera tu confirmación. Deberás retornar un HTTP STATUS 200 (OK) ó 201 (CREATED) antes de que se termine el tiempo correspondiente. Si no lo haces, se asumirá que no lo recibiste correctamente y se te volverá a notificar.

Si necesitas más información, consulta la sección ¿Qué debo hacer al recibir una notificación?

Evento Tiempo después del primer envío Tiempo de espera de confirmación
Envío - 22 segundos
Primer reintento 5 minutos 5 segundos
Segundo reintento 45 minutos 5 segundos
Tercer reintento 6 horas 5 segundos
Cuarto reintento 2 días 5 segundos
Quinto reintento 4 días 5 segundos

La notificación enviada tiene el siguiente formato:

Json

{
    "id": 12345,
    "live_mode": true,
    "type": "payment",
    "date_created": "2015-03-25T10:04:58.396-04:00",
    "application_id": 123123123,
    "user_id": 44444,
    "version": 1,
    "api_version": "v1",
    "action": "payment.created",
    "data": {
        "id": "999999999"
    }
}

Esto indica que se creó el pago 999999999 para el usuario 44444 en modo productivo con la versión V1 de la API. Dicho evento ocurrió en la fecha 2016-03-25T10:04:58.396-04:00.

¿Qué debo hacer al recibir una notificación?

Cuando recibas una notificación en tu plataforma, Mercado Pago espera una respuesta para validar que la recibiste correctamente. Para esto, debes devolver un HTTP STATUS 200 (OK) ó 201 (CREATED).

Es recomendable que respondas a la notificación antes de ejecutar lógica de negocio o previo al acceso de recursos externos para no exceder los tiempos estimados de respuesta.

Luego de esto, tienes que obtener la información completa del recurso notificado accediendo al endpoint correspondiente de la API:

Tipo URL Documentación
payment https://api.mercadopago.com/v1/payments/[ID]?access_token=[ACCESS_TOKEN] Ver documentación
plan https://api.mercadopago.com/v1/plans/[ID]?access_token=[ACCESS_TOKEN] -
subscription https://api.mercadopago.com/v1/subscriptions/[ID]?access_token=[ACCESS_TOKEN] -
invoice https://api.mercadopago.com/v1/invoices/[ID]?access_token=[ACCESS_TOKEN] Ver documentación

Con esta información puedes realizar las actualizaciones necesarias en tu plataforma, por ejemplo registrar un pago acreditado.

Importante

Ten en cuenta que si se exceden los tiempos de respuesta es posible recibir notificaciones duplicadas de un evento.

Implementa el receptor de notificaciones tomando como ejemplo el siguiente código:

Php

 <?php

    MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");

    switch($_POST["type"]) {
        case "payment":
            $payment = MercadoPago\Payment.find_by_id($_POST["id"]);
            break;
        case "plan":
            $plan = MercadoPago\Plan.find_by_id($_POST["id"]);
            break;
        case "subscription":
            $plan = MercadoPago\Subscription.find_by_id($_POST["id"]);
            break;
        case "invoice":
            $plan = MercadoPago\Invoice.find_by_id($_POST["id"]);
            break;
    }

?>

La búsqueda no arrojó ningún resultado.

Verifica la la ortografía de los términos de búsqueda o prueba con otras palabras clave.