Integração
Conectando seu gateway de pagamento.
Cada empresa usa o próprio gateway (Stripe, PagBank, Asaas, MercadoPago, checkout próprio). A Refera não sabe qual você usa — ela precisa apenas ser avisada quando uma venda aconteceu, com o referral_code do vendedor. Existem dois padrões:
A. Proxy via seu backend (recomendado)
Seu backend recebe o webhook do gateway, faz o que precisa fazer, e chama a Refera. Assim você tem controle total, log, retry — e a Refera é apenas mais um sistema que você notifica.
import Stripe from 'stripe'
import { reportSale } from '@/lib/refera' // seu wrapper
export async function POST(req: Request) {
const rawBody = await req.text()
const sig = req.headers.get('stripe-signature')!
const evt = stripe.webhooks.constructEvent(rawBody, sig, process.env.STRIPE_WEBHOOK_SECRET!)
if (evt.type === 'checkout.session.completed') {
const session = evt.data.object as Stripe.Checkout.Session
const meta = session.metadata ?? {}
if (meta.refera_referral_code) {
await reportSale({
referralCode: meta.refera_referral_code,
campaignId: meta.refera_campaign_id!,
planId: meta.refera_plan_id!,
amountBrl: (session.amount_total ?? 0) / 100,
externalRef: session.id, // idempotência
})
}
}
return new Response('ok')
}Coloca refera_referral_code, refera_campaign_id e refera_plan_id como metadata do Checkout Session no Stripe. Quando a compra completar, seu handler acima resolve tudo.
B. Webhook direto no Refera (atalho pra Stripe)
Se você não quer manter um handler intermediário, aponta o webhook do Stripe pra refera.com.br/api/webhooks/stripe. A Refera valida a assinatura (você cadastra o STRIPE_WEBHOOK_SECRET em Configurações → API keys), extrai o metadata e cria a venda.
Trade-off: você perde flexibilidade (não pode fazer lógica adicional no meio), mas o setup é 1 URL no Stripe + 1 field no dashboard.
PagBank / Asaas / MercadoPago
Não temos adaptador dedicado ainda. Use o padrão A (proxy no seu backend). Cada gateway BR tem um jeito próprio de webhook — pega o valor e o metadata que você guardou na criação do pedido, e chama POST /api/v1/sales.