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

GitHub Repository

पूरा FastAPI + Dodo Payments बॉयलरप्लेट

अवलोकन

FastAPI बॉयलरप्लेट Dodo Payments को आपके Python बैकएंड के साथ एकीकृत करने के लिए एक उत्पादन-तैयार प्रारंभिक बिंदु प्रदान करता है। इस टेम्पलेट में चेकआउट सत्र प्रबंधन, वेबहुक सत्यापन, ग्राहक पोर्टल एकीकरण, और भुगतान स्वीकार करने में तेजी लाने के लिए असिंक्रोनस API पैटर्न शामिल हैं।
यह बॉयलरप्लेट FastAPI के async/await पैटर्न, Pydantic के लिए मान्यता, और dodopayments Python SDK का उपयोग करता है ताकि API एकीकरण सुचारू हो सके।

विशेषताएँ

  • त्वरित सेटअप - 5 मिनट से कम समय में शुरू करें
  • असिंक्रोनस समर्थन - FastAPI के मूल async/await पैटर्न के साथ बनाया गया
  • चेकआउट सत्र - Python SDK का उपयोग करके पूर्व-निर्धारित चेकआउट प्रवाह
  • वेबहुक प्रबंधन - हस्ताक्षर सत्यापन के साथ सुरक्षित वेबहुक एंडपॉइंट
  • ग्राहक पोर्टल - आसान ग्राहक पोर्टल सत्र निर्माण
  • प्रकार सुरक्षा - पूर्ण Pydantic मान्यता और प्रकार संकेत
  • पर्यावरण कॉन्फ़िगरेशन - उपयोग के लिए तैयार पर्यावरण चर सेटअप

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

शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:
  • Python 3.9+ (अनुशंसित: Python 3.11+)
  • pip या uv पैकेज प्रबंधन के लिए
  • Dodo Payments खाता (API और वेबहुक कुंजी तक पहुँचने के लिए डैशबोर्ड से)

त्वरित प्रारंभ

1

गिटहब रिपॉजिटरी क्लोन करें

git clone https://github.com/dodopayments/fastapi-boilerplate.git
cd fastapi-boilerplate
2

वर्चुअल वातावरण बनाएँ

एक अलग Python वातावरण सेट करें:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
या तेज़ निर्भरता प्रबंधन के लिए uv का उपयोग करें:
uv venv
source .venv/bin/activate
3

निर्भरता स्थापित करें

pip install -r requirements.txt
या uv के साथ:
uv pip install -r requirements.txt
4

API क्रेडेंशियल प्राप्त करें

Dodo Payments पर साइन अप करें और डैशबोर्ड से अपने क्रेडेंशियल प्राप्त करें:
विकास करते समय सुनिश्चित करें कि आप परीक्षण मोड में हैं!
5

पर्यावरण चर कॉन्फ़िगर करें

रूट निर्देशिका में एक .env फ़ाइल बनाएँ:
cp .env.example .env
अपने Dodo Payments क्रेडेंशियल के साथ मान अपडेट करें:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here
DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_signing_key_here
DODO_PAYMENTS_ENVIRONMENT=test_mode
कभी भी अपने .env फ़ाइल को संस्करण नियंत्रण में कमिट न करें। यह पहले से ही .gitignore में शामिल है।
6

विकास सर्वर चलाएँ

uvicorn main:app --reload
इंटरैक्टिव API दस्तावेज़ देखने के लिए http://localhost:8000/docs खोलें!
आपको FastAPI का Swagger UI सभी उपलब्ध एंडपॉइंट्स के साथ परीक्षण के लिए तैयार दिखाई देना चाहिए।

परियोजना संरचना

fastapi-boilerplate/
├── main.py                 # FastAPI application entry point
├── routers/
│   ├── checkout.py         # Checkout session endpoints
│   ├── webhook.py          # Webhook handler endpoint
│   └── customer_portal.py  # Customer portal endpoints
├── config.py               # Environment configuration
├── requirements.txt        # Python dependencies
├── .env.example            # Environment template
└── README.md

API एंडपॉइंट्स

बॉयलरप्लेट में निम्नलिखित पूर्व-निर्धारित एंडपॉइंट शामिल हैं:
एंडपॉइंटविधिविवरण
/checkoutPOSTएक नया चेकआउट सत्र बनाएँ
/webhookPOSTDodo Payments वेबहुक को संभालें
/customer-portalPOSTग्राहक पोर्टल URL उत्पन्न करें

कोड उदाहरण

चेकआउट सत्र बनाना

from fastapi import APIRouter, HTTPException
from dodopayments import AsyncDodoPayments
from pydantic import BaseModel
from config import settings

router = APIRouter()
dodo = AsyncDodoPayments(
    bearer_token=settings.DODO_PAYMENTS_API_KEY,
    environment=settings.DODO_PAYMENTS_ENVIRONMENT
)

class CheckoutRequest(BaseModel):
    product_id: str
    quantity: int = 1
    customer_email: str | None = None
    customer_name: str | None = None

@router.post("/checkout")
async def create_checkout(request: CheckoutRequest):
    try:
        session = await dodo.checkout_sessions.create(
            product_cart=[{
                "product_id": request.product_id,
                "quantity": request.quantity
            }],
            customer={
                "email": request.customer_email,
                "name": request.customer_name
            } if request.customer_email else None,
            return_url="http://localhost:8000/success"
        )
        return {"checkout_url": session.url, "session_id": session.session_id}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

