Inicio
DocumentaciĂłn
Recursos
Partners
Comunidad

Partners

Conoce nuestro programa para agencias o desarrolladores que ofrecen servicios de integraciĂłn y vendedores que quieren contratarlos.

Comunidad

Recibe las Ășltimas novedades, pide ayuda a otros integradores y comparte tus conocimientos.

Webhooks - Notificaciones - Mercado Pago Developers

BĂșsqueda inteligente powered by OpenAI 

Webhooks

Webhooks (también conocido como devolución de llamada web) es un método simple que facilita que una aplicación o sistema proporcione información en tiempo real cada vez que ocurre un evento, es decir, es una forma de recibir datos pasivamente entre dos sistemas a través de un HTTP POST.

Las notificaciones Webhooks se pueden configurar para una o mås aplicaciones creadas en Tus integraciones. También es posible configurar una URL de prueba que, junto con las credenciales de prueba, permitirå verificar el correcto funcionamiento de las notificaciones previo a salir a producción.

Una vez configurada, la notificación Webhook serå enviada cada vez que ocurra uno o mås eventos registrados, evitando la necesidad de verificaciones constantes y, consecuentemente, previniendo la sobrecarga del sistema y la pérdida de datos en situaciones críticas.

Para configurar notificaciones Webhooks, puedes elegir una de las opciones a continuaciĂłn.

Tipo de configuraciĂłnDescripciĂłn
Configuración a través de Tus integracionesPermite configurar notificaciones para cada una de tus aplicaciones, identificar cuentas distintas en caso de ser necesario, y validar el origen de la notificación utilizando una firma secreta (excepto en notificaciones para integraciones con Código QR).
ConfiguraciĂłn durante la creaciĂłn de pagosPermite la configuraciĂłn especĂ­fica de notificaciones para cada pago, preferencia u orden No estĂĄ permitida para integraciones con Mercado Pago Point.
Importante
Las URLs configuradas durante la creación de un pago tendrån prioridad por sobre aquellas configuradas a través de Tus integraciones.

Una vez que las notificaciones sean configuradas, consulta las acciones necesarias después de recibir una notificación para validar que las mismas fueron debidamente recibidas.

Configuración a través de Tus integraciones

Puedes configurar notificaciones para cada una de tus aplicaciones directamente desde Tus integraciones de manera eficiente y segura. En este apartado, explicaremos cĂłmo:

  1. Indicar las URLs de notificaciĂłn y configurar eventos
  2. Validar el origen de una notificaciĂłn
  3. Simular el recibimiento de una notificaciĂłn
Importante
Este método de configuración no estå disponible para integraciones con Código QR ni Suscripciones. Para configurar notificaciones con alguna de estas dos integraciones, utiliza el método Configuración durante la creación de un pago .

1. Indicar URLs de notificaciĂłn y configurar eventos

Para configurar notificaciones Webhooks mediante Tus integraciones, es necesario indicar las URLs a las que las mismas serĂĄn enviadas y especificar los eventos para los cuales deseas recibirlas.

Para hacerlo, sigue el paso a paso a continuaciĂłn:

  1. Ingresa a Tus Integraciones y selecciona la aplicaciĂłn para la que deseas activar las notificaciones. En caso de que aĂșn no hayas creado una aplicaciĂłn, accede a la documentaciĂłn sobre el Panel del Desarrollador y sigue las instrucciones para poder hacerlo.
  2. En el menĂș de la izquierda, selecciona Webhooks > Configurar notificaciones, y configura las URLs que serĂĄn utilizadas para recibirlas. Recomendamos utilizar dos URLs diferentes para el modo de pruebas y el modo producciĂłn:
    • URL modo pruebas: proporciona una URL que permita probar el correcto funcionamiento de las notificaciones de la aplicaciĂłn durante la etapa de desarrollo. La prueba de estas notificaciones deberĂĄ ser realizada exclusivamente con credenciales de prueba del usuario productivo con el que creaste la aplicaciĂłn.
    • URL modo producciĂłn: proporciona una URL para recibir notificaciones con tu integraciĂłn productiva. Estas notificaciones deberĂĄn ser configuradas con tus credenciales productivas.

