मुख्य सामग्री पर जाएं
इस ट्यूटोरियल में, आप Dodo Payments ऐड-ऑन का उपयोग करके सीट-आधारित मूल्य निर्धारण को लागू करना सीखेंगे। हम अतिरिक्त सीटों के लिए ऐड-ऑन के साथ एक सदस्यता उत्पाद बनाएंगे और आपको कस्टम ऐड-ऑन मात्रा के साथ भुगतान लिंक उत्पन्न करना दिखाएंगे।
यह ट्यूटोरियल Node.js/Express एप्लिकेशन के लिए नमूना कार्यान्वयन कोड प्रदान करता है। आप इस कोड को अपने विशिष्ट फ्रेमवर्क (Next.js, React, Vue, आदि) के लिए संशोधित कर सकते हैं और अपनी एप्लिकेशन की आवश्यकताओं के अनुसार उपयोगकर्ता इंटरफ़ेस को अनुकूलित कर सकते हैं।
इस ट्यूटोरियल के अंत तक, आप जानेंगे कि:
  • सीट-आधारित मूल्य निर्धारण के साथ सदस्यता उत्पाद कैसे बनाएं
  • अतिरिक्त सीटों के लिए ऐड-ऑन कैसे सेट करें
  • कस्टम ऐड-ऑन मात्रा के साथ भुगतान लिंक कैसे उत्पन्न करें
  • गतिशील सीट गिनती के साथ चेकआउट सत्र कैसे संभालें

हम क्या बना रहे हैं

आइए एक सीट-आधारित मूल्य निर्धारण मॉडल बनाते हैं:
  • बेस प्लान: 5 टीम सदस्यों के लिए $49/माह
  • सीट ऐड-ऑन: प्रति अतिरिक्त सीट $2/माह
  • भुगतान लिंक: कस्टम सीट मात्रा के साथ गतिशील चेकआउट
शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:
  • एक Dodo Payments खाता
  • TypeScript/Node.js की बुनियादी जानकारी

चरण 1: अपना सीट ऐड-ऑन बनाएं

अब हमें एक ऐड-ऑन बनाने की आवश्यकता है जो अतिरिक्त सीटों का प्रतिनिधित्व करता है। यह ऐड-ऑन हमारे बेस सदस्यता से जुड़ा होगा और ग्राहकों को अतिरिक्त सीटें खरीदने की अनुमति देगा।
Creating base subscription product
हम क्या बना रहे हैं: एक ऐसा एड-ऑन जो $2/माह प्रति सीट की लागत पर किसी भी बेस सब्सक्रिप्शन में जोड़ा जा सकता है।
1

Navigate to Add-Ons

  1. अपने Dodo Payments डैशबोर्ड में, Products सेक्शन में बने रहें
  2. Add-Ons टैब पर क्लिक करें
  3. Create Add-On पर क्लिक करें
यह एड-ऑन निर्माण फ़ॉर्म खोलेगा।
2

Enter add-on details

हमारे सीट एड-ऑन के लिए इन मानों को भरें:Add-On Name: Additional Team SeatDescription: Add extra team members to your workspace with full access to all featuresPrice: Enter → 2.00मुद्रा: आपकी बेस सदस्यता मुद्रा से मेल खाना चाहिएकर श्रेणी: अपने उत्पाद के लिए उपयुक्त श्रेणी चुनें।
3

Save your add-on

  1. अपनी सभी सेटिंग्स की समीक्षा करें:
    • Name: Additional Team Seat
    • Price: $2.00/month
  2. Create Add-On पर क्लिक करें
एड-ऑन बन गया! आपका सीट एड-ऑन अब सब्सक्रिप्शन में जोड़ने के लिए उपलब्ध है।

चरण 2: अपना बेस सदस्यता उत्पाद बनाएं

हम 5 टीम सदस्यों के साथ एक बेस सदस्यता उत्पाद बनाने से शुरू करेंगे। यह हमारे सीट-आधारित मूल्य निर्धारण मॉडल की नींव होगी।
Creating base subscription product
1

