मुख्य सामग्री पर जाएं

पूर्वापेक्षाएँ

डोडो पेमेंट्स API को एकीकृत करने के लिए, आपको आवश्यकता होगी:
  • एक डोडो पेमेंट्स व्यापारी खाता
  • डैशबोर्ड से API क्रेडेंशियल्स (API कुंजी और वेबहुक गुप्त कुंजी)
पूर्वापेक्षाओं पर अधिक विस्तृत गाइड के लिए, इस अनुभाग की जांच करें।

API एकीकरण

चेकआउट सत्र

Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product in product_cart and redirect customers to the returned checkout_url.
Mixed Checkout: आप एक ही चेकआउट सत्र में subscription उत्पादों को एक-बार के उत्पादों के साथ मिला सकते हैं। यह सेटअप शुल्क के साथ subscription, हार्डवेयर बंडल्स के साथ SaaS, और अन्य उपयोग-मामलों को सक्षम करता है। उदाहरणों के लिए Checkout Sessions guide देखें।
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
  const session = await client.checkoutSessions.create({
    product_cart: [
      { product_id: 'prod_subscription_monthly', quantity: 1 }
    ],
    // Optional: configure trials for subscription products
    subscription_data: { trial_period_days: 14 },
    customer: {
      email: 'subscriber@example.com',
      name: 'Jane Doe',
    },
    return_url: 'https://example.com/success',
  });

  console.log(session.checkout_url);
}

main();

API प्रतिक्रिया

निम्नलिखित प्रतिक्रिया का एक उदाहरण है:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
ग्राहक को checkout_url पर पुनर्निर्देशित करें।

वेबहुक

सदस्यताओं को एकीकृत करते समय, आपको सदस्यता जीवनचक्र को ट्रैक करने के लिए वेबहुक प्राप्त होंगे। ये वेबहुक आपको सदस्यता की स्थिति और भुगतान परिदृश्यों को प्रभावी ढंग से प्रबंधित करने में मदद करते हैं। अपने वेबहुक एंडपॉइंट को सेट करने के लिए, कृपया हमारे विस्तृत एकीकरण गाइड का पालन करें।

सदस्यता घटना प्रकार

निम्नलिखित वेबहुक घटनाएँ सदस्यता स्थिति परिवर्तनों को ट्रैक करती हैं:
  1. subscription.active - Subscription सफलतापूर्वक सक्रिय हो गई है।
  2. subscription.updated - Subscription ऑब्जेक्ट अपडेट हो गया था (कोई भी फ़ील्ड बदलते ही ट्रिगर होता है)।
  3. subscription.on_hold - असफल नवीनीकरण के कारण Subscription को होल्ड पर रखा गया है।
  4. subscription.failed - मैनडेट बनाने के दौरान Subscription निर्माण विफल हो गया।
  5. subscription.renewed - Subscription अगले बिलिंग अवधि के लिए नवीनीकृत कर दी गई है।
विश्वसनीय सदस्यता जीवनचक्र प्रबंधन के लिए, हम इन सदस्यता घटनाओं को ट्रैक करने की सिफारिश करते हैं।
किसी भी subscription परिवर्तनों के बारे में वास्तविक समय सूचनाएं प्राप्त करने के लिए subscription.updated का उपयोग करें, जिससे आपका एप्लिकेशन स्टेट API को पोल किए बिना सिंक में बना रहता है।

भुगतान परिदृश्य

सफल भुगतान प्रवाह जब एक भुगतान सफल होता है, तो आपको निम्नलिखित वेबहुक प्राप्त होंगे:
  1. subscription.active - Subscription सक्रियता को दर्शाता है
  2. payment.succeeded - प्रारंभिक भुगतान की पुष्टि करता है:
    • तत्काल बिलिंग (0 ट्रायल दिन): 2-10 मिनट के भीतर अपेक्षित
    • ट्रायल दिनों के लिए: जब भी वह समाप्त होता है
  3. subscription.renewed - अगले चक्र के लिए भुगतान कटौती और नवीनीकरण को दर्शाता है। (मूलतः, जब भी subscription उत्पादों के लिए भुगतान कटता है, आपको subscription.renewed webhook मिलेगा payment.succeeded के साथ)
भुगतान विफलता परिदृश्य
  1. Subscription Failure
  • subscription.failed - Subscription निर्माण मैनडेट बनाने में विफल रहने के कारण असफल रहा।
  • payment.failed - असफल भुगतान को दर्शाता है।
  1. Subscription On Hold
  • subscription.on_hold - Subscription को असफल नवीनीकरण भुगतान या असफल योजना परिवर्तन शुल्क के कारण होल्ड पर रखा गया है।
  • जब Subscription होल्ड पर जाती है, तब तक यह स्वचालित रूप से नवीनीकृत नहीं होगी जब तक भुगतान विधि को अपडेट न किया जाए।
Best Practice: कार्यान्वयन को सरल बनाने के लिए, हम सलाह देते हैं कि आप Subscription जीवनचक्र प्रबंधन के लिए मुख्यतः Subscription ईवेंट्स को ट्रैक करें।