webhooks

Nota
En caso de ser necesario identificar mĂșltiples cuentas, agrega el parĂĄmetro ?cliente=(nombredelvendedor) al final de la URL indicada para identificar a los vendedores.
  1. Selecciona los eventos de los que recibirås notificaciones, que serån enviadas en formato JSON a través de un HTTP POST a la URL especificada anteriormente. Un evento puede ser cualquier actualización sobre el tópico reportado, incluyendo cambios de status o atributos. Consulta la tabla a continuación para ver qué eventos pueden ser configurados teniendo en cuenta la solución de Mercado Pago integrada y las particularidades de negocio.

EventosNombre en Tus integracionesTĂłpicoProductos asociados
CreaciĂłn y actualizaciĂłn de pagosPagospaymentCheckout Transparente
Checkout Pro
Checkout Bricks
Suscripciones
Wallet Connect
Pago recurrente de una suscripciĂłn (creaciĂłn y actualizaciĂłn)Planes y suscripcionessubscription_authorized_paymentSuscripciones
VinculaciĂłn de una suscripciĂłn (creaciĂłn y actualizaciĂłn)Planes y suscripcionessubscription_preapprovalSuscripciones
VinculaciĂłn de un plan de suscripciĂłn (creaciĂłn y actualizaciĂłn)Planes y suscripcionessubscription_preapproval_planSuscripciones
Vinculación y desvinculación de cuentas conectadas a través de OAuth.Vinculación de aplicacionesmp-connectTodos los productos que hayan implementado OAuth
Transacciones de Wallet ConnectWallet Connectwallet_connectWallet Connect
Alertas de fraude luego del procesamiento de un pedidoAlertas de fraudestop_delivery_op_whCheckout Transparente
Checkout PRO
CreaciĂłn de reclamos y reembolsosReclamostopic_claims_integration_whCheckout Transparente
Checkout Pro
Checkout Bricks
Suscripciones
Mercado Pago Point
CĂłdigo QR
Wallet Connect
RecuperaciĂłn y actualizaciĂłn informaciĂłn de tarjetas dentro de Mercado Pago.Card Updatertopic_card_id_whCheckout Pro
Checkout Transparente
Checkout Bricks
Creación, actualización o cierre de órdenes comercialesÓrdenes comercialestopic_merchant_order_whCheckout Pro
CĂłdigo QR
Apertura de contracargos, cambios de status y modificaciones referentes a las liberaciones de dinero.Contracargostopic_chargebacks_whCheckout Pro
Checkout Transparente
Checkout Bricks
FinalizaciĂłn, cancelaciĂłn o errores al procesar intenciones de pago de dispositivos Mercado Pago Point.Integraciones Pointpoint_integration_whMercado Pago Point
Importante
En caso de dudas sobre los tĂłpicos a activar o los eventos que serĂĄn notificados, consulta la documentaciĂłn InformaciĂłn adicional sobre notificaciones .
  1. Por Ășltimo, haz clic en Guardar. Esto generarĂĄ una clave secreta exclusiva para la aplicaciĂłn, que permitirĂĄ validar la autenticidad de las notificaciones recibidas, garantizando que hayan sido enviadas por Mercado Pago. Ten en cuenta que esta clave generada no tiene plazo de caducidad y su renovaciĂłn periĂłdica no es obligatoria, aunque sĂ­ recomendada. Para hacerlo, basta con cliquear en el botĂłn Restablecer.
Importante
Las notificaciones de Código QR no pueden ser validadas utilizando la clave secreta, por eso deberás continuar directamente con la etapa “Simular el recibimiento de una notificación”. Para verificar el origen de las notificaciones de integraciones con Código QR, entra en contacto con Soporte de Mercado Pago .

2. Validar origen de una notificaciĂłn