Navigate to Products

  1. अपने Dodo Payments डैशबोर्ड में लॉग इन करें
  2. बाएँ साइडबार में Products पर क्लिक करें
  3. Create Product बटन पर क्लिक करें
  4. प्रोडक्ट टाइप के रूप में Subscription चुनें
आपको एक फ़ॉर्म दिखाई देगा जहाँ हम अपनी बेस सब्सक्रिप्शन को कॉन्फ़िगर करेंगे।
2

Fill in the subscription details

अब हम अपने बेस प्लान के विशिष्ट विवरण भरेंगे:Product Name: MotionDescription: Where your team's documentation lives.Recurring Price: Enter → 49.00Billing Cycle: Select → MonthlyCurrency: अपनी पसंदीदा मुद्रा चुनें (उदा., USD)

चरण 3: सदस्यता से ऐड-ऑन को कनेक्ट करें

अब हमें अपने सीट ऐड-ऑन को बेस सदस्यता से जोड़ने की आवश्यकता है ताकि ग्राहक चेकआउट के दौरान अतिरिक्त सीटें खरीद सकें।
1

Attach the seat add-on

Attaching add-on to subscription
  1. ऐड-ऑन अनुभाग में स्क्रॉल करें
  2. ऐड-ऑन जोड़ें पर क्लिक करें
  3. ड्रॉपडाउन से अपने सीट ऐड-ऑन का चयन करें
  4. पुष्टि करें कि यह आपकी सदस्यता कॉन्फ़िगरेशन में दिखाई दे रहा है
2

Save subscription changes

  1. अपनी पूरी सब्सक्रिप्शन सेटअप की समीक्षा करें:
    • बेस प्लान: $49/माह के लिए 5 सीटें
    • एड-ऑन: अतिरिक्त सीट के लिए $2/माह
    • मुफ्त परीक्षण: 14 दिन
  2. Save Changes पर क्लिक करें
सीट-आधारित मूल्य निर्धारण कॉन्फ़िगर हो गया है! अब ग्राहक आपका बेस प्लान खरीद सकते हैं और जरूरत के अनुसार अतिरिक्त सीटें जोड़ सकते हैं।

चरण 4: कस्टम ऐड-ऑन मात्रा के साथ भुगतान लिंक उत्पन्न करें

अब आइए एक Express.js एप्लिकेशन बनाते हैं जो कस्टम ऐड-ऑन मात्रा के साथ भुगतान लिंक उत्पन्न करता है। यही वह जगह है जहां सीट-आधारित मूल्य निर्धारण की असली शक्ति आती है - आप किसी भी संख्या में अतिरिक्त सीटों के साथ गतिशील रूप से चेकआउट सत्र बना सकते हैं।
1

Set up your project

एक नया Node.js प्रोजेक्ट बनाएँ और आवश्यक डिपेंडेंसी इंस्टॉल करें:
mkdir seat-based-pricing
cd seat-based-pricing
npm init -y
npm install dodopayments express dotenv
npm install -D @types/node @types/express typescript ts-node
एक tsconfig.json फ़ाइल बनाएँ:
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}
2

Create your environment file

अपने Dodo Payments API key के साथ एक .env फ़ाइल बनाएँ:
DODO_PAYMENTS_API_KEY=your_actual_dodo_api_key_here
अपने API key को संस्करण नियंत्रण में कभी कमिट न करें। .env को अपनी .gitignore फ़ाइल में जोड़ें।
3

Implement the checkout session creation

निम्नलिखित कोड के साथ एक src/server.ts फ़ाइल बनाएँ:
// Add this new endpoint for dynamic seat quantities
import 'dotenv/config';
import DodoPayments from 'dodopayments';
import express, { Request, Response } from 'express';

const app = express();

// Initialize the Dodo Payments client
const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode'
});

