All checks were successful
Build & Deploy Web / build-and-deploy (push) Successful in 19s
Nouveau dossier `09-Billing/` avec :
- folder.bru (overview : plans + flows upgrade/cancel/reactivate)
- 01 Get subscription : state du plan, caps, grace period, cancel flag
- 02 Start checkout : crée une Checkout Session Stripe (Pro/Business
× monthly/yearly)
- 03 Open portal : Customer Portal pour gérer CB/annulation
- 04 Reactivate : annule l'annulation programmée (sans paiement
immédiat) — gère le conflit Stripe
cancel_at vs cancel_at_period_end
Aussi documenté les endpoints in-app check-in qui manquaient dans Bruno :
- 03 In-app pending : liste des factures awaiting_user_confirmation
- 04 In-app respond paid : équivalent du lien email "C'est payé"
- 05 In-app respond pending : équivalent "Toujours en attente"
README mis à jour avec le parcours étendu (signup → … → billing).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
64 lines
1.6 KiB
Plaintext
64 lines
1.6 KiB
Plaintext
meta {
|
|
name: 02 Start checkout
|
|
type: http
|
|
seq: 2
|
|
}
|
|
|
|
post {
|
|
url: {{baseUrl}}/api/v1/billing/checkout
|
|
body: json
|
|
auth: bearer
|
|
}
|
|
|
|
auth:bearer {
|
|
token: {{token}}
|
|
}
|
|
|
|
body:json {
|
|
{
|
|
"plan": "pro",
|
|
"cycle": "monthly"
|
|
}
|
|
}
|
|
|
|
tests {
|
|
test("200 OK", function () {
|
|
expect(res.getStatus()).to.equal(200);
|
|
});
|
|
test("URL Stripe Checkout retournée", function () {
|
|
expect(res.getBody().data.url).to.match(/^https:\/\/checkout\.stripe\.com\//);
|
|
});
|
|
}
|
|
|
|
docs {
|
|
POST /api/v1/billing/checkout — auth requise
|
|
|
|
Crée une Stripe Checkout Session pour upgrader vers Pro ou Business.
|
|
Body :
|
|
```json
|
|
{ "plan": "pro" | "business", "cycle": "monthly" | "yearly" }
|
|
```
|
|
|
|
Effets :
|
|
- Crée le Stripe Customer si l'org n'en a pas (idempotent via `stripeCustomerId`)
|
|
- Crée une Checkout Session en mode `subscription` avec le bon Price (lookup_key)
|
|
- `subscription_data.metadata.organization_id` posé pour le webhook
|
|
- `allow_promotion_codes: true`, `locale: "fr"`, billing address auto
|
|
|
|
Réponse :
|
|
```json
|
|
{ "data": { "url": "https://checkout.stripe.com/c/pay/cs_test_..." } }
|
|
```
|
|
|
|
Le SPA fait `window.location.href = url`. L'user paye sur Stripe (UI hostée),
|
|
puis Stripe le redirect vers `${WEB_URL}/parametres/abonnement?checkout=success`.
|
|
|
|
## Pour tester
|
|
|
|
1. Récupère un `token` via Auth → 01 Signup
|
|
2. Lance cette requête → tu reçois une URL Checkout
|
|
3. Ouvre l'URL dans un navigateur, paye avec CB test : `4242 4242 4242 4242`
|
|
4. Vérifie via **01 Get subscription** que `plan: "pro"` est posé
|
|
5. Mailpit (http://localhost:8025) : tu reçois un email "thank you for subscribing"
|
|
}
|