Las notificaciones enviadas por Mercado Pago serĂĄn semejantes al siguiente ejemplo para un alerta del tĂłpico payment:

json

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

Mercado Pago siempre incluirĂĄ la clave secreta en las notificaciones Webhooks que serĂĄn recibidas, lo que permitirĂĄ validar su autenticidad para proporcionar mayor seguridad y prevenir posibles fraudes.

Esta clave serĂĄ enviada en el header x-signature, que serĂĄ similar al ejemplo debajo.

x-signature


`ts=1704908010,v1=618c85345248dd820d5fd456117c2ab2ef8eda45a0282ff693eac24131a5e839`

Para confirmar la validaciĂłn, es necesario extraer la clave contenida en el header y compararla con la clave otorgada para tu aplicaciĂłn en Tus integraciones. Esto podrĂĄ ser hecho siguiendo el paso a paso a continuaciĂłn. AdemĂĄs, al final, disponibilizamos nuestros SDKs con ejemplos de cĂłdigos completos para facilitar el proceso.

  1. Para extraer el timestamp (ts) y la clave del header x-signature, divide el contenido del header por el carĂĄcter ,, lo que resultarĂĄ en una lista de elementos. El valor para el prefijo ts es el timestamp (en milisegundos) de la notificaciĂłn y v1 es la clave encriptada. Siguiendo el ejemplo presentado anteriormente, ts=1704908010 y v1=618c85345248dd820d5fd456117c2ab2ef8eda45a0282ff693eac24131a5e839.
  2. Utilizando el template a continuaciĂłn, sustituye los parĂĄmetros con los datos recibidos en tu notificaciĂłn.

template

id:[data.id_url];request-id:[x-request-id_header];ts:[ts_header];
  • Los parĂĄmetros con el sufijo _url provienen de query params. Ejemplo: [data.id_url] se sustituirĂĄ por el valor correspondiente al ID del evento (data.id). Este query param puede ser hallado en la notificaciĂłn recibida.
  • [ts_header] serĂĄ el valor ts extraĂ­do del header x-signature.
  • [x-request-id_header] deberĂĄ ser sustituido por el valor recibido en el header x-request-id.
Importante
Si alguno de los valores presentados en el modelo anterior no estĂĄ presente en la notificaciĂłn recibida, debes removerlo.
  1. En Tus integraciones, selecciona la aplicaciĂłn integrada, ve a la secciĂłn de Webhooks y revela la clave secreta generada.
  2. Genera la contraclave para la validaciĂłn. Para hacer esto, calcula un HMAC con la funciĂłn de hash SHA256 en base hexadecimal, utilizando la clave secreta como clave y el template con los valores como mensaje.
          
$cyphedSignature = hash_hmac('sha256', $data, $key);

        
          
const crypto = require('crypto');
const cyphedSignature = crypto
    .createHmac('sha256', secret)
    .update(signatureTemplateParsed)
    .digest('hex'); 

        
          
String cyphedSignature = new HmacUtils("HmacSHA256", secret).hmacHex(signedTemplate);

        
          
import hashlib, hmac, binascii

cyphedSignature = binascii.hexlify(hmac_sha256(secret.encode(), signedTemplate.encode()))

        
  1. Finalmente, compara la clave generada con la clave extraĂ­da del header, asegurĂĄndote de que tengan una correspondencia exacta. AdemĂĄs, puedes usar el timestamp extraĂ­do del header para compararlo con un timestamp generado en el momento de la recepciĂłn de la notificaciĂłn, con el fin de establecer una tolerancia de demora en la recepciĂłn del mensaje.

A continuaciĂłn, puedes ver ejemplos de cĂłdigo completo:

          
<?php
// Obtain the x-signature value from the header
$xSignature = $_SERVER['HTTP_X_SIGNATURE'];
$xRequestId = $_SERVER['HTTP_X_REQUEST_ID'];

// Obtain Query params related to the request URL
$queryParams = $_GET;

// Extract the "data.id" from the query params
$dataID = isset($queryParams['data.id']) ? $queryParams['data.id'] : '';

