Stripe से Subscriptions कैसे जोड़ें: Plans, Trials, Webhooks और असफल भुगतान
Stripe से subscriptions जोड़ने के लिए, Stripe Dashboard में आवर्ती price वाला एक product बनाएँ, अपने सर्वर से ग्राहकों को subscription mode में Stripe Checkout पर भेजें, और एक webhook से अपने ऐप को बताने दें कि हर भुगतान कब सफल, विफल, बदला या समाप्त हुआ। Subscription की स्थिति user के रिकॉर्ड के साथ सहेजें और पहुँच उसी से दें, success page से नहीं। एक Manage billing button जोड़ें जो Stripe के होस्टेड customer portal को खोले, ताकि लोग कार्ड बदल सकें, plan बदल सकें और रद्द कर सकें, बिना आपके वे स्क्रीन बनाए।
यह गाइड अपने ऐप में payments कैसे जोड़ें पर आधारित है, जो एक-बार के Checkout, test mode और लाइव होने को कवर करता है। यहाँ हम आवर्ती billing के अलग पहलुओं पर ध्यान देते हैं। Stripe का विवरण सितंबर 2026 तक के Stripe documentation से है।
Subscriptions एक-बार के भुगतान से कठिन क्यों हैं
एक-बार का भुगतान तब होता है जब ग्राहक आपके ऐप में होता है। Subscription ग्राहक के जाने के बाद भी चलती रहती है: हर महीने renewals, कार्ड जो expire होते हैं, महीने के बीच upgrades, और ऐसी cancellations जो अवधि के अंत में लागू होती हैं। आपका ऐप इनके बारे में केवल webhooks से सुनता है। ज़्यादातर subscription bugs तब होते हैं जब पहले भुगतान को पूरी कहानी मान लिया जाता है।
आपके विकल्प
| तरीका | आप क्या बनाते हैं | किसके लिए सबसे अच्छा |
|---|---|---|
| आवर्ती price वाला Payment Link | केवल एक link | माँग परखना; access हाथ से संभालना |
| Checkout (subscription mode) + customer portal | एक सर्वर route, एक webhook, एक billing button | ज़्यादातर SaaS ऐप्स और memberships |
| आपके अपने payment form के साथ Subscriptions API | कहीं ज़्यादा: payment UI, authentication, retries | असामान्य billing प्रवाह वाले ऐप्स |
| Merchant-of-record provider | Checkout जैसा | वे विक्रेता जो चाहते हैं कि sales tax provider संभाले |
ज़्यादातर ऐप्स के लिए Checkout और portal का मेल सही समझौता है। अगर tax संभालना आपको परेशान करता है, तो प्रदाताओं की तुलना Stripe बनाम Paddle बनाम Lemon Squeezy में देखें।
पहले Stripe में pricing की योजना बनाएँ
Stripe में product वह है जो आप बेचते हैं ("Pro plan"), और price यह है कि आप उसके लिए कितना लेते हैं ("$20 प्रति माह", "$200 प्रति वर्ष")। एक product की कई prices हो सकती हैं। तय करें:
- आप कौन से tiers देते हैं और हर एक आपके ऐप में क्या खोलता है
- मासिक, वार्षिक, या दोनों
- क्या आप trial देते हैं, और क्या उसके लिए शुरू में कार्ड चाहिए
Products और prices test mode में बनाएँ, और उनके price IDs सहेजें; आपका ऐप उन्हें संदर्भित करता है। अगर pricing तय नहीं हुई है, तो SaaS उत्पाद की कीमत कैसे तय करें और freemium बनाम मुफ़्त trial पढ़ें।
Subscription lifecycle जो आपको संभालना है
Stripe के subscriptions overview में वे statuses सूचीबद्ध हैं जो एक subscription के हो सकते हैं। पहुँच के लिए सबसे अहम ये हैं:
| Status | इसका मतलब | पहुँच दें? |
|---|---|---|
trialing | Trial अवधि में | हाँ |
active | ठीक चल रही | हाँ |
incomplete | पहला भुगतान अभी पूरा नहीं हुआ; Stripe ग्राहक को 23 घंटे देता है | नहीं |
incomplete_expired | पहला भुगतान कभी सफल नहीं हुआ | नहीं |
past_due | नवीनतम भुगतान विफल या प्रयास नहीं हुआ; दोबारा कोशिश हो सकती है | आपका चुनाव; कई ऐप्स थोड़ी grace अवधि देते हैं |
unpaid | दोबारा कोशिशें खत्म, invoices खुले रहते हैं, आगे कोई प्रयास नहीं | नहीं; Stripe के docs के अनुसार पहुँच हटाएँ |
canceled | खत्म; दोबारा शुरू नहीं हो सकती | नहीं |
paused | Trial बिना भुगतान तरीके के खत्म हुआ और pause पर सेट हुआ | नहीं |
स्थिति को अपने user या account रिकॉर्ड पर सहेजें और पहुँच उसी पर आधारित करें। हर बार प्रासंगिक webhook आने पर उसे अपडेट करें।
संभालने वाले webhook events
| Event | आपका ऐप क्या करता है |
|---|---|
checkout.session.completed | नए Stripe customer और subscription IDs को आपके user से जोड़ें |
invoice.paid | Subscription को active मार्क करें और नया period end दर्ज करें |
invoice.payment_failed | User को बताएँ कि उसका कार्ड विफल हुआ और portal का link दें |
invoice.payment_action_required | User से कार्ड प्रमाणीकरण पूरा करने को कहें |
customer.subscription.updated | Plan, status और कोई तय की गई cancellation अपडेट करें |
customer.subscription.deleted | भुगतान वाली पहुँच हटाएँ |
customer.subscription.trial_will_end | Trial खत्म होने से पहले user को याद दिलाएँ; Stripe इसे तीन दिन पहले भेजता है |
Stripe के webhook docs के handler नियम अब भी लागू होते हैं: raw body से signature जाँचें, जल्दी 2xx लौटाएँ, duplicate और क्रम से बाहर आए events संभालें, और दोबारा प्रयास की उम्मीद रखें। webhook क्या है गाइड इस विचार को समझाती है, और payments गाइड नियमों की विस्तृत सूची देती है।
चरण दर चरण
- Stripe test mode में products और prices बनाएँ।
- Secrets जोड़ें: secret key, price IDs, और बाद में webhook signing secret। इन्हें कभी frontend कोड में न डालें।
- Pricing page: हर plan का button आपके सर्वर को call करता है, जो logged-in user के लिए subscription mode में Checkout Session बनाता है। आपकी user ID पास करें ताकि webhook भुगतान को account से मिला सके।
- Webhook endpoint: signatures जाँचें और ऊपर के events संभालें, हर user के लिए एक subscription रिकॉर्ड अपडेट करते हुए।
- Features को सहेजी गई स्थिति और plan पर सीमित करें, जिसे हर संरक्षित कार्य के लिए सर्वर पर जाँचा जाए, केवल छिपे buttons पर नहीं।
- Customer portal: उसे Stripe Dashboard में कॉन्फ़िगर करें (लोग किस plan पर बदल सकते हैं, क्या वे रद्द कर सकते हैं), फिर एक Manage billing button जोड़ें जो सर्वर पर portal session बनाए और उस पर redirect करे।
- विफल भुगतान: Stripe की billing settings में retry व्यवहार और आख़िरी प्रयास के बाद क्या होगा, यह चुनें।
past_dueरहते ऐप में एक banner दिखाएँ। - पूरे lifecycle को टेस्ट करें, फिर publish करें और live webhook रजिस्टर करें।
AI builder को दिए जाने वाले prompts
Stripe से subscription billing जोड़ो। Plans: Starter (price ID STRIPE_PRICE_STARTER में) और Pro (STRIPE_PRICE_PRO)। Pricing page सर्वर पर STRIPE_SECRET_KEY से subscription mode में Checkout Session बनाए, logged-in user की ID जोड़कर। Stripe customer ID, subscription ID, plan और status user पर सहेजो। Secret key को कभी browser तक न पहुँचने दो।
POST /api/stripe/webhook जोड़ो। raw request body से STRIPE_WEBHOOK_SECRET के साथ signature जाँचो। checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted और customer.subscription.trial_will_end संभालो। संसाधित event IDs दर्ज करो ताकि duplicates छूट जाएँ। User की स्थिति subscription object से अपडेट करो, उस क्रम से नहीं जिसमें events आए।
Pro features सर्वर पर सीमित करो: केवल तब अनुमति दो जब status active या trialing हो और plan Pro हो। जब status past_due हो तो "भुगतान विफल, अपना कार्ड अपडेट करें" banner दिखाओ। एक Manage billing button जोड़ो जो इस user के लिए Stripe customer portal खोले।
Upgrades, downgrades और proration
जब कोई ग्राहक plan बदलता है, तो Stripe के docs के अनुसार बदलाव अक्सर एक proration बनाता है: नई price मौजूदा billing अवधि के बचे हिस्से पर लागू होती है। आप proration का पूर्वावलोकन कर सकते हैं या उसे बंद कर सकते हैं। अगर plans का अंतराल एक जैसा है, तो billing की तारीखें वही रहती हैं; मासिक से वार्षिक पर जाने पर billing की तारीख बदलाव वाले दिन पर चली जाती है। ग्राहकों को portal में plan बदलने देने से यह तर्क लिखने की मेहनत बचती है, पर portal settings में तय करें कि कौन से बदलाव अनुमत हैं।
टेस्टिंग चेकलिस्ट
Stripe test mode और test cards इस्तेमाल करें, और हर स्थिति से गुज़रें:
- नई subscription सही user को सही plan देती है
- भुगतान के तुरंत बाद tab बंद करने पर भी पहुँच मिलती है (इससे साबित होता है कि webhook काम करता है)
- साइन-अप पर अस्वीकृत कार्ड कुछ नहीं देता
- विफल होने वाला renewal account को
past_dueमें डालता है और banner दिखाता है - Portal में कार्ड अपडेट करने से
activeस्थिति बहाल होती है - Upgrade और downgrade features सही तरीके से बदलते हैं
- अवधि के अंत में रद्द करने से पहुँच अंतिम तारीख तक रहती है, फिर हट जाती है
- Trial users को पहुँच मिलती है, reminder मिलता है, और वे सही तरीके से बदलते या पहुँच खोते हैं
- एक ही webhook event दो बार भेजने से कुछ नहीं बदलता
Stripe के test clocks समय बीतने का अनुकरण करने देते हैं, इसलिए आप एक महीने इंतज़ार किए बिना renewals टेस्ट कर सकते हैं। इन्हें इस्तेमाल करने का तरीका Stripe के मौजूदा testing docs में देखें।
आम गलतियाँ
- Success page पर पहुँच देना। ग्राहक भुगतान कर सकते हैं और वहाँ कभी न पहुँचें। Webhook इस्तेमाल करें।
- केवल पहला भुगतान संभालना। Renewals, विफलताएँ और cancellations बाद में events के रूप में आते हैं।
- Plan की स्थिति केवल frontend पर जाँचना। कोई भी सीधे आपका API call कर सकता है।
- गलती से एक user के कई subscriptions। नया Checkout Session बनाने से पहले जाँचें कि पहले से subscription है या नहीं, या मौजूदा ग्राहकों को portal पर भेजें।
- पहले विफल renewal पर पहुँच हटाना। कार्ड सामान्य कारणों से विफल होते हैं। एक साफ़ banner के साथ थोड़ी grace अवधि ग्राहकों को बनाए रखती है।
- Live webhook भूल जाना। Test और live endpoints की signing secrets अलग होती हैं।
- Tax और refunds को नज़रअंदाज़ करना। लॉन्च से पहले अपनी refund नीति तय करें और किसी accountant से tax दायित्व जाँचें।
Mythex पर Subscriptions
Mythex पर बनाए ऐप्स आपके अपने Stripe account और keys इस्तेमाल करते हैं; आपके ऐप के लिए Stripe का एक-क्लिक कनेक्शन नहीं है। अपनी test keys और price IDs प्रोजेक्ट secrets के रूप में जोड़ें, ऊपर जैसे prompts इस्तेमाल करें, और Preview में Stripe के test cards से टेस्ट करें। Webhooks को आपके ऐप का सार्वजनिक URL चाहिए, इसलिए Stripe में endpoint रजिस्टर करने से पहले publish करें, और live keys पर जाने के बाद फिर से publish करें ताकि live ऐप उन्हें उठा ले। देखें Stripe से भुगतान स्वीकार करें और अपने backend में webhooks संभालें। बड़े उत्पाद के लिए, SaaS MVP कैसे बनाएँ बताता है कि billing के आसपास क्या बनाना है।
सवाल
Stripe के साथ subscriptions जोड़ने का सबसे सरल तरीका क्या है?
Stripe Dashboard में आवर्ती price वाला एक product बनाएँ, ग्राहकों को subscription mode में Stripe Checkout पर भेजें, webhook से subscription events संभालें, और एक Manage billing button को Stripe के होस्टेड customer portal से जोड़ें। इससे आपको card forms और plan बदलने की स्क्रीन ख़ुद नहीं बनानी पड़तीं।
Subscriptions के लिए मुझे कौन से Stripe webhook events चाहिए?
कम से कम checkout.session.completed, ताकि नई subscription आपके user से जुड़े; invoice.paid, हर सफल भुगतान की पुष्टि के लिए; invoice.payment_failed, विफल renewals की चेतावनी के लिए; और customer.subscription.updated व customer.subscription.deleted, plan बदलने और रद्द होने पर नज़र रखने के लिए।
Subscription का भुगतान विफल होने पर क्या होता है?
Stripe के documentation के अनुसार, सितंबर 2026 तक, subscription आमतौर पर past_due हो जाती है और Stripe आपकी settings के आधार पर भुगतान दोबारा कोशिश कर सकता है। आख़िरी प्रयास के बाद आपकी Dashboard settings तय करती हैं कि उसे रद्द किया जाए, unpaid मार्क किया जाए, या past_due ही रहने दिया जाए।
क्या मैं बिना कार्ड माँगे मुफ़्त trial दे सकता हूँ?
हाँ। Stripe मुफ़्त trials सपोर्ट करता है, और उसके docs एक paused status बताते हैं, उन trials के लिए जो बिना भुगतान तरीके के खत्म हों, अगर वैसा कॉन्फ़िगर किया गया हो। शुरू में कार्ड माँगने से आम तौर पर साइन-अप कम होते हैं पर भुगतान करने वाले ग्राहक ज़्यादा; देखें कि आपके प्रोडक्ट पर क्या फ़िट होता है।