אתם סטארטאפ SaaS שצריך ליישם מנויים? או שכבר יש לכם מערכת אבל אתם מפסידים עד 20% מההכנסות בגלל בעיות בתשלומים אוטומטיים? יישום מודל מנויים הוא לא רק חיבור שער תשלום—צריך לתכנן את מחזור החיים המלא: תקופת ניסיון, תקופת חסד, טיפול בכשלים, שדרוגים ואנליטיקה. הצוות שלנו עבד למעלה מעשור על בניית מערכות כאלה לעשרות פרויקטים, וסיפק יותר מ-20 פתרונות מנויים—מתוכניות חודשיות פשוטות ועד תוכניות ארגוניות מורכבות עם תמיכה בריבוי מטבעות ותקופות ניסיון. בפוסט הזה, אנחנו מפרקים את ההחלטות הטכניות המרכזיות.
איך עובד חיוב מנויים
מודל מנויים דורש סכמת נתונים ולוגיקה עסקית מחושבת היטב. בואו נסתכל על מבנה מסד הנתונים ובחירת ספק תשלומים.
מודל נתונים
plans (
id,
name,
billing_period: monthly | yearly | weekly,
price,
currency,
trial_days,
features (jsonb),
is_active
)
subscriptions (
id,
user_id,
plan_id,
status: trialing | active | past_due | canceled | expired,
current_period_start,
current_period_end,
trial_ends_at,
cancel_at_period_end (boolean),
canceled_at,
payment_method_id,
external_subscription_id (id в платёжной системе)
)
subscription_invoices (
id,
subscription_id,
amount,
currency,
status: draft | open | paid | failed | void,
attempt_count,
next_attempt_at,
paid_at,
payment_id
) בחירת ספק תשלומים
| ספק | תכונות | שוק |
|---|---|---|
| Stripe Billing | ניהול מנויים מובנה, Smart Retries, פורטל לקוחות | גלובלי |
| YooKassa | תשלומים אוטומטיים דרך כרטיסים שמורים, דורש לוגיקה עצמאית | רוסיה |
| CloudPayments | מנויים מובנים עם Webhooks | רוסיה |
Stripe Billing הוא הבחירה הטובה ביותר עבור SaaS גלובלי: הוא מטפל בלוגיקת הניסיונות בעצמו ומספק פורטל לקוחות מוכן. ראינו ששימוש ב-Stripe מקצר את זמן הפיתוח ב-30% בהשוואה ל-YooKassa. לשוק הרוסי, YooKassa גם עובד אבל דורש יישום של מתזמן משלכם לחיובים חוזרים.
למה בחירת ספק התשלומים הנכון חשובה
הבחירה הנכונה קובעת את מורכבות הפיתוח ואת היציבות של התשלומים האוטומטיים. ניהול ה-Dunning של Stripe משחזר עד 15% מהתשלומים המוצלחים בזכות תזמון ניסיונות מחודשים מותאם ML Stripe. זה מחזיר לקוחות נוספים ללא מעורבותכם.
איך עובדת תקופת החסד
לאחר החיוב הכושל הראשון, המנוי נכנס לסטטוס plans ( id, name, billing_period: monthly | yearly | weekly, price, currency, trial_days, features (jsonb), is_active ) subscriptions ( id, user_id, plan_id, status: trialing | active | past_due | canceled | expired, current_period_start, current_period_end, trial_ends_at, cancel_at_period_end (boolean), canceled_at, payment_method_id, external_subscription_id (id в платёжной системе) ) subscription_invoices ( id, subscription_id, amount, currency, status: draft | open | paid | failed | void, attempt_count, next_attempt_at, paid_at, payment_id ) —המשתמש שומר על גישה אבל מקבל הודעות. ניסיונות חוזרים:
- +יום 1: ניסיון ראשון
- +3 ימים: ניסיון שני עם תזכורת במייל
- +7 ימים: ניסיון אחרון, אזהרה על השעיה
- +10 ימים: הסטטוס הופך ל-
past_due, הגישה נשללת
ניהול ה-Dunning של Stripe עושה זאת אוטומטית. השוו ליישום ידני: במקרה הראשון, אתם מקבלים עד 15% תשלומים נוספים, במקרה השני—5–7%. ההשפעה ברורה.
תשלומים אוטומטיים
עם Stripe: המנוי נוצר פעם אחת, ו-Stripe מנהל את החידושים בעצמו. עם YooKassa—אתם צריכים מתזמן משלכם:
// Scheduled Job: каждый час
$dueSubscriptions = Subscription::where('status', 'active')
->where('current_period_end', '<=', now())
->get();
foreach ($dueSubscriptions as $subscription) {
dispatch(new RenewSubscriptionJob($subscription));
}expired מנסה לחייב דרך אמצעי התשלום השמור. בהצלחה—מעדכן את // Scheduled Job: каждый час $dueSubscriptions = Subscription::where('status', 'active') ->where('current_period_end', '<=', now()) ->get(); foreach ($dueSubscriptions as $subscription) { dispatch(new RenewSubscriptionJob($subscription)); } . בכשלון—מעבר ל-RenewSubscriptionJob ומתזמן ניסיונות חוזרים.
שדרוגים והפחתות תוכנית
שינוי תוכניות הוא לא טריוויאלי. הסכום מחושב מחדש באופן יחסי לתקופה שנותרה:
- שדרוג (לתוכנית יקרה יותר): מיידי, חיוב ההפרש עבור הזמן שנותר
- הפחתה (לתוכנית זולה יותר): נכנס לתוקף בתחילת התקופה הבאה, זיכוי מוחל
$unusedDays = $subscription->daysRemainingInPeriod();
$creditAmount = $unusedDays * ($currentPlan->dailyPrice());
$chargeAmount = $unusedDays * ($newPlan->dailyPrice()) - $creditAmount; פורטל לקוחות וניהול מנויים
משתמשים צריכים להיות מסוגלים:
- לצפות בתוכנית הנוכחית ובתאריך החיוב הבא
- לשנות תוכניות (עם חישוב יחסי)
- לעדכן אמצעי תשלום (הזנת כרטיס חדש דרך שדות מאובטחים)
- לבטל מנוי עם סיבה (סקר יציאה)
- להוריד חשבוניות
Stripe מספק פורטל לקוחות מתארח לניהול. עבור ממשק מותאם אישית על YooKassa, תצטרכו לבנות אחד משלכם. בדרך כלל, פיתוח פורטל מותאם אישית לוקח 1–2 שבועות, אבל אנחנו מציעים לעתים קרובות פתרון מבוסס Stripe—הוא זול יותר ומהיר ב-40%.
מניעת נטישה
פתרונות טכניים להפחתת ביטולי מנויים:
- תזכורות במייל 3 ו-7 ימים לפני החיוב עם הסכום
- הודעה על פקיעת כרטיס 30 ימים מראש
- אפשרות להשהות מנוי (במקום לבטל)
- הצעת יציאה: 20% הנחה לחודש הבא
הצעדים האלה מפחיתים נטישה ב-15–20% בפרויקטים טיפוסיים. אנחנו מבטיחים ליישם את המנגנונים האלה במערכת שלכם. צרו קשר לייעוץ—נעריך את המצב הנוכחי שלכם.
מלכודות נפוצות ביישום מנויים
- אי טיפול בשינוי אמצעי תשלום כשכרטיס אבד—אובדן לקוחות
- דילוג על dunning עם תוחלת חיים קבועה—אובדן כסף
- התעלמות מאזורי זמן—חיובים מתרחשים בזמנים לא נוחים
- אי בדיקת חיובים כפולים—תשלומים כפולים
אנליטיקת מנויים
מדדים מרכזיים: MRR (הכנסה חוזרת חודשית), שיעור נטישה, LTV, המרה מניסיון לתשלום, הכנסה ממוצעת למשתמש. חישוב אלה דורש שאילתות מתמחות על נתוני מנויים היסטוריים—סיכום תשלומים פשוט אינו מספיק. אנחנו בונים דשבורדים על המדדים האלה כדי שתראו את התמונה האמיתית.
לוח זמנים לפיתוח: 4–6 שבועות למערכת מלאה עם ניהול מחזור חיים, לוגיקת ניסיונות חוזרים, פורטל לקוחות ואנליטיקה בסיסית. צרו קשר כדי להעריך את הפרויקט שלכם—נמצא את הפתרון האופטימלי וניתן לכם לוח זמנים מדויק.