// Separating the x-signature into parts
$parts = explode(',', $xSignature);

// Initializing variables to store ts and hash
$ts = null;
$hash = null;

// Iterate over the values to obtain ts and v1
foreach ($parts as $part) {
    // Split each part into key and value
    $keyValue = explode('=', $part, 2);
    if (count($keyValue) == 2) {
        $key = trim($keyValue[0]);
        $value = trim($keyValue[1]);
        if ($key === "ts") {
            $ts = $value;
        } elseif ($key === "v1") {
            $hash = $value;
        }
    }
}

// Obtain the secret key for the user/application from Mercadopago developers site
$secret = "your_secret_key_here";

// Generate the manifest string
$manifest = "id:$dataID;request-id:$xRequestId;ts:$ts;";

// Create an HMAC signature defining the hash type and the key as a byte array
$sha = hash_hmac('sha256', $manifest, $secret);
if ($sha === $hash) {
    // HMAC verification passed
    echo "HMAC verification passed";
} else {
    // HMAC verification failed
    echo "HMAC verification failed";
}
?>

        
          
// Obtain the x-signature value from the header
const xSignature = headers['x-signature']; // Assuming headers is an object containing request headers
const xRequestId = headers['x-request-id']; // Assuming headers is an object containing request headers

// Obtain Query params related to the request URL
const urlParams = new URLSearchParams(window.location.search);
const dataID = urlParams.get('data.id');

// Separating the x-signature into parts
const parts = xSignature.split(',');

// Initializing variables to store ts and hash
let ts;
let hash;

// Iterate over the values to obtain ts and v1
parts.forEach(part => {
    // Split each part into key and value
    const [key, value] = part.split('=');
    if (key && value) {
        const trimmedKey = key.trim();
        const trimmedValue = value.trim();
        if (trimmedKey === 'ts') {
            ts = trimmedValue;
        } else if (trimmedKey === 'v1') {
            hash = trimmedValue;
        }
    }
});

// Obtain the secret key for the user/application from Mercadopago developers site
const secret = 'your_secret_key_here';

// Generate the manifest string
const manifest = `id:${dataID};request-id:${xRequestId};ts:${ts};`;

// Create an HMAC signature
const hmac = crypto.createHmac('sha256', secret);
hmac.update(manifest);

// Obtain the hash result as a hexadecimal string
const sha = hmac.digest('hex');

if (sha === hash) {
    // HMAC verification passed
    console.log("HMAC verification passed");
} else {
    // HMAC verification failed
    console.log("HMAC verification failed");
}

        
          
import hashlib
import hmac
import urllib.parse

# Obtain the x-signature value from the header
xSignature = request.headers.get("x-signature")
xRequestId = request.headers.get("x-request-id")

# Obtain Query params related to the request URL
queryParams = urllib.parse.parse_qs(request.url.query)

# Extract the "data.id" from the query params
dataID = queryParams.get("data.id", [""])[0]

# Separating the x-signature into parts
parts = xSignature.split(",")

# Initializing variables to store ts and hash
ts = None
hash = None

# Iterate over the values to obtain ts and v1
for part in parts:
    # Split each part into key and value
    keyValue = part.split("=", 1)
    if len(keyValue) == 2:
        key = keyValue[0].strip()
        value = keyValue[1].strip()
        if key == "ts":
            ts = value
        elif key == "v1":
            hash = value

# Obtain the secret key for the user/application from Mercadopago developers site
secret = "your_secret_key_here"

# Generate the manifest string
manifest = f"id:{dataID};request-id:{xRequestId};ts:{ts};"

# Create an HMAC signature defining the hash type and the key as a byte array
hmac_obj = hmac.new(secret.encode(), msg=manifest.encode(), digestmod=hashlib.sha256)

# Obtain the hash result as a hexadecimal string
sha = hmac_obj.hexdigest()
if sha == hash:
    # HMAC verification passed
    print("HMAC verification passed")
else:
    # HMAC verification failed
    print("HMAC verification failed")

        
          
