Integracao AbacatePay
Pagamentos e PIX com AbacatePay, gateway brasileiro.
O AbacatePay e um gateway de pagamentos brasileiro focado em simplicidade. A integracao gera um service para criar cobranças e PIX.
AbacatePay Service
// apps/api/src/integrations/abacatepay/abacatepay.service.ts
export class AbacatePayService {
private apiUrl: string;
private apiKey: string;
constructor() {
this.apiUrl = process.env.ABACATEPAY_API_URL || 'https://api.abacatepay.com/v1';
this.apiKey = process.env.ABACATEPAY_API_KEY!;
}
private async request(path: string, options: RequestInit = {}) {
const response = await fetch(`${this.apiUrl}${path}`, {
...options,
headers: {
Authorization: `Bearer ${this.apiKey}`,
'Content-Type': 'application/json',
...options.headers,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'AbacatePay API error');
}
return response.json();
}
async createPixCharge(params: {
amount: number; // em centavos
description: string;
customer: {
name: string;
email: string;
cpf: string;
};
externalId?: string;
}) {
return this.request('/billing/pix', {
method: 'POST',
body: JSON.stringify({
amount: params.amount,
description: params.description,
customer: params.customer,
external_id: params.externalId,
callback_url: `${process.env.API_URL}/api/webhooks/abacatepay`,
}),
});
}
async getCharge(chargeId: string) {
return this.request(`/billing/${chargeId}`);
}
}
Controller e Webhook
// apps/api/src/integrations/abacatepay/abacatepay.controller.ts
// Criar cobranca PIX
app.post('/api/payments/pix', authMiddleware, async (req, res) => {
const { amount, description } = req.body;
const user = req.user;
const charge = await abacatePayService.createPixCharge({
amount: Math.round(amount * 100), // converter para centavos
description,
customer: {
name: user.name,
email: user.email,
cpf: user.cpf,
},
externalId: `order_${Date.now()}`,
});
res.json(charge);
});
// Webhook
app.post('/api/webhooks/abacatepay', async (req, res) => {
const { event, data } = req.body;
switch (event) {
case 'billing.paid':
console.log('Pagamento confirmado:', data.id);
// Atualizar pedido, liberar acesso, etc.
break;
case 'billing.expired':
console.log('Cobranca expirada:', data.id);
break;
}
res.sendStatus(200);
});
Variaveis de ambiente
| Variavel | Descricao |
|---|---|
ABACATEPAY_API_KEY | Chave de API do AbacatePay |
ABACATEPAY_API_URL | URL base da API (padrao: https://api.abacatepay.com/v1) |