Integracao Mercado Pago
Pagamentos com Preferences, PIX e webhooks do Mercado Pago.
A integracao Mercado Pago gera pagamentos via Checkout Pro (redirect) e PIX usando a SDK oficial do Mercado Pago. Ideal para o mercado brasileiro.
MercadoPago Service
// apps/api/src/integrations/mercadopago/mercadopago.service.ts
import { MercadoPagoConfig, Preference, Payment } from 'mercadopago';
export class MercadoPagoService {
private client: MercadoPagoConfig;
constructor() {
this.client = new MercadoPagoConfig({
accessToken: process.env.MERCADOPAGO_ACCESS_TOKEN!,
});
}
async createPreference(params: {
items: Array<{
title: string;
quantity: number;
unit_price: number;
currency_id?: string;
}>;
payer?: { email: string };
externalReference?: string;
}): Promise<{ id: string; initPoint: string }> {
const preference = new Preference(this.client);
const result = await preference.create({
body: {
items: params.items.map((item) => ({
...item,
currency_id: item.currency_id || 'BRL',
})),
payer: params.payer,
external_reference: params.externalReference,
back_urls: {
success: `${process.env.APP_URL}/payment/success`,
failure: `${process.env.APP_URL}/payment/failure`,
pending: `${process.env.APP_URL}/payment/pending`,
},
auto_return: 'approved',
notification_url: `${process.env.API_URL}/api/webhooks/mercadopago`,
},
});
return {
id: result.id!,
initPoint: result.init_point!,
};
}
async createPixPayment(params: {
amount: number;
description: string;
payerEmail: string;
}): Promise<{ qrCode: string; qrCodeBase64: string; ticketUrl: string }> {
const payment = new Payment(this.client);
const result = await payment.create({
body: {
transaction_amount: params.amount,
description: params.description,
payment_method_id: 'pix',
payer: { email: params.payerEmail },
},
});
return {
qrCode: result.point_of_interaction!.transaction_data!.qr_code!,
qrCodeBase64: result.point_of_interaction!.transaction_data!.qr_code_base64!,
ticketUrl: result.point_of_interaction!.transaction_data!.ticket_url!,
};
}
}
Webhook
// apps/api/src/integrations/mercadopago/mercadopago.webhook.ts
import { Payment, MercadoPagoConfig } from 'mercadopago';
app.post('/api/webhooks/mercadopago', async (req, res) => {
const { type, data } = req.body;
if (type === 'payment') {
const client = new MercadoPagoConfig({
accessToken: process.env.MERCADOPAGO_ACCESS_TOKEN!,
});
const paymentApi = new Payment(client);
const payment = await paymentApi.get({ id: data.id });
switch (payment.status) {
case 'approved':
console.log('Pagamento aprovado:', payment.id);
// Atualizar pedido
break;
case 'pending':
console.log('Pagamento pendente:', payment.id);
break;
case 'rejected':
console.log('Pagamento rejeitado:', payment.id);
break;
}
}
res.sendStatus(200);
});
Variaveis de ambiente
| Variavel | Descricao |
|---|---|
MERCADOPAGO_ACCESS_TOKEN | Token de acesso (test ou producao) |
MERCADOPAGO_PUBLIC_KEY | Chave publica para o frontend |
Obtenha suas credenciais em mercadopago.com.br/developers.