import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"net/http"
	"strings"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// Obtain the x-signature value from the header
		xSignature := r.Header.Get("x-signature")
		xRequestId := r.Header.Get("x-request-id")

		// Obtain Query params related to the request URL
		queryParams := r.URL.Query()

		// Extract the "data.id" from the query params
		dataID := queryParams.Get("data.id")

		// Separating the x-signature into parts
		parts := strings.Split(xSignature, ",")

		// Initializing variables to store ts and hash
		var ts, hash string

		// Iterate over the values to obtain ts and v1
		for _, part := range parts {
			// Split each part into key and value
			keyValue := strings.SplitN(part, "=", 2)
			if len(keyValue) == 2 {
				key := strings.TrimSpace(keyValue[0])
				value := strings.TrimSpace(keyValue[1])
				if key == "ts" {
					ts = value
				} else if key == "v1" {
					hash = value
				}
			}
		}

		// Get secret key/token for specific user/application from Mercadopago developers site
		secret := "your_secret_key_here"

		// Generate the manifest string
		manifest := fmt.Sprintf("id:%v;request-id:%v;ts:%v;", dataID, xRequestId, ts)

		// Create an HMAC signature defining the hash type and the key as a byte array
		hmac := hmac.New(sha256.New, []byte(secret))
		hmac.Write([]byte(manifest))

		// Obtain the hash result as a hexadecimal string
		sha := hex.EncodeToString(hmac.Sum(nil))

if sha == hash {
    // HMAC verification passed
    fmt.Println("HMAC verification passed")
} else {
    // HMAC verification failed
    fmt.Println("HMAC verification failed")
}

	})
}

        

3. Simular la recepciĂłn de la notificaciĂłn

Para garantizar que las notificaciones sean configuradas correctamente, es necesario simular su recepciĂłn. Para hacerlo, sigue el paso a paso a continuaciĂłn.

  1. Después de configurar las URLs y los Eventos, haz clic en Guardar para guardar la configuración.
  2. Luego, haz clic en Simular para probar si la URL indicada estĂĄ recibiendo las notificaciones correctamente.
  3. En la pantalla de simulaciĂłn, selecciona la URL que se va a probar, que puede ser la URL de prueba o la de producciĂłn.
  4. A continuaciĂłn, elige el tipo de evento e ingresa la identificaciĂłn que se enviarĂĄ en el cuerpo de la notificaciĂłn.
  5. Por Ășltimo, haz clic en Enviar prueba para verificar la solicitud, la respuesta proporcionada por el servidor y la descripciĂłn del evento.

ConfiguraciĂłn al crear pagos

Durante el proceso de creaciĂłn de pagos, preferencias u Ăłrdenes presenciales, es posible configurar la URL de notificaciĂłn de forma mĂĄs especĂ­fica para cada pago utilizando el campo notification_url e implementando un receptor de notificaciones.

Importante
No es posible configurar notificaciones para el tópico point_integration_wh utilizando este método. Para activarlo, utiliza la configuración a través de Tus integraciones .

A continuaciĂłn, explicamos cĂłmo configurar notificaciones al crear un pago utilizando nuestros SDKs.

  1. En el campo notification_url, indica la URL desde la que se recibirĂĄn las notificaciones, como se muestra a continuaciĂłn. Para recibir exclusivamente Webhooks y no IPN, agrega el parĂĄmetro source_news=webhooks a la notification_url. Por ejemplo: https://www.yourserver.com/notifications?source_news=webhooks.
          
<?php 
$client = new PaymentClient();

        $body = [
            'transaction_amount' => 100,
            'token' => 'token',
            'description' => 'description',
            'installments' => 1,
            'payment_method_id' => 'visa',
            'notification_url' => 'http://test.com',
            'payer' => array(
                'email' => 'test@test.com',
                'identification' => array(
                    'type' => 'CPF',
                    'number' => '19119119100'
                )
            )
        ];

$client->create(body);
?>

        
          