सदस्यता होल्ड पर रखने का प्रबंधन

जब Subscription on_hold अवस्था में प्रवेश करती है, तो इसे पुनः सक्रिय करने के लिए आपको भुगतान विधि अपडेट करनी होती है। यह अनुभाग बताता है कि Subscription कब होल्ड पर जाती हैं और उनका कैसे प्रबंध करें।

जब सदस्यताएँ होल्ड पर जाती हैं

एक सदस्यता को होल्ड पर रखा जाता है जब:
  • नवीनीकरण भुगतान विफल: स्वचालित नवीनीकरण शुल्क अपर्याप्त धन, समाप्त कार्ड, या बैंक द्वारा अस्वीकृति के कारण विफल हो जाता है
  • योजना परिवर्तन शुल्क विफल: योजना अपग्रेड/डाउनग्रेड के दौरान तत्काल शुल्क विफल हो जाता है
  • भुगतान विधि प्राधिकरण विफल: भुगतान विधि को आवर्ती शुल्क के लिए प्राधिकृत नहीं किया जा सकता है
on_hold अवस्था में Subscription स्वचालित रूप से नवीनीकृत नहीं होंगी। आपको Subscription को पुनः सक्रिय करने के लिए भुगतान विधि अपडेट करनी होगी।

होल्ड से सदस्यताओं को पुनः सक्रिय करना

on_hold अवस्था से Subscription को पुनः सक्रिय करने के लिए Update Payment Method API का उपयोग करें। यह स्वचालित रूप से:
  1. शेष बकाया के लिए एक चार्ज बनाता है
  2. चार्ज के लिए एक इनवॉइस बनाता है
  3. नई भुगतान विधि का उपयोग करके भुगतान संसाधित करता है
  4. सफल भुगतान पर Subscription को active स्थिति में पुनः सक्रिय करता है
1

Handle subscription.on_hold webhook

जब आपको subscription.on_hold webhook प्राप्त हो, तो अपनी एप्लिकेशन स्थिति अपडेट करें और ग्राहक को सूचित करें:
// Webhook handler
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;
  
  if (event.type === 'subscription.on_hold') {
    const subscription = event.data;
    
    // Update subscription status in your database
    await updateSubscriptionStatus(subscription.subscription_id, 'on_hold');
    
    // Notify customer to update payment method
    await sendEmailToCustomer(subscription.customer_id, {
      subject: 'Payment Required - Subscription On Hold',
      message: 'Your subscription is on hold. Please update your payment method to continue service.'
    });
  }
  
  res.json({ received: true });
});
2

Update payment method

जब ग्राहक अपनी भुगतान विधि अपडेट करने के लिए तैयार हो, तो Update Payment Method API को कॉल करें:
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created for remaining dues:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
}
यदि ग्राहक ने भुगतान विधियाँ सहेजी हैं, तो आप मौजूदा भुगतान विधि आईडी का भी उपयोग कर सकते हैं:
await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});
3

Monitor webhook events

भुगतान विधि अपडेट करने के बाद, इन webhook ईवेंट्स की निगरानी करें:
  1. payment.succeeded - शेष बकाए के लिए चार्ज सफल रहा
  2. subscription.active - Subscription को पुनः सक्रिय कर दिया गया है
if (event.type === 'payment.succeeded') {
  const payment = event.data;
  
  // Check if this payment is for an on_hold subscription
  if (payment.subscription_id) {
    // Wait for subscription.active webhook to confirm reactivation
  }
}

if (event.type === 'subscription.active') {
  const subscription = event.data;
  
  // Update subscription status in your database
  await updateSubscriptionStatus(subscription.subscription_id, 'active');
  
  // Restore customer access
  await restoreCustomerAccess(subscription.customer_id);
  
  // Notify customer of successful reactivation
  await sendEmailToCustomer(subscription.customer_id, {
    subject: 'Subscription Reactivated',
    message: 'Your subscription has been reactivated successfully.'
  });
}

सदस्यता घटना पेलोड का उदाहरण


PropertyTypeRequiredDescription
business_idstringYesव्यवसाय के लिए अद्वितीय पहचानकर्ता
timestampstringYesघटना कब हुई इसका टाइमस्टैम्प (ज़रूरी नहीं कि वह डिलीवर होने के समय के समान हो)
typestringYesईवेंट का प्रकार। देखें Event Types
dataobjectYesमुख्य डेटा पेलोड। देखें Data Object

सदस्यता योजनाएँ बदलना

आप परिवर्तन योजना API एंडपॉइंट का उपयोग करके सदस्यता योजना को अपग्रेड या डाउनग्रेड कर सकते हैं। यह आपको सदस्यता के उत्पाद, मात्रा को संशोधित करने और प्रोरशन को संभालने की अनुमति देता है।

Change Plan API Reference

योजना बदलने से संबंधित विस्तृत जानकारी के लिए, कृपया हमारे Change Plan API दस्तावेज़ देखें।

