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 deffunctions हैं। - Checkout Sessions: Python SDK का उपयोग करने वाला पहले से configured checkout endpoint।
- Webhook Handling: ऐसा webhook endpoint जो SDK की
unwrapmethod से प्रत्येक 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 या बाद का संस्करण, जिसकी
dodopaymentsSDK को आवश्यकता है। 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
4
Get API Credentials
Dodo Payments पर sign up करें, फिर dashboard से अपने credentials प्राप्त करें:
- API Key: Dashboard → Developer → API Keys के अंतर्गत key बनाएँ।
- Webhook Key: Dashboard → Developer → Webhooks के अंतर्गत endpoint जोड़ें, फिर उसका signing secret copy करें। Endpoint URL public होना चाहिए और HTTPS का उपयोग करना चाहिए। अपनी machine पर events प्राप्त करने के लिए स्थानीय रूप से Webhooks का परीक्षण देखें।
5
Configure Environment Variables
Example file को copy करके root directory में Values को अपने Dodo Payments credentials पर सेट करें:सभी चार variables आवश्यक हैं।
.env file बनाएँ:.env
app/core/config.py उन्हें pydantic-settings के साथ load करता है और इनमें से कोई missing या empty होने पर app start नहीं होता। DODO_PAYMENTS_RETURN_URL वह URL है जहाँ payment के बाद checkout customer को भेजता है।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
Swagger UI
/api/checkout/, /api/webhook/ और /api/customer-portal/ endpoints को सूचीबद्ध करता है, जो test करने के लिए तैयार हैं।http://localhost:8000, pricing page प्रदान करता है।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
ये examplesapp/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 Paymentslocalhost तक नहीं पहुँच सकता। Local development के लिए अपने local server को expose करने हेतु ngrok जैसे tool का उपयोग करें:
/api/webhook/ जोड़कर उसे अपने Dodo Payments Dashboard में endpoint के रूप में जोड़ें:
.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
Troubleshooting
Import errors or missing modules
Import errors or missing modules
सुनिश्चित करें कि आपका virtual environment activated है और dependencies installed हैं:
Server fails to start with Directory 'app/static' does not exist
Server fails to start with Directory 'app/static' does not exist
app/main.py static files को app/static से serve करता है, लेकिन repository में वह directory शामिल नहीं है। इसे mkdir app/static से बनाएं, फिर server दोबारा start करें।Checkout session creation fails
Checkout session creation fails
इन सामान्य कारणों की जाँच करें:
- Product ID आपके Dodo Payments dashboard में मौजूद नहीं है।
.envमें API key याDODO_PAYMENTS_ENVIRONMENTगलत है। Test mode key केवलtest_modeके साथ काम करती है।
400 response में लौटाता है। विस्तृत error messages के लिए FastAPI logs देखें।Webhooks not receiving events
Webhooks not receiving events
Local testing के लिए अपने server को expose करने हेतु ngrok का उपयोग करें:अपने Dodo dashboard में ngrok URL के बाद
/api/webhook/ वाला endpoint जोड़ें, जिसमें trailing slash भी शामिल हो। उस endpoint का signing secret अपनी .env file में DODO_PAYMENTS_WEBHOOK_KEY में copy करें।Webhook signature verification fails
Webhook signature verification fails
- सुनिश्चित करें कि
.envमेंDODO_PAYMENTS_WEBHOOK_KEYendpoint के signing secret से match करता है। - Signature को raw request body के विरुद्ध verify करें, JSON के रूप में parse करने से पहले।
- सभी तीन
webhook-id,webhook-timestampऔरwebhook-signatureheaders को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 के लिए सहायता चाहिए तो:- Discord community में प्रश्न पूछें।
- GitHub repository में issues report करें और updates follow करें।
- Support team को email करें।