Recursos para IA

Configurar notificações de pagamento

As notificações Webhooks, também conhecidas como retornos de chamada web, são um método eficaz que permite aos servidores do Mercado Pago enviar informações em tempo real quando ocorre um evento específico relacionado à sua integração.

Com os Webhooks, o seu sistema não precisa realizar consultas contínuas para buscar atualizações. Esse mecanismo transmite dados de maneira passiva e automática, utilizando solicitações HTTP POST. Assim, otimiza a comunicação e reduz a carga nos servidores.

Consulte o fluxo geral de uma notificação no diagrama abaixo.

Diagram

A seguir, apresentamos um passo a passo para configurar as notificações de criação e atualização de pagamentos. Depois de configuradas, as notificações Webhook serão enviadas sempre que um pagamento for criado ou seu estado for modificado (Pendente, Rejeitado ou Aprovado).

Esta documentação trata exclusivamente da configuração de notificações de pagamento, incluindo criações e atualizações, por meio do evento Pagamentos. Para obter informações sobre outros eventos de notificações disponíveis para configuração, consulte a documentação de Notificações geral.

No processo de integração com o Mercado Pago, as notificações podem ser configuradas de duas maneiras:

Tipo de ConfiguraçãoDescriçãoVantagensQuando Usar
Configuração através de Suas integraçõesEste método permite configurar notificações diretamente do seu Painel de Desenvolvedor. Você pode configurar notificações para cada uma de suas aplicações, identificar contas distintas, se necessário, e validar a origem da notificação através de uma assinatura secreta.- Identificação simples de contas distintas, garantindo uma gestão adequada em ambientes diversos.
- Alta segurança ao validar a origem das notificações através de uma assinatura secreta, que garante a integridade da informação recebida.
- Mais versátil e eficaz para manter um controle centralizado e gerenciar a comunicação com as aplicações de maneira eficiente.
Recomendado para a maioria das integrações.
Configuração durante a criação de preferênciasAs notificações são configuradas para cada transação individualmente durante a criação da preferência.- Ajustes específicos para cada transação.
- Flexibilidade em casos de necessidade de parâmetros dinâmicos obrigatórios.
- Ideal para integrações como plataformas de pagamento para múltiplos vendedores.
Conveniente em casos em que seja necessário enviar um query parameter dinâmico de forma obrigatória, além de ser adequado para integrações que funcionam como uma plataforma de pagamento para múltiplos vendedores.
Importante
As URLs configuradas durante a criação de um pagamento terão prioridade sobre aquelas configuradas através de Suas integrações.

Após configurar as notificações, acesse a seção Ações necessárias após receber uma notificação para confirmar que elas foram devidamente recebidas.

Ações necessárias após receber a notificação

Quando você recebe uma notificação na sua plataforma, o Mercado Pago espera uma resposta para validar que essa recepção foi correta. Para isso, você deve devolver um HTTP STATUS 200 (OK) ou 201 (CREATED).

O tempo de espera para essa confirmação será de 22 segundos. Se não for enviada essa resposta, o sistema entenderá que a notificação não foi recebida e realizará uma nova tentativa de envio a cada 15 minutos, até que receba a resposta. Após a terceira tentativa, o prazo será prorrogado, mas os envios continuarão acontecendo.

sequenceDiagram
    participant MercadoPago as Mercado Pago
    participant Integrador as Integrador

    MercadoPago->>Integrador: tentativa: 1. Atraso: 0 minutos
    MercadoPago->>Integrador: tentativa: 2. Atraso: 15 minutos
    MercadoPago->>Integrador: tentativa: 3. Atraso: 30 minutos
    MercadoPago->>Integrador: tentativa: 4. Atraso: 6 horas
    MercadoPago->>Integrador: tentativa: 5. Atraso: 48 horas
    MercadoPago->>Integrador: tentativa: 6. Atraso: 96 horas
    MercadoPago->>Integrador: tentativa: 7. Atraso: 96 horas
    MercadoPago->>Integrador: tentativa: 8. Atraso: 96 horas

