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>
56 lines
1.3 KiB
Plaintext
56 lines
1.3 KiB
Plaintext
meta {
|
|
name: 04 Reactivate
|
|
type: http
|
|
seq: 4
|
|
}
|
|
|
|
post {
|
|
url: {{baseUrl}}/api/v1/billing/reactivate
|
|
body: none
|
|
auth: bearer
|
|
}
|
|
|
|
auth:bearer {
|
|
token: {{token}}
|
|
}
|
|
|
|
tests {
|
|
test("200 OK", function () {
|
|
expect(res.getStatus()).to.equal(200);
|
|
});
|
|
test("ok=true", function () {
|
|
expect(res.getBody().data.ok).to.equal(true);
|
|
});
|
|
}
|
|
|
|
docs {
|
|
POST /api/v1/billing/reactivate — auth requise
|
|
|
|
Annule une annulation programmée — la subscription continue son cycle
|
|
normal, sans paiement immédiat.
|
|
|
|
Effets :
|
|
- Retrieve le sub Stripe pour savoir laquelle des 2 mécaniques est posée
|
|
(Stripe REFUSE qu'on passe `cancel_at_period_end` ET `cancel_at` dans
|
|
le même update : "Please pass in only one")
|
|
- Si `cancel_at` est posé → on envoie `cancel_at: null`
|
|
- Sinon → on envoie `cancel_at_period_end: false`
|
|
- Persiste sur l'org : `cancel_at_period_end = false`
|
|
|
|
Idempotent :
|
|
- Si l'org n'a pas de sub Stripe → 400 `no_active_subscription`
|
|
- Si l'annulation n'est PAS programmée → 200 `{ok: true}` sans toucher Stripe
|
|
|
|
Réponse :
|
|
```json
|
|
{ "data": { "ok": true } }
|
|
```
|
|
|
|
## Pour tester
|
|
|
|
1. Annule la sub via le Customer Portal (03 Open portal → click Cancel)
|
|
2. Vérifie via **01 Get subscription** : `cancelAtPeriodEnd: true`
|
|
3. Lance cette requête
|
|
4. Re-vérifie : `cancelAtPeriodEnd: false`
|
|
}
|