Aller au contenu
Studeia Docs
AI-assisted translation — last updated 2026-06-03. For original (pt-BR or en-US), use the language switcher.

Intégration Asaas (PIX + boleto + carte Brésil)

Asaas est le fournisseur de paiement BR de Studeia : PIX, boleto et carte nationale. Webhooks fail-closed, split client par provider, parallèle à Stripe (USD/international)

2026-06-03 5 min
Resposta curta

Asaas est le provider de paiement brésilien de Studeia : PIX instantané (1,99% de frais), boleto (R$3,49), carte nationale (4,99% + R$0,49). Pour les clients BR, c'est moins cher et plus natif que Stripe. Webhooks fail-closed (503 si token absent). Customer split par provider (stripeCustomerId vs asaasCustomerId). Pour l'international : Stripe USD en parallèle.

Configuration

1. Dashboard Asaas

  1. https://asaas.com (ou sandbox : https://sandbox.asaas.com)
  2. Paramètres > Intégrations > API > copiez l'Access Token
  3. Paramètres > Webhooks > Ajouter :
    • URL : https://[tenant].studeia.com/api/webhooks/asaas?token=<VOTRE_TOKEN>
    • Événements : PAYMENT_RECEIVED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, SUBSCRIPTION_CREATED/UPDATED/DELETED
  4. Personnalisez le token (chaîne aléatoire, cryptographiquement forte)

2. Variables d'environnement

ASAAS_API_KEY=$aact_...
ASAAS_WEBHOOK_TOKEN=...généré-à-l-étape-3...
ASAAS_SANDBOX=true  # optionnel, défaut false

3. Créer des produits dans Asaas

Asaas utilise un modèle de facturation récurrente différent de Stripe. Dans Studeia, les plans sont mappés via un code (il n'est pas nécessaire de créer un produit dans le dashboard Asaas).

Flux PIX

L'admin clique sur "Payer avec PIX" dans /institution/billing
  ↓
POST /api/institution/billing/checkout
  Body: { planSlug: "mini", provider: "asaas" }
  ↓
Studeia AsaasBillingProvider.createCheckout() :
  1. Résout asaasCustomerId (crée si inexistant — POST /customers)
  2. POST /subscriptions avec billingType=PIX
  3. Asaas retourne QR Code + payload PIX copier-coller
  4. Studeia retourne { url } page hébergée Asaas avec QR
  ↓
L'admin scanne le QR dans son application bancaire, paie
  ↓
PIX confirme en ~30s (instantané)
  ↓
Webhook PAYMENT_RECEIVED → applyWebhookEvent → promeut Tenant.plan

Durcissement (règles 138, 139)

  • Fail-closed : absence de la variable d'env ASAAS_WEBHOOK_TOKEN = 503 asaas_not_configured (règle 138). Anti-contournement.
  • Validation du token : query param ?token=<...> comparé avec l'env (comparaison timing-safe)
  • 5xx en cas d'échec : nouvelles tentatives automatiques
  • PaymentLog idempotent : unique [provider, externalEventId]
  • Expurgation des données personnelles : rawPayload passe par redactPaymentPayload() — supprime cpfCnpj, email, name, address, billing_details (règle 139)

Customer split par provider

TenantSubscription dispose de champs séparés :

  • stripeCustomerId — pour Stripe
  • asaasCustomerId — pour Asaas
  • externalCustomerId — héritage (maintenu comme fallback si le provider correspond)

resolveCustomerIdForProvider() dans create-checkout.ts utilise les nouveaux champs — NE JAMAIS réutiliser un ID cross-provider.

Quand utiliser Asaas vs Stripe

ScénarioRecommandé
Client brésilien avec PIXAsaas
Client brésilien avec boletoAsaas
Client brésilien avec carteAsaas (moins cher) ou Stripe
Client internationalStripe USD obligatoire (Asaas bloqué)
Grand compte entreprise enterpriseStripe (plus d'outils — Sigma, rapports personnalisés)

Comparatif des frais

MéthodeAsaasStripe
PIX1,99%Non proposé nativement
BoletoR$3,49 fixeNon proposé nativement
Carte de crédit4,99% + R$0,493,99% + R$0,59 (USD)
Carte de débit1,99% + R$0,39Non proposé (BR)
Anticipation des créancesDisponibleNon

Pour un volume B2B brésilien typique : Asaas est ~20-40% moins cher en frais totaux.

Voir aussi

FAQ

Pourquoi Asaas et non uniquement Stripe ?

Pour le marché brésilien : 95% des transactions B2B utilisent PIX (instantané, sans frais) ou boleto. Stripe ne dispose pas de PIX natif (proposé via des tiers plus coûteux). Asaas est brésilien, intègre PIX/boleto/carte nationale nativement avec des frais inférieurs (1,99% PIX, R$3,49 boleto, 4,99% carte + R$0,49 contre Stripe 3,99% + R$0,59).

Studeia détecte-t-il automatiquement quel provider utiliser ?

Oui. getCurrencyFromHeaders() côté serveur via x-vercel-ip-country / cf-ipcountry : BR = Asaas proposé dans l'UI (PIX/boleto/carte). Hors BR = Stripe USD obligatoire (Asaas bloqué côté serveur avec 400 'asaas_not_for_international').

Les webhooks Asaas sont-ils sécurisés ?

Oui, mais avec durcissement. Token via query param ASAAS_WEBHOOK_TOKEN. Sans token configuré : le webhook renvoie 503 asaas_not_configured (fail-closed — règle 138). Idempotence via PaymentLog unique. Asaas effectue des nouvelles tentatives avec backoff en cas de 5xx.

Puis-je tester Asaas en sandbox ?

Oui, Asaas dispose d'un environnement sandbox séparé : https://sandbox.asaas.com. Le token et la clé API sont distincts. Configurez ASAAS_SANDBOX=true dans l'env pour router vers l'endpoint sandbox.

Veja tambem

Intégration Asaas (PIX + boleto + carte Brésil)