const client = new MercadoPagoConfig({ accessToken: 'ACCESS_TOKEN' });
const payment = new Payment(client);

const body = {
 transaction_amount: '100',
  token: 'token',
  description: 'description',
  installments: 1,
  payment_method_id: 'visa',
  notification_url: 'http://test.com',
  payer: {
    email: 'test@test.com',
    identification: {
      type: 'CPF',
      number: '19119119100'
    }
  }
};

payment.create({ body: body, requestOptions: { idempotencyKey: '<SOME_UNIQUE_VALUE>' } }).then(console.log).catch(console.log);

        
          
MercadoPago.SDK.setAccessToken("YOUR_ACCESS_TOKEN");


Payment payment = new Payment();
payment.setTransactionAmount(Float.valueOf(request.getParameter("transactionAmount")))
      .setToken(request.getParameter("token"))
      .setDescription(request.getParameter("description"))
      .setInstallments(Integer.valueOf(request.getParameter("installments")))
      .setPaymentMethodId(request.getParameter("paymentMethodId"))
      .setNotificationUrl("http://requestbin.fullcontact.com/1ogudgk1");


Identification identification = new Identification();
identification.setType(request.getParameter("docType"))
             .setNumber(request.getParameter("docNumber")); 


Payer payer = new Payer();
payer.setEmail(request.getParameter("email"))
    .setIdentification(identification);
   
payment.setPayer(payer);


payment.save();


System.out.println(payment.getStatus());



        
          
require 'mercadopago'
sdk = Mercadopago::SDK.new('YOUR_ACCESS_TOKEN')


payment_data = {
 transaction_amount: params[:transactionAmount].to_f,
 token: params[:token],
 description: params[:description],
 installments: params[:installments].to_i,
 payment_method_id: params[:paymentMethodId],
 notification_url: "http://requestbin.fullcontact.com/1ogudgk1",
 payer: {
   email: params[:email],
   identification: {
     type: params[:docType],
     number: params[:docNumber]
   }
 }
}


payment_response = sdk.payment.create(payment_data)
payment = payment_response[:response]


puts payment



        
          
using System;
using MercadoPago.Client.Common;
using MercadoPago.Client.Payment;
using MercadoPago.Config;
using MercadoPago.Resource.Payment;


MercadoPagoConfig.AccessToken = "YOUR_ACCESS_TOKEN";


var paymentRequest = new PaymentCreateRequest
{
   TransactionAmount = decimal.Parse(Request["transactionAmount"]),
   Token = Request["token"],
   Description = Request["description"],
   Installments = int.Parse(Request["installments"]),
   PaymentMethodId = Request["paymentMethodId"],
   NotificationUrl = "http://requestbin.fullcontact.com/1ogudgk1",


   Payer = new PaymentPayerRequest
   {
       Email = Request["email"],
       Identification = new IdentificationRequest
       {
           Type = Request["docType"],
           Number = Request["docNumber"],
       },
   },
};


var client = new PaymentClient();
Payment payment = await client.CreateAsync(paymentRequest);


Console.WriteLine(payment.Status);



        
          
import mercadopago
sdk = mercadopago.SDK("ACCESS_TOKEN")


payment_data = {
   "transaction_amount": float(request.POST.get("transaction_amount")),
   "token": request.POST.get("token"),
   "description": request.POST.get("description"),
   "installments": int(request.POST.get("installments")),
   "payment_method_id": request.POST.get("payment_method_id"),
   "notification_url" =  "http://requestbin.fullcontact.com/1ogudgk1",
   "payer": {
       "email": request.POST.get("email"),
       "identification": {
           "type": request.POST.get("type"), 
           "number": request.POST.get("number")
       }
   }
}


payment_response = sdk.payment().create(payment_data)
payment = payment_response["response"]


print(payment)

        
          
accessToken := "{{ACCESS_TOKEN}}"


cfg, err := config.New(accessToken)
if err != nil {
   fmt.Println(err)
   return
}


client := payment.NewClient(cfg)