प्रोरशन विकल्प

सदस्यता योजनाओं को बदलते समय, आपके पास तत्काल शुल्क को संभालने के लिए दो विकल्प होते हैं:

1. prorated_immediately

  • यह वर्तमान बिलिंग चक्र में शेष समय के आधार पर प्रोरैटेड राशि की गणना करता है
  • ग्राहक को केवल पुराने और नए योजना के बीच के अंतर के लिए ही चार्ज करता है
  • परीक्षण अवधि के दौरान, यह तुरंत उपयोगकर्ता को नई योजना में स्विच करता है और ग्राहक से तुरंत शुल्क वसूल करता है

2. full_immediately

  • ग्राहक से नई योजना के लिए पूरा सदस्यता राशि वसूलता है
  • पिछली योजना के किसी भी शेष समय या क्रेडिट को अनदेखा करता है
  • तब उपयोगी जब आप बिलिंग चक्र को रीसेट करना चाहते हैं या प्रोरैशन की परवाह किए बिना पूरा नया योजना राशि वसूलना चाहते हैं

3. difference_immediately

  • अपग्रेड करते समय, ग्राहक से दो योजनाओं की राशि के बीच का अंतर तुरंत वसूला जाता है।
  • उदाहरण के लिए, यदि वर्तमान योजना 30 Dollars है और ग्राहक 80 Dollars योजना में अपग्रेड करता है, तो उन्हें तुरंत 50 डॉलर चार्ज किया जाता है।
  • डाउनग्रेड करते समय, वर्तमान योजना से अप्रयुक्त राशि आंतरिक क्रेडिट के रूप में जोड़ी जाती है और भविष्य की सदस्यता नवीनीकरणों पर स्वचालित रूप से लागू होती है।
  • उदाहरण के लिए, यदि वर्तमान योजना 50 Dollars है और ग्राहक 20 Dollars योजना पर स्विच करता है, तो शेष $30 को क्रेडिट किया जाता है और अगले बिलिंग चक्र के लिए उपयोग किया जाता है।

व्यवहार

  • जब आप इस API को कॉल करते हैं, तो Dodo Payments आपके चुने हुए प्रोरैशन विकल्प के आधार पर तुरंत एक चार्ज शुरू करता है
  • यदि योजना परिवर्तन डाउनग्रेड है और आप prorated_immediately का उपयोग करते हैं, तो क्रेडिट स्वचालित रूप से गिनती जाती है और Subscription के क्रेडिट बैलेंस में जोड़ी जाती है। ये क्रेडिट उस Subscription तक ही सीमित होते हैं और केवल उसी Subscription के भविष्य के आवर्ती भुगतानों को ऑफसेट करने के लिए उपयोग होंगे
  • full_immediately विकल्प क्रेडिट गणनाओं को बायपास करता है और नए योजना राशि का पूरा भुगतान वसूलता है
अपना प्रोरैशन विकल्प सावधानी से चुनें: अप्रयुक्त समय को ध्यान में रखते हुए निष्पक्ष बिलिंग के लिए prorated_immediately का उपयोग करें, या जब आप वर्तमान बिलिंग चक्र की परवाह किए बिना पूरा नया योजना राशि वसूलना चाहते हों तो full_immediately का उपयोग करें।

शुल्क प्रसंस्करण

  • योजना परिवर्तन पर शुरू किया गया तत्काल शुल्क आमतौर पर 2 मिनट से कम समय में प्रसंस्कृत होता है
  • यदि यह तत्काल शुल्क किसी भी कारण से विफल होता है, तो सदस्यता स्वचालित रूप से होल्ड पर रखी जाती है जब तक कि समस्या का समाधान नहीं हो जाता

ऑन-डिमांड सदस्यताएँ

On-demand subscriptions आपको ग्राहकों से लचीले ढंग से शुल्क लेने देती हैं, सिर्फ एक निश्चित समय-सारिणी पर नहीं। यह सुविधा सभी खातों के लिए उपलब्ध है।
एक ऑन-डिमांड सदस्यता बनाने के लिए: On-demand subscription बनाने के लिए, POST /subscriptions API endpoint का उपयोग करें और अपने रिक्वेस्ट बॉडी में on_demand फील्ड शामिल करें। यह आपको तत्काल चार्ज के बिना एक भुगतान विधि को अधिकृत करने या एक कस्टम प्रारंभिक कीमत सेट करने की अनुमति देता है। एक ऑन-डिमांड सदस्यता को चार्ज करने के लिए: अगले चार्ज के लिए, POST /subscriptions/charge एंडपॉइंट का उपयोग करें और उस लेनदेन के लिए ग्राहक से चार्ज करने के लिए राशि निर्दिष्ट करें।
पूर्ण, चरण-दर-चरण मार्गदर्शिका — जिसमें रिक्वेस्ट/रिस्पांस उदाहरण, सुरक्षित रीट्राई नीतियाँ, और webhook हैंडलिंग शामिल है — के लिए On-Demand Subscriptions Guide देखें।