async function createCheckoutSession(seatCount: number) {
  try {
    const session = await client.checkoutSessions.create({
      // Products to sell - use IDs from your Dodo Payments dashboard
      product_cart: [
        {
          product_id: 'pdt_7Rl9OWT2Mz4wwUTKz74iZ', // Replace with your actual product ID
          quantity: 1,
          addons: [
            {
              addon_id: 'adn_eKQbNakKrivDpaxmI8wKI', // Replace with your actual addon ID
              quantity: seatCount
            }
          ]
        }
      ],
      
      // Pre-fill customer information to reduce friction
      customer: {
        email: 'steve@example.com',
        name: 'Steve Irwin',
      },
      // Where to redirect after successful payment
      return_url: 'https://example.com/checkout/success',
    });

    // Redirect your customer to this URL to complete payment
    console.log('Checkout URL:', session.checkout_url);
    console.log('Session ID:', session.session_id);
    
    return session;
    
  } catch (error) {
    console.error('Failed to create checkout session:', error);
    throw error;
  }
}

// Example usage in an Express.js route
app.post('/create-checkout/:seatCount', async (req: Request, res: Response) => {
  try {
    const seatCount = parseInt(req.params.seatCount);
    const session = await createCheckoutSession(seatCount);
    res.json({ checkout_url: session.checkout_url });
  } catch (error) {
    res.status(500).json({ error: 'Failed to create checkout session' });
  }
});

// Add this line after your other middleware
app.use(express.static('public'));

// Add this route to serve the demo page
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/../public/index.html');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
4

Add a simple web interface

सरल परीक्षण के लिए एक public/index.html फ़ाइल बनाएँ:
<!DOCTYPE html>
<html>
<head>
    <title>Seat-Based Pricing Demo</title>
    <style>
        body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; }
        .form-group { margin: 20px 0; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; }
        button { background: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; }
        button:hover { background: #0056b3; }
        .result { margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 4px; }
    </style>
</head>
<body>
    <h1>Seat-Based Pricing Demo</h1>
    <p>Generate checkout links with custom seat quantities:</p>
    
    <div class="form-group">
        <label for="seatCount">Number of Additional Seats:</label>
        <input type="number" id="seatCount" value="3" min="0" max="50">
    </div>
    
    <button onclick="createCheckout()">Generate Checkout Link</button>
    
    <div id="result" class="result" style="display: none;">
        <h3>Checkout Link Generated!</h3>
        <p><strong>Seat Count:</strong> <span id="seatCountDisplay"></span></p>
        <p><strong>Total Cost:</strong> $<span id="totalCost"></span>/month</p>
        <p><strong>Checkout URL:</strong></p>
        <a id="checkoutUrl" href="#" target="_blank">Click here to checkout</a>
    </div>

    <script>
        async function createCheckout() {
            const seatCount = document.getElementById('seatCount').value;
            
            try {
                const response = await fetch(`/create-checkout/${seatCount}`, {
                    method: 'POST'
                });
                
                const data = await response.json();
                
                if (response.ok) {
                    document.getElementById('seatCountDisplay').textContent = seatCount;
                    document.getElementById('totalCost').textContent = data.total_cost;
                    document.getElementById('checkoutUrl').href = data.checkout_url;
                    document.getElementById('result').style.display = 'block';
                } else {
                    alert('Error: ' + data.error);
                }
            } catch (error) {
                alert('Error creating checkout session');
            }
        }
    </script>
</body>
</html>
वेब इंटरफ़ेस बन गया है! अब आपके पास विभिन्न सीट मात्रा का परीक्षण करने के लिए एक सरल UI है।
5

Serve static files

HTML फ़ाइल को सर्व करने के लिए इसे अपने src/server.ts में जोड़ें:
// Add this line after your other middleware
app.use(express.static('public'));

// Add this route to serve the demo page
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/../public/index.html');
});
स्टैटिक फ़ाइलें कॉन्फ़िगर हो गई हैं! अपना डेमो इंटरफ़ेस देखने के लिए http://localhost:3000 पर जाएँ।

चरण 5: अपने कार्यान्वयन का परीक्षण करें

आइए अपने सीट-आधारित मूल्य निर्धारण कार्यान्वयन का परीक्षण करें ताकि यह सुनिश्चित हो सके कि सब कुछ सही ढंग से काम कर रहा है।
1

Start your server

  1. सुनिश्चित करें कि आपकी .env फ़ाइल में सही API key है
  2. अपने कोड में उत्पाद और एड-ऑन आईडी को Dodo Payments डैशबोर्ड से वास्तविक मानों से अपडेट करें
  3. अपना सर्वर शुरू करें:
npm run dev
आपका सर्वर सफलतापूर्वक शुरू हो जाना चाहिए और “Server running on http://localhost:3000” दिखाना चाहिए
2

Test the web interface

Creating base subscription product
  1. अपने ब्राउज़र में http://localhost:3000 पर जाएँ
  2. आपको सीट-आधारित मूल्य निर्धारण डेमो इंटरफ़ेस दिखाई देना चाहिए
  3. विभिन्न सीट मात्राओं (0, 3, 10, आदि) को आज़माएँ
  4. प्रत्येक मात्रा के लिए “Generate Checkout Link” पर क्लिक करें
  5. सत्यापित करें कि चेकआउट URL सही तरीके से जनरेट हो रहे हैं
3

Test a checkout session

  1. 3 अतिरिक्त सीटों के साथ एक चेकआउट लिंक जनरेट करें
  2. चेकआउट URL पर क्लिक करके Dodo Payments चेकआउट खोलें
  3. सत्यापित करें कि चेकआउट में यह दिखाया जा रहा है:
    • बेस प्लान: $49/माह
    • अतिरिक्त सीटें: 3 × 2 डॉलर = $6/माह
  4. परीक्षण खरीद को पूरा करें
चेकआउट को सही मूल्य निर्धारण ब्रेकडाउन दिखाना चाहिए और आपको खरीदारी पूरी करने की अनुमति देनी चाहिए।
4

Listen for webhooks and update your DB

अपने डेटाबेस को सब्सक्रिप्शन और सीट परिवर्तनों के साथ सिंक में बनाए रखने के लिए, आपको Dodo Payments से वेबहुक इवेंट्स को सुनने की आवश्यकता है। वेबहुक आपके बैकएंड को सूचित करते हैं जब कोई ग्राहक चेकआउट पूरा करता है, अपनी सब्सक्रिप्शन अपडेट करता है, या सीट काउंट बदलता है।वेबहुक एंडपॉइंट सेट करने और घटनाओं को संभालने के लिए चरण-दर-चरण निर्देशों के लिए आधिकारिक Dodo Payments वेबहुक गाइड का पालन करें:

Dodo Payments Webhooks Documentation

सब्सक्रिप्शन और सीट प्रबंधन के लिए वेबहुक इवेंट्स को सुरक्षित रूप से प्राप्त और संसाधित करना सीखें।

समस्या निवारण

सामान्य समस्याएँ और उनके समाधान:
संभावित कारण:
  • अमान्य उत्पाद ID या एड-ऑन ID
  • API key के पास पर्याप्त अनुमतियाँ नहीं हैं
  • एड-ऑन सब्सक्रिप्शन के साथ ठीक से संबद्ध नहीं किया गया है
  • नेटवर्क कनेक्टिविटी की समस्या
समाधान:
  1. सत्यापित करें कि उत्पाद और एड-ऑन ID आपके Dodo Payments डैशबोर्ड में मौजूद हैं
  2. जांचें कि एड-ऑन ठीक से सब्सक्रिप्शन से जुड़ा हुआ है
  3. सुनिश्चित करें कि API key के पास चेकआउट सेशन बनाने की अनुमतियाँ हैं
  4. एक साधारण GET अनुरोध के साथ API कनेक्टिविटी का परीक्षण करें

बधाई! आपने सीट-आधारित मूल्य निर्धारण लागू किया है

आपने Dodo Payments के साथ एक सीट-आधारित मूल्य निर्धारण प्रणाली सफलतापूर्वक बनाई है! आपने जो हासिल किया है वह यहाँ है:

Base Subscription

$49/माह पर 5 शामिल सीटों के साथ एक सब्सक्रिप्शन उत्पाद बनाया गया

Seat Add-ons

अतिरिक्त सीटों के लिए $2/माह प्रति सीट पर एड-ऑन कॉन्फ़िगर किए गए

Checkout

कस्टम सीट मात्राओं के साथ चेकआउट सत्र जनरेट करने वाली एक API बनाई गई

Web Interface

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