request := payment.Request{
   TransactionAmount: <transactionAmount>,
   Token: <token>,
   Description: <description>,
   Installments: <installments>,
   PaymentMethodID:   <paymentMethodId>,
   NotificationURL: "https:/mysite.com/notifications/new",
   Payer: &payment.PayerRequest{
      Email: <email>,
      Identification: &payment.IdentificationRequest{
         Type: <type>,
         Number: <number>,
      },
   },
}


resource, err := client.Create(context.Background(), request)
if err != nil {
fmt.Println(err)
}


fmt.Println(resource)

        
          
curl -X POST \
   -H 'accept: application/json' \
   -H 'content-type: application/json' \
   -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
   'https://api.mercadopago.com/v1/payments' \
   -d '{
         "transaction_amount": 100,
         "token": "ff8080814c11e237014c1ff593b57b4d",
         "description": "Blue shirt",
         "installments": 1,
         "payment_method_id": "visa",
         "issuer_id": 310,
         "notification_url": "http://requestbin.fullcontact.com/1ogudgk1",
         "payer": {
           "email": "test@test.com"


         }
   }'



        
  1. Implementa el receptor de notificaciones usando el siguiente cĂłdigo como ejemplo:

php

<?php
 MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");
 switch($_POST["type"]) {
     case "payment":
         $payment = MercadoPago\Payment::find_by_id($_POST["data"]["id"]);
         break;
     case "plan":
         $plan = MercadoPago\Plan::find_by_id($_POST["data"]["id"]);
         break;
     case "subscription":
         $plan = MercadoPago\Subscription::find_by_id($_POST["data"]["id"]);
         break;
     case "invoice":
         $plan = MercadoPago\Invoice::find_by_id($_POST["data"]["id"]);
         break;
     case "point_integration_wh":
         // $_POST contiene la informaciĂČn relacionada a la notificaciĂČn.
         break;
 }
?>

Luego de realizar la configuraciĂłn necesaria, la notificaciĂłn Webhook serĂĄ enviada con formato JSON. Puedes ver a continuaciĂłn un ejemplo de notificaciĂłn del tĂłpico payment, y las descripciones de la informaciĂłn enviada en la tabla debajo.

Importante
Los pagos de prueba, creados con credenciales de prueba, no enviarĂĄn notificaciones. La Ășnica vĂ­a para probar la recepciĂłn de notificaciones es mediante la ConfiguraciĂłn a travĂ©s de Tus integraciones .

json

{
 "id": 12345,
 "live_mode": true,
 "type": "payment",
 "date_created": "2015-03-25T10:04:58.396-04:00",
 "user_id": 44444,
 "api_version": "v1",
 "action": "payment.created",
 "data": {
     "id": "999999999"
 }
}
AtributoDescripciĂłnEjemplo en el JSON
idID de la notificaciĂłn12345
live_modeIndica si la URL ingresada es vĂĄlida.true
typeTipo de notificacion recebida e acuerdo con el tĂłpico previamente seleccionado (payments, mp-connect, subscription, claim, automatic-payments, etc)payment
date_createdFecha de creaciĂłn del recurso notificado2015-03-25T10:04:58.396-04:00
user_idIdentificador del vendedor44444
api_versionValor que indica la versiĂłn de la API que envĂ­a la notificaciĂłnv1
actionEvento notificado, que indica si es una actualizaciĂłn de un recurso o la creaciĂłn de uno nuevopayment.created
data.idID del pago, de la orden comercial o del reclamo.999999999
Importante
Para conocer el formato de notificaciones para tĂłpicos distintos a payment, como point_integration_wh, topic_claims_integration_wh y topic_card_id_wh, consulta InformaciĂłn adicional sobre notificaciones .

Acciones necesarias después de recibir la notificación

Cuando recibes una notificaciĂłn en tu plataforma, Mercado Pago espera una respuesta para validar que esa recepciĂłn fue correcta. Para eso, debes devolver un HTTP STATUS 200 (OK) o 201 (CREATED).