Após responder a notificação, confirmando seu recebimento, você pode obter todas as informações sobre o evento do tópico payments notificado fazendo um GET ao endpoint v1/payments/{id}.

Com essas informações, você poderá realizar as atualizações necessárias na sua plataforma, como por exemplo, atualizar um pagamento aprovado.

Além disso, para consultar o status do evento após a notificação, você pode utilizar os diferentes métodos dos nossos SDKs para realizar a consulta com o ID que foi enviado na notificação.

MercadoPago.SDK.setAccessToken("ENV_ACCESS_TOKEN");
switch (type) {
    case "payment":
        Payment payment = Payment.findById(data.id);
        break;
    case "plan":
        Plan plan = Plan.findById(data.id);
        break;
    case "subscription":
        Subscription subscription = Subscription.findById(data.id);
        break;
    case "invoice":
        Invoice invoice = Invoice.findById(data.id);
        break;
    case "point_integration_wh":
        // POST contiene la informaciòn relacionada a la notificaciòn.
        break;
}
mercadopago.configurations.setAccessToken('ENV_ACCESS_TOKEN');
switch (type) {
  case 'payment':
    const payment = await mercadopago.payment.findById(data.id);
    break;
  case 'plan':
    const plan = await mercadopago.plans.get(data.id);
    break;
  case 'subscription':
    const subscription = await mercadopago.subscriptions.get(data.id);
    break;
  case 'invoice':
    const invoice = await mercadopago.invoices.get(data.id);
    break;
  case 'point_integration_wh':
    // Contiene la informaciòn relacionada a la notificaciòn.
    break;
}
sdk = Mercadopago::SDK.new('PROD_ACCESS_TOKEN')

case payload['type']
when 'payment'
    payment = sdk.payment.search(filters: { id: payload['data']['id'] })
when 'plan'
    plan = sdk.preapproval_plan.search(filters: { id: data['data']['id'] })
end
MercadoPagoConfig.AccessToken = "ENV_ACCESS_TOKEN";
switch (type)
{
    case "payment":
        Payment payment = await Payment.FindByIdAsync(payload["data"]["id"].ToString());
        break;
    case "plan":
        Plan plan = await Plan.FindByIdAsync(payload["data"]["id"].ToString());
        break;
    case "subscription":
        Subscription subscription = await Subscription.FindByIdAsync(payload["data"]["id"].ToString());
        break;
    case "invoice":
        Invoice invoice = await Invoice.FindByIdAsync(payload["data"]["id"].ToString());
        break;
    case "point_integration_wh":
        // Contiene la informaciòn relacionada a la notificaciòn.
        break;
}
sdk = mercadopago.SDK("ENV_ACCESS_TOKEN")
notification_type = data["type"]
if notification_type == "payment":
    payment = sdk.payment().get(payload["data"]["id"])
elif notification_type == "plan":
    plan = sdk.preapproval().get(payload["data"]["id"]) 
elif notification_type == "subscription":
    subscription = sdk.preapproval().get(payload["data"]["id"])
elif notification_type == "invoice":
    invoice = sdk.invoice().get(payload["data"]["id"])
elif notification_type == "point_integration_wh":
    # Contiene la informaciòn relacionada a la notificaciòn.
else:
    return
cfg, err := config.New("ENV_ACCESS_TOKEN")
if err != nil {
    fmt.Println(err)
}

switch req.Body.Type {
case "payment":
    client := payment.NewClient(cfg)
    resource, err = client.Get(context.Background(), req.Body.data.id)
    if err != nil {
        fmt.Println(err)
        return
    }
case "plan":
    client := preapprovalplan.NewClient(cfg)
    resource, err := client.Get(context.Background(), req.Body.data.id)
    if err != nil {
        fmt.Println(err)
        return
    }
}