Skip to main content

GitHub Repository

FastAPI और Dodo Payments boilerplate के लिए source code।

अवलोकन

FastAPI boilerplate एक Python backend है, जिसमें Dodo Payments पहले से कनेक्टेड है। इसमें checkout sessions और Customer Portal sessions बनाने वाले endpoints, signatures सत्यापित करने वाला webhook endpoint और Jinja2 templates से render किया गया pricing page है।
यह boilerplate async route handlers के साथ FastAPI, validation और settings के लिए Pydantic और dodopayments Python SDK का उपयोग करता है। Handlers synchronous DodoPayments client को call करते हैं। event loop को block होने से बचाने के लिए AsyncDodoPayments पर switch करें और इसके calls को await करें।

विशेषताएँ

Boilerplate में शामिल हैं:
  • त्वरित सेटअप: clone से running server तक लगभग पाँच मिनट में पहुँचें।
  • Async Handlers: Route handlers FastAPI async def functions हैं।
  • Checkout Sessions: Python SDK का उपयोग करने वाला पहले से configured checkout endpoint।
  • Webhook Handling: ऐसा webhook endpoint जो SDK की unwrap method से प्रत्येक signature सत्यापित करता है।
  • Customer Portal: Customer Portal sessions बनाने वाला endpoint।
  • Type Safety: Pydantic models request bodies को validate करते हैं और code type hints का उपयोग करता है।
  • Environment Configuration: pydantic-settings, .env से configuration load और validate करता है।

आवश्यकताएँ

शुरू करने से पहले आपके पास ये होने चाहिए:
  • Python 3.9 या बाद का संस्करण, जिसकी dodopayments SDK को आवश्यकता है। Python 3.11 या बाद का संस्करण recommended है।
  • Package management के लिए pip या uv।
  • Dodo Payments account, जिससे dashboard में API key और webhook signing secret बनाया जा सके।

त्वरित शुरुआत

1

Clone the Repository

2

Create Virtual Environment

एक isolated Python environment सेट करें:
या तेज़ dependency management के लिए uv का उपयोग करें:
3

Install Dependencies

या uv के साथ:
4

Get API Credentials

Dodo Payments पर sign up करें, फिर dashboard से अपने credentials प्राप्त करें:
Sidebar में Live Mode switch बंद होने पर दोनों बनाएँ। Test mode key केवल DODO_PAYMENTS_ENVIRONMENT=test_mode के साथ काम करती है और test mode payments वास्तविक धन को transfer नहीं करते।
5

Configure Environment Variables

Example file को copy करके root directory में .env file बनाएँ:
Values को अपने Dodo Payments credentials पर सेट करें:
.env
सभी चार variables आवश्यक हैं। app/core/config.py उन्हें pydantic-settings के साथ load करता है और इनमें से कोई missing या empty होने पर app start नहीं होता। DODO_PAYMENTS_RETURN_URL वह URL है जहाँ payment के बाद checkout customer को भेजता है।
अपनी .env file को version control में commit न करें। Repository की .gitignore इसे पहले से exclude करती है।
6

Add Your Products

app/lib/products.py में sample products को अपने products से replace करें। प्रत्येक product_id को dashboard के Products के अंतर्गत मौजूद product के ID पर सेट करें। Pricing page इन products को display करता है।
7

Run the Development Server

Interactive API documentation देखने के लिए http://localhost:8000/docs खोलें।
Swagger UI /api/checkout/, /api/webhook/ और /api/customer-portal/ endpoints को सूचीबद्ध करता है, जो test करने के लिए तैयार हैं।
रूट URL, http://localhost:8000, pricing page प्रदान करता है।
app/main.py, INLINE_CODE_PLACEHOLDER_fd4869eef4784ce_END को कॉल करता है, जिसे Starlette 1.x अब स्वीकार नहीं करता। इसलिए fresh install पर pricing page 500 error लौटाता है। इसे ठीक करने के लिए, कॉल को templates.TemplateResponse(request, "index.html", {"products": products}) में बदलें।

Project Structure

API Endpoints

app/main.py प्रत्येक router को /api prefix के अंतर्गत mount करता है: हर path का अंत slash से होता है। FastAPI बिना slash वाले path के request का जवाब 307 redirect के साथ देता है, इसलिए exact path का उपयोग करें, खासकर अपने webhook URL में।

Code Examples

ये examples app/api/ में मौजूद files से संक्षिप्त किए गए हैं।

Checkout Session बनाना

app/api/checkout.py checkout session बनाता है और उसका checkout_url लौटाता है। Request body में एक product_id, एक optional quantity, और name तथा email वाला एक optional customer object होता है:

Webhooks संभालना

app/api/webhook.py SDK की unwrap method से signature सत्यापित करता है, फिर event type के आधार पर branch करता है:

Customer Portal Integration

app/api/portal.py किसी customer ID के लिए Customer Portal session बनाता है और portal link को url के रूप में लौटाता है:
app/templates/index.html में pricing page इस endpoint को एक hardcoded customer ID (cus_001) और checkout endpoint को एक hardcoded name और email भेजता है। इन्हें signed-in user की values से बदलें।

Webhook Events

app/api/webhook.py में handler इन events के आधार पर branch करता है: किसी अन्य event को संभालने के लिए उसके type के लिए एक branch जोड़ें, जैसे सफलतापूर्वक process किए गए refund के लिए refund.succeeded। प्रत्येक event type के लिए Webhook Event Guide देखें। इन कार्यों के लिए webhook handler के अंदर अपना business logic जोड़ें:
  • अपने database में user permissions अपडेट करें
  • confirmation emails भेजें
  • digital products का access provision करें
  • analytics और metrics track करें

Webhooks का स्थानीय परीक्षण

Dodo Payments localhost तक नहीं पहुँच सकता। Local development के लिए अपने local server को expose करने हेतु ngrok जैसे tool का उपयोग करें:
ngrok HTTPS URL के बाद /api/webhook/ जोड़कर उसे अपने Dodo Payments Dashboard में endpoint के रूप में जोड़ें:
Endpoint का signing secret .env में DODO_PAYMENTS_WEBHOOK_KEY में copy करें, फिर server restart करें। App .env को केवल startup के समय पढ़ता है।

Deployment

Docker

Repository में Dockerfile शामिल नहीं है। App को container में चलाने के लिए repository root में यह Dockerfile जोड़ें:
COPY . . build context की हर file को copy करता है, जिसमें .env भी शामिल है। अपनी keys को image से बाहर रखने के लिए ऐसी .dockerignore file जोड़ें जिसमें .env सूचीबद्ध हो। फिर image build करें और अपनी environment file के साथ चलाएँ:

Production Considerations

Production में deploy करने से पहले:
  • DODO_PAYMENTS_ENVIRONMENT को live_mode पर switch करें।
  • Dashboard से live mode API key का उपयोग करें।
  • अपने production domain के लिए webhook endpoint जोड़ें और DODO_PAYMENTS_WEBHOOK_KEY को उसके signing secret पर set करें।
  • DODO_PAYMENTS_RETURN_URL को अपने production URL पर set करें।
  • सभी endpoints के लिए HTTPS enable करें।

Troubleshooting

सुनिश्चित करें कि आपका virtual environment activated है और dependencies installed हैं:
app/main.py static files को app/static से serve करता है, लेकिन repository में वह directory शामिल नहीं है। इसे mkdir app/static से बनाएं, फिर server दोबारा start करें।
इन सामान्य कारणों की जाँच करें:
  • Product ID आपके Dodo Payments dashboard में मौजूद नहीं है।
  • .env में API key या DODO_PAYMENTS_ENVIRONMENT गलत है। Test mode key केवल test_mode के साथ काम करती है।
Endpoint SDK error को 400 response में लौटाता है। विस्तृत error messages के लिए FastAPI logs देखें।
Local testing के लिए अपने server को expose करने हेतु ngrok का उपयोग करें:
अपने Dodo dashboard में ngrok URL के बाद /api/webhook/ वाला endpoint जोड़ें, जिसमें trailing slash भी शामिल हो। उस endpoint का signing secret अपनी .env file में DODO_PAYMENTS_WEBHOOK_KEY में copy करें।
  • सुनिश्चित करें कि .env में DODO_PAYMENTS_WEBHOOK_KEY endpoint के signing secret से match करता है।
  • Signature को raw request body के विरुद्ध verify करें, JSON के रूप में parse करने से पहले।
  • सभी तीन webhook-id, webhook-timestamp और webhook-signature headers को client.webhooks.unwrap() में pass करें। Standard Webhooks signature केवल body को नहीं, बल्कि id.timestamp.body को cover करता है।

Learn More

Python SDK

async support के साथ पूर्ण Python SDK documentation

Webhooks Documentation

सभी webhook events और best practices के बारे में जानें

Checkout Sessions

checkout session configuration का विस्तृत परिचय

API Reference

पूर्ण Dodo Payments API documentation

Support

Boilerplate के लिए सहायता चाहिए तो:
अंतिम संशोधन 26 सितंबर 2026