वेबहुक को संभालना

from fastapi import APIRouter, Request, HTTPException
import hmac
import hashlib
from config import settings

router = APIRouter()

def verify_webhook_signature(payload: bytes, signature: str) -> bool:
    expected = hmac.new(
        settings.DODO_PAYMENTS_WEBHOOK_KEY.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

@router.post("/webhook")
async def handle_webhook(request: Request):
    payload = await request.body()
    signature = request.headers.get("webhook-signature", "")
    
    if not verify_webhook_signature(payload, signature):
        raise HTTPException(status_code=401, detail="Invalid signature")
    
    event = await request.json()
    event_type = event.get("type")
    
    match event_type:
        case "payment.succeeded":
            # Handle successful payment
            payment_id = event["data"]["payment_id"]
            print(f"Payment succeeded: {payment_id}")
            
        case "subscription.active":
            # Handle subscription activation
            subscription_id = event["data"]["subscription_id"]
            print(f"Subscription activated: {subscription_id}")
            
        case "refund.succeeded":
            # Handle refund
            refund_id = event["data"]["refund_id"]
            print(f"Refund processed: {refund_id}")
    
    return {"status": "received"}

ग्राहक पोर्टल एकीकरण

from fastapi import APIRouter, HTTPException
from dodopayments import AsyncDodoPayments
from pydantic import BaseModel
from config import settings

router = APIRouter()
dodo = AsyncDodoPayments(
    bearer_token=settings.DODO_PAYMENTS_API_KEY,
    environment=settings.DODO_PAYMENTS_ENVIRONMENT
)

class PortalRequest(BaseModel):
    customer_id: str

@router.post("/customer-portal")
async def create_portal_session(request: PortalRequest):
    try:
        session = await dodo.customers.create_customer_portal(
            customer_id=request.customer_id
        )
        return {"portal_url": session.url}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

वेबहुक घटनाएँ

बॉयलरप्लेट सामान्य वेबहुक घटनाओं को संभालने का प्रदर्शन करता है:
घटनाविवरण
payment.succeededभुगतान सफलतापूर्वक पूरा हुआ
payment.failedभुगतान प्रयास विफल हुआ
subscription.activeसदस्यता अब सक्रिय है
subscription.cancelledसदस्यता रद्द कर दी गई
refund.succeededधनवापसी सफलतापूर्वक संसाधित की गई
अपने व्यवसाय की लॉजिक को वेबहुक हैंडलर के अंदर जोड़ें:
  • अपने डेटाबेस में उपयोगकर्ता अनुमतियों को अपडेट करें
  • पुष्टि ईमेल भेजें
  • डिजिटल उत्पादों तक पहुँच प्रदान करें
  • विश्लेषण और मैट्रिक्स को ट्रैक करें

स्थानीय रूप से वेबहुक का परीक्षण करना

स्थानीय विकास के लिए, अपने स्थानीय सर्वर को उजागर करने के लिए ngrok जैसे उपकरणों का उपयोग करें:
ngrok http 8000
अपने Dodo Payments डैशबोर्ड में वेबहुक URL अपडेट करें:
https://your-ngrok-url.ngrok.io/webhook

तैनाती

डॉकर

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
बनाएँ और चलाएँ:
docker build -t fastapi-dodo .
docker run -p 8000:8000 --env-file .env fastapi-dodo

उत्पादन विचार

उत्पादन में तैनात करने से पहले:
  • DODO_PAYMENTS_ENVIRONMENT को live_mode में स्विच करें
  • डैशबोर्ड से उत्पादन API कुंजी का उपयोग करें
  • अपने उत्पादन डोमेन के लिए वेबहुक URL अपडेट करें
  • सभी एंडपॉइंट्स के लिए HTTPS सक्षम करें

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

सुनिश्चित करें कि आपका वर्चुअल वातावरण सक्रिय है और निर्भरताएँ स्थापित हैं:
source venv/bin/activate
pip install -r requirements.txt
सामान्य कारण:
  • अमान्य उत्पाद ID - सत्यापित करें कि यह आपके Dodo डैशबोर्ड में मौजूद है
  • .env में गलत API कुंजी या वातावरण सेटिंग
  • विस्तृत त्रुटि संदेशों के लिए FastAPI लॉग की जाँच करें
स्थानीय परीक्षण के लिए, अपने सर्वर को उजागर करने के लिए ngrok का उपयोग करें:
ngrok http 8000
ngrok URL पर अपने Dodo डैशबोर्ड में वेबहुक URL अपडेट करें। सुनिश्चित करें कि आप अपने .env फ़ाइल को सही वेबहुक सत्यापन कुंजी के साथ अपडेट कर रहे हैं।
  • सुनिश्चित करें कि DODO_PAYMENTS_WEBHOOK_KEY आपके .env में सही ढंग से सेट है
  • सत्यापन के लिए कच्चे अनुरोध शरीर का उपयोग कर रहे हैं यह सुनिश्चित करें
  • सुनिश्चित करें कि आप webhook-signature हेडर को सही ढंग से पढ़ रहे हैं

अधिक जानें

समर्थन

बॉयलरप्लेट के साथ मदद चाहिए?