Reaktivace předplatného dá další zkušební období zdarma
import { Aside } from ‘@astrojs/starlight/components’;
Symptom
Sekce “Symptom”Uživatel, kterému zkušební doba vypršela (nebo subscription zrušil), si znovu aktivuje členství a dostane další plnou zkušební dobu zdarma místo aby zaplatil. Lze opakovat → trvale zdarma.
Root cause
Sekce “Root cause”Endpoint pro aktivaci vždy zakládal subscription s trialem:
// ŠPATNĚ — trial pokaždéawait stripe.subscriptions.create({ customer, items: [{ price }], trial_period_days: 14,});Nebyl žádný check, jestli daný uživatel trial už vyčerpal.
Fix
Sekce “Fix”Trial jen pokud ho uživatel ještě neměl (zde indikováno existencí trial_ends_at z minula):
const alreadyHadTrial = !!profile.trial_ends_at;const params = { customer, items: [{ price }] };if (!alreadyHadTrial) params.trial_period_days = 14;const sub = await stripe.subscriptions.create(params);// status pak podle reality: trial v budoucnu → 'trial', jinak 'active'Jak se tomu vyvarovat v jiných systémech
Sekce “Jak se tomu vyvarovat v jiných systémech”- Detection: najdi
trial_period_days/trial_endu create-subscription a zkontroluj, jestli je podmíněné historií uživatele. - Anti-pattern: trial jako bezpodmínečný parametr; žádný „trial už použit” příznak na uživateli.
- Lepší přístup: (1) trvalý příznak
trial_used; (2) při reaktivaci subscription bez trialu; (3) test: vyčerpej trial, zruš, reaktivuj → musí platit hned.