El tiempo de espera para esa confirmación serå de 22 segundos. Si no se envía esta respuesta, el sistema entenderå que la notificación no fue recibida y realizarå un nuevo intento de envío cada 15 minutos, hasta que reciba la respuesta. Después del tercer intento, el plazo serå prorrogado, pero los envíos continuarån sucediendo.

Luego de responder la notificación, confirmando su recibimiento, puedes obtener toda la información sobre el recurso notificado haciendo una requisición al endpoint correspondiente. Para identificar qué endpoint debes utilizar, consulta la tabla debajo:

TipoURLDocumentaciĂłn
paymenthttps://api.mercadopago.com/v1/payments/[ID]Obtener pago
subscription_preapprovalhttps://api.mercadopago.com/preapproval/searchObtener suscripciĂłn
subscription_preapproval_planhttps://api.mercadopago.com/preapproval_plan/searchObtener plan de suscripciĂłn
subscription_authorized_paymenthttps://api.mercadopago.com/authorized_payments/[ID]Obtener informaciĂłn de facturas
point_integration_whhttps://api.mercadopago.com/point/integration-api/payment-intents/{paymentintentid}Obtener intenciĂłn de pago
topic_claims_integration_whhttps://api.mercadopago.com/post-purchase/v1/claims/[claim_id]Obtener detalles del reclamo
topic_merchant_order_whhttps://api.mercadopago.com/merchant_orders/[ID]Obtener orden
topic_chargebacks_whhttps://api.mercadopago.com/v1/chargebacks/[ID]Obtener contracargo

Con esta informaciĂłn podrĂĄs realizar las actualizaciones necesarias a tu plataforma, como actualizar un pago aprobado.

Panel de notificaciones

El panel de notificaciones es una herramienta que permite visualizar los eventos disparados sobre una determinada integraciĂłn, verificar el estado de las notificaciones, y obtener informaciĂłn detallada sobre esos eventos.

Este Panel serĂĄ exhibido una vez que hayas configurado tus notificaciones Webhooks, y puedes acceder a Ă©l cuando desees, haciendo clic en Webhooks dentro de Tus integraciones.

Entre la informaciĂłn disponible en este panel, encontrarĂĄs el porcentaje de notificaciones entregadas, asĂ­ como una visiĂłn rĂĄpida de cuĂĄles son las URLs y eventos configurados.

AdemĂĄs, encontrarĂĄs una lista completa de las Ășltimas notificaciones enviadas y sus detalles, como estado de la entrega (exitoso o fallido), acciĂłn (acciĂłn asociada al evento disparado), evento (tipo de evento disparado), y fecha y hora. Si lo deseas, es posible filtrar estos resultados exhibidos por estado de la entrega y por perĂ­odo.

panel de notificaciones webhooks

Detalles del evento

Al hacer clic en una de las notificaciones listadas, podrĂĄs acceder a los detalles del evento. Esta secciĂłn proporciona mayor informaciĂłn y permite recuperar datos perdidos en caso de fallas en la entrega de la notificaciĂłn para mantener tu sistema actualizado.

  • Status: Estado del evento junto con el cĂłdigo de Ă©xito o error correspondiente.
  • Evento: Tipo de evento disparado, en funciĂłn de los tĂłpicos seleccionados durante la configuraciĂłn de las notificaciones.
  • Tipo: TĂłpico al que pertenece el evento disparado, en funciĂłn de la selecciĂłn hecha durante la configuraciĂłn.
  • Fecha y hora del disparo: Fecha y hora en la que fue disparado el evento.
  • DescripciĂłn: DescripciĂłn detallada del evento.
  • ID del disparo: Identificador Ășnico de la notificaciĂłn enviada.
  • RequisiciĂłn: JSON del llamado enviado como notificaciĂłn.

detalles de notificaciones enviadas

En caso de una falla en la entrega de la notificaciĂłn, podrĂĄs conocer cuĂĄles fueron los motivos y rectificar la informaciĂłn necesaria para evitar futuros problemas.