Phase 3 & Phase 4 - Completed

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-07 00:57:26 +00:00
parent 4b6a03a898
commit 909ed1cb17
25 changed files with 5549 additions and 215 deletions

View File

@@ -0,0 +1,648 @@
# Django Admin Access Guide - Payment & Email Integration Settings
**Date:** January 7, 2026
**Purpose:** Guide to configure Stripe, PayPal, and Resend credentials via Django Admin
---
## Table of Contents
1. [Accessing Django Admin](#1-accessing-django-admin)
2. [Integration Providers Settings](#2-integration-providers-settings)
3. [Stripe Configuration](#3-stripe-configuration)
4. [PayPal Configuration](#4-paypal-configuration)
5. [Resend Configuration](#5-resend-configuration)
6. [Plan & Pricing Configuration](#6-plan--pricing-configuration)
7. [Credit Packages Configuration](#7-credit-packages-configuration)
8. [Testing Checklist](#8-testing-checklist)
---
## 1. Accessing Django Admin
### 1.1 URL Access
**Local Development:**
```
http://localhost:8000/admin/
```
**Staging/Production:**
```
https://api.igny8.com/admin/
```
### 1.2 Login
Use your superuser credentials:
- **Username:** (your admin username)
- **Password:** (your admin password)
**Create Superuser (if needed):**
```bash
cd /data/app/igny8/backend
python manage.py createsuperuser
```
---
## 2. Integration Providers Settings
### 2.1 Navigating to Integration Providers
1. Log in to Django Admin
2. Look for **"MODULES"** section (or similar grouping)
3. Click on **"System" → "Integration providers"**
**Direct URL Path:**
```
/admin/system/integrationprovider/
```
### 2.2 Pre-seeded Providers
You should see these providers already created:
| Provider ID | Display Name | Type | Status |
|-------------|--------------|------|--------|
| `stripe` | Stripe | payment | Active (sandbox) |
| `paypal` | PayPal | payment | Active (sandbox) |
| `resend` | Resend | email | Active |
| `openai` | OpenAI | ai | Active |
| `anthropic` | Anthropic | ai | Active |
| `google` | Google | ai | Active |
| `runware` | Runware | ai | Active |
| `cloudflare_r2` | Cloudflare R2 | storage | Active |
---
## 3. Stripe Configuration
### 3.1 Getting Stripe Credentials
#### Step 1: Login to Stripe Dashboard
Go to [dashboard.stripe.com](https://dashboard.stripe.com)
#### Step 2: Get API Keys
**Test Mode (Sandbox):**
1. Toggle to "Test mode" in top-right
2. Go to **Developers → API keys**
3. Copy:
- **Publishable key** (starts with `pk_test_...`)
- **Secret key** (starts with `sk_test_...`)
**Live Mode (Production):**
1. Toggle to "Live mode"
2. Go to **Developers → API keys**
3. Copy:
- **Publishable key** (starts with `pk_live_...`)
- **Secret key** (starts with `sk_live_...`)
#### Step 3: Configure Webhook
1. Go to **Developers → Webhooks**
2. Click **"Add endpoint"**
3. Enter endpoint URL:
```
Test: https://api-staging.igny8.com/api/v1/billing/webhooks/stripe/
Live: https://api.igny8.com/api/v1/billing/webhooks/stripe/
```
4. Select events to listen for:
- `checkout.session.completed`
- `invoice.paid`
- `invoice.payment_failed`
- `customer.subscription.updated`
- `customer.subscription.deleted`
5. Click **"Add endpoint"**
6. Copy the **Signing secret** (starts with `whsec_...`)
#### Step 4: Create Products and Prices
1. Go to **Products → Add product**
2. Create these products:
**Starter Plan**
- Name: `Starter Plan`
- Description: `Basic plan for small projects`
- Pricing: `$99.00 / month`
- Copy the **Price ID** (starts with `price_...`)
**Growth Plan**
- Name: `Growth Plan`
- Description: `For growing businesses`
- Pricing: `$199.00 / month`
- Copy the **Price ID**
**Scale Plan**
- Name: `Scale Plan`
- Description: `For large enterprises`
- Pricing: `$299.00 / month`
- Copy the **Price ID**
### 3.2 Adding to Django Admin
1. Go to Django Admin → **System → Integration providers**
2. Click on **"stripe"**
3. Fill in the fields:
```
Provider ID: stripe (already set)
Display name: Stripe (already set)
Provider type: payment (already set)
API key: pk_test_xxxxxxxxxxxxx (or pk_live_ for production)
API secret: sk_test_xxxxxxxxxxxxx (or sk_live_ for production)
Webhook secret: whsec_xxxxxxxxxxxxx
API endpoint: [leave empty - uses default]
Config (JSON):
{
"currency": "usd",
"payment_methods": ["card"],
"billing_portal_enabled": true
}
✅ Is active: Checked
✅ Is sandbox: Checked (for test mode) / Unchecked (for live mode)
```
4. Click **"Save"**
### 3.3 Update Plan Models with Stripe Price IDs
1. Go to Django Admin → **Auth → Plans**
2. Edit each plan:
**Starter Plan:**
- Stripe price id: `price_xxxxxxxxxxxxx` (from Stripe dashboard)
- Stripe product id: `prod_xxxxxxxxxxxxx` (optional)
**Growth Plan:**
- Stripe price id: `price_xxxxxxxxxxxxx`
**Scale Plan:**
- Stripe price id: `price_xxxxxxxxxxxxx`
3. Save each plan
---
## 4. PayPal Configuration
### 4.1 Getting PayPal Credentials
#### Step 1: Login to PayPal Developer Dashboard
Go to [developer.paypal.com](https://developer.paypal.com)
#### Step 2: Create an App
1. Go to **My Apps & Credentials**
2. Select **Sandbox** (for testing) or **Live** (for production)
3. Click **"Create App"**
4. Enter app name: `IGNY8 Payment Integration`
5. Click **"Create App"**
6. Copy:
- **Client ID** (starts with `AY...` or similar)
- **Secret** (click "Show" to reveal)
#### Step 3: Configure Webhooks
1. In your app settings, scroll to **"WEBHOOKS"**
2. Click **"Add Webhook"**
3. Enter webhook URL:
```
Sandbox: https://api-staging.igny8.com/api/v1/billing/webhooks/paypal/
Live: https://api.igny8.com/api/v1/billing/webhooks/paypal/
```
4. Select event types:
- `CHECKOUT.ORDER.APPROVED`
- `PAYMENT.CAPTURE.COMPLETED`
- `PAYMENT.CAPTURE.DENIED`
- `BILLING.SUBSCRIPTION.ACTIVATED`
- `BILLING.SUBSCRIPTION.CANCELLED`
5. Click **"Save"**
6. Copy the **Webhook ID** (starts with `WH-...`)
#### Step 4: Create Subscription Plans (Optional)
If you want PayPal subscriptions:
1. Go to **Products** in PayPal dashboard
2. Create subscription plans matching your Stripe plans
3. Copy the **Plan IDs**
### 4.2 Adding to Django Admin
1. Go to Django Admin → **System → Integration providers**
2. Click on **"paypal"**
3. Fill in the fields:
```
Provider ID: paypal (already set)
Display name: PayPal (already set)
Provider type: payment (already set)
API key: AYxxxxxxxxxxx (Client ID)
API secret: ELxxxxxxxxxxx (Secret)
Webhook secret: [leave empty - not used by PayPal]
API endpoint:
Sandbox: https://api-m.sandbox.paypal.com
Live: https://api-m.paypal.com
Config (JSON):
{
"currency": "USD",
"webhook_id": "WH-xxxxxxxxxxxxx",
"return_url": "https://app.igny8.com/account/plans?paypal=success",
"cancel_url": "https://app.igny8.com/account/plans?paypal=cancel"
}
✅ Is active: Checked
✅ Is sandbox: Checked (for sandbox) / Unchecked (for live)
```
4. Click **"Save"**
---
## 5. Resend Configuration
### 5.1 Getting Resend API Key
#### Step 1: Login to Resend
Go to [resend.com](https://resend.com)
#### Step 2: Create API Key
1. Go to **API Keys**
2. Click **"Create API Key"**
3. Enter name: `IGNY8 Production` (or `IGNY8 Development`)
4. Select permission: **"Sending access"**
5. Click **"Add"**
6. Copy the API key (starts with `re_...`)
7. **Save it securely** - you won't see it again!
#### Step 3: Verify Your Domain
1. Go to **Domains**
2. Click **"Add Domain"**
3. Enter your domain: `igny8.com`
4. Follow instructions to add DNS records:
- **DKIM Record** (TXT)
- **SPF Record** (TXT)
- **DMARC Record** (TXT)
5. Click **"Verify"**
6. Wait for verification (can take a few minutes to 24 hours)
### 5.2 Adding to Django Admin
1. Go to Django Admin → **System → Integration providers**
2. Click on **"resend"**
3. Fill in the fields:
```
Provider ID: resend (already set)
Display name: Resend (already set)
Provider type: email (already set)
API key: re_xxxxxxxxxxxxx
API secret: [leave empty]
Webhook secret: [leave empty]
API endpoint: [leave empty - uses default]
Config (JSON):
{
"from_email": "noreply@igny8.com",
"from_name": "IGNY8",
"reply_to": "support@igny8.com"
}
✅ Is active: Checked
✅ Is sandbox: Unchecked (Resend doesn't have sandbox mode)
```
4. Click **"Save"**
### 5.3 Testing Email Delivery
After configuring Resend, test email delivery:
```bash
cd /data/app/igny8/backend
python manage.py shell
```
```python
from igny8_core.business.billing.services.email_service import get_email_service
service = get_email_service()
service.send_transactional(
to='your-email@example.com',
subject='Test Email from IGNY8',
html='<h1>Test Email</h1><p>If you receive this, Resend is configured correctly!</p>',
text='Test Email. If you receive this, Resend is configured correctly!'
)
```
---
## 6. Plan & Pricing Configuration
### 6.1 Viewing Plans
1. Go to Django Admin → **Auth → Plans**
2. You should see existing plans:
- Free Plan
- Starter Plan
- Growth Plan
- Scale Plan
- Enterprise Plan
### 6.2 Editing Plan Details
For each plan:
```
Name: Starter Plan
Description: Perfect for small projects
Price: 99.00
Billing period: monthly
Included credits: 5000
Is active: ✅
Stripe price id: price_xxxxxxxxxxxxx (from Stripe dashboard)
Stripe product id: prod_xxxxxxxxxxxxx (optional)
Paypal plan id: P-xxxxxxxxxxxxx (if using PayPal subscriptions)
Feature limits:
Max keywords: 50
Max articles per month: 100
Max team members: 3
Max websites: 1
```
### 6.3 Creating Custom Plans
1. Click **"Add plan"**
2. Fill in all fields
3. Make sure to set:
- ✅ `is_active` = True (to show to users)
- Stripe price ID (from Stripe dashboard)
- Included credits (monthly allocation)
4. Click **"Save"**
---
## 7. Credit Packages Configuration
### 7.1 Viewing Credit Packages
1. Go to Django Admin → **Billing → Credit packages**
2. You should see existing packages:
- Starter: 500 credits @ $9.99
- Value: 2,000 credits @ $29.99
- Pro: 5,000 credits @ $59.99
- Enterprise: 15,000 credits @ $149.99
### 7.2 Editing Credit Packages
For each package:
```
Name: Value Package
Description: Best value for money
Credits: 2000
Price: 29.99
Display order: 2
✅ Is active: Checked
✅ Is featured: Checked (to highlight on UI)
Stripe product id: prod_xxxxxxxxxxxxx (optional - for tracking)
Paypal product id: (optional)
```
### 7.3 Creating Custom Credit Packages
1. Click **"Add credit package"**
2. Fill in:
- Name: e.g., "Black Friday Special"
- Credits: e.g., 10000
- Price: e.g., 79.99
- Description: "Limited time offer!"
3. Check ✅ `is_active`
4. Check ✅ `is_featured` (optional)
5. Click **"Save"**
---
## 8. Testing Checklist
### 8.1 Verify Integration Provider Settings
Go to Admin → **System → Integration providers**
- [ ] **Stripe** - API keys added, webhook secret added, is_active=True
- [ ] **PayPal** - Client ID/Secret added, webhook ID in config, is_active=True
- [ ] **Resend** - API key added, domain verified, is_active=True
### 8.2 Test Stripe Integration
1. **Get Config Endpoint:**
```bash
curl -X GET https://api.igny8.com/api/v1/billing/stripe/config/ \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
Should return publishable key and sandbox status
2. **Test Checkout Session:**
- Go to frontend: `/account/plans`
- Select "Stripe" as payment method
- Click "Subscribe" on a plan
- Should redirect to Stripe Checkout
- Complete test payment with card: `4242 4242 4242 4242`
- Should receive webhook and activate subscription
3. **Test Billing Portal:**
- Click "Manage Subscription" button
- Should redirect to Stripe Billing Portal
- Can cancel/update subscription
### 8.3 Test PayPal Integration
1. **Get Config Endpoint:**
```bash
curl -X GET https://api.igny8.com/api/v1/billing/paypal/config/ \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
Should return client_id and sandbox status
2. **Test Credit Purchase:**
- Go to frontend: `/account/usage`
- Select "PayPal" as payment method
- Click "Buy Credits" on a package
- Should redirect to PayPal
- Login with sandbox account
- Complete payment
- Should capture order and add credits
### 8.4 Test Email Service
1. **Test Welcome Email:**
```bash
cd /data/app/igny8/backend
python manage.py shell
```
```python
from igny8_core.auth.models import User, Account
from igny8_core.business.billing.services.email_service import send_welcome_email
user = User.objects.first()
account = user.account
send_welcome_email(user, account)
```
Check your inbox for welcome email
2. **Test Payment Confirmation:**
- Complete a test payment (Stripe or PayPal)
- Should receive payment confirmation email
- Check email content and formatting
### 8.5 Test Webhooks
1. **Check Webhook Logs:**
```bash
cd /data/app/igny8/backend
tail -f logs/django.log | grep webhook
```
2. **Trigger Webhook Events:**
- **Stripe:** Complete test checkout, then check webhook logs
- **PayPal:** Complete test payment, then check webhook logs
3. **Verify Webhook Processing:**
- Subscription should be activated
- Credits should be added
- Email notifications should be sent
---
## Quick Reference: Admin URLs
```
# Main sections
/admin/system/integrationprovider/ # All integration providers
/admin/auth/plan/ # Plans and pricing
/admin/billing/creditpackage/ # Credit packages
/admin/billing/payment/ # Payment history
/admin/billing/invoice/ # Invoices
/admin/auth/subscription/ # Active subscriptions
/admin/billing/credittransaction/ # Credit transaction history
# Specific provider configs
/admin/system/integrationprovider/stripe/change/
/admin/system/integrationprovider/paypal/change/
/admin/system/integrationprovider/resend/change/
```
---
## Security Best Practices
### Never Commit API Keys
- ❌ Don't add API keys to code
- ❌ Don't commit `.env` files
- ✅ Use Django Admin to store credentials
- ✅ Use IntegrationProvider model (encrypted in DB)
### Use Environment-Specific Keys
- **Development:** Use Stripe test mode, PayPal sandbox
- **Staging:** Use separate test credentials
- **Production:** Use live credentials ONLY in production
### Regular Key Rotation
- Rotate API keys every 90 days
- Rotate webhook secrets if compromised
- Keep backup of old keys during rotation
### Monitor Webhook Security
- Verify webhook signatures always
- Log all webhook attempts
- Alert on failed signature verification
---
## Troubleshooting
### Stripe Issues
**"No such customer"**
- Check if `stripe_customer_id` is set on Account model
- Clear the field and let system recreate customer
**"Invalid API Key"**
- Verify API key in IntegrationProvider
- Check if using test key in live mode (or vice versa)
**Webhook not working**
- Check webhook URL in Stripe dashboard
- Verify webhook secret in IntegrationProvider
- Check server logs for errors
### PayPal Issues
**"Invalid client credentials"**
- Verify Client ID and Secret in IntegrationProvider
- Make sure using sandbox credentials for sandbox mode
**"Webhook verification failed"**
- Check webhook_id in config JSON
- Verify webhook URL in PayPal dashboard
**Order capture fails**
- Check order status (must be APPROVED)
- Verify order hasn't already been captured
### Resend Issues
**"Invalid API key"**
- Verify API key starts with `re_`
- Create new API key if needed
**"Domain not verified"**
- Check DNS records in domain provider
- Wait up to 24 hours for DNS propagation
- Use Resend dashboard to verify domain status
**Emails not delivered**
- Check Resend dashboard logs
- Verify from_email domain is verified
- Check spam folder
---
## Next Steps
After configuring all providers:
1. ✅ Test all payment flows in sandbox mode
2. ✅ Test email delivery
3. ✅ Verify webhook processing
4. ✅ Test frontend payment gateway selection
5. ✅ Switch to production credentials when ready to go live
For production deployment, update:
- `is_sandbox` = False for Stripe
- `is_sandbox` = False for PayPal
- `api_endpoint` = production URLs
- Use live API keys for all providers
---
**Support:** If you encounter issues, check Django logs:
```bash
cd /data/app/igny8/backend
tail -f logs/django.log
```

View File

@@ -144,20 +144,20 @@ grep -rn "<button" src/ --include="*.jsx" --include="*.tsx"
**Location**: Home/Dashboard page
### Widget 1: Sites Overview
### Widget 1: Sites Overview
- Show sites with small data/status info
- Include action buttons to directly navigate to:
- Site settings
- Site actions
- Compact format showing key site health indicators
### Widget 2: Credits Usage
### Widget 2: Credits Usage
- Remaining credits display
- AI runs count
- Style: Match existing site dashboard widget style
- Visual progress indicator for usage
### Widget 3: Account Info
### Widget 3: Account Info
Display the following account-related information:
- Credits consumed (this billing period)
- Credits remaining
@@ -208,28 +208,28 @@ Display the following account-related information:
---
## 3.2 - Payment Integration
## 3.2 - Payment Integration
### 3.2.1 - Stripe Integration
### 3.2.1 - Stripe Integration
- Full payment flow integration
- Subscription management
- Webhook handling
### 3.2.2 - PayPal Integration
### 3.2.2 - PayPal Integration
- Full payment flow integration
- Subscription management
- Webhook handling
---
## 3.3 - Plans & Packages
## 3.3 - Plans & Packages
### 3.3.1 - Upgrade Flow
### 3.3.1 - Upgrade Flow
- Credits package upgrade flow
- Plan upgrade flow
- Proration handling
### 3.3.2 - Service Packages
### 3.3.2 - Service Packages
Create two package types:
| Package | Type | Includes |
@@ -239,9 +239,9 @@ Create two package types:
---
# PHASE 4: Email Setup
# PHASE 4: Email Setup
## 4.1 - Email Services
## 4.1 - Email Services
| Use Case | Service | Free Limit | Why |
|----------|---------|------------|-----|
@@ -252,19 +252,19 @@ Create two package types:
---
## 4.2 - Email Implementation
## 4.2 - Email Implementation
### 4.2.1 - Service Configuration
### 4.2.1 - Service Configuration
- Configure Resend for transactional emails
- Configure Brevo for marketing emails
- Set up API keys and authentication
### 4.2.2 - App Integration
### 4.2.2 - App Integration
- Integrate both providers into app backend
- Create email service abstraction layer
- Route emails to correct provider based on type
### 4.2.3 - Email Triggers Definition
### 4.2.3 - Email Triggers Definition
Define and configure when emails are triggered:
| Email Type | Trigger | Service |
@@ -277,7 +277,7 @@ Define and configure when emails are triggered:
**Action**: Audit backend/frontend to ensure all triggers are configured
### 4.2.4 - Mail History Log
### 4.2.4 - Mail History Log
**Requirements**:
- Store small mail details (not full content)
- Archive every 30 days
@@ -295,7 +295,7 @@ Define and configure when emails are triggered:
- archived_at
```
### 4.2.5 - Verification
### 4.2.5 - Verification
- Verify all signup emails sending successfully
- Verify all alert emails sending successfully
- Verify all notification emails sending successfully

View File

@@ -1,11 +1,26 @@
# Third-Party Integrations Implementation Plan
**Version:** 1.0
**Created:** January 6, 2026
**Version:** 1.1
**Created:** January 6, 2026
**Updated:** January 7, 2026
**Status:****IMPLEMENTATION COMPLETE**
**Covers:** FINAL-PRELAUNCH.md Phase 3.2, 3.3, and Phase 4
---
## Implementation Status
| Phase | Component | Status | Notes |
|-------|-----------|--------|-------|
| 3.2 | Stripe Integration | ✅ Complete | Full checkout, billing portal, webhooks |
| 3.2 | PayPal Integration | ✅ Complete | REST API v2, orders, subscriptions |
| 3.3 | Plan Upgrade Flow | ✅ Complete | Stripe/PayPal/Manual payment selection |
| 3.3 | Credit Purchase Flow | ✅ Complete | One-time credit package checkout |
| 4 | Resend Email Service | ✅ Complete | Transactional emails with templates |
| 4 | Brevo Marketing | ⏸️ Deferred | Future implementation |
---
## Executive Summary
This document provides complete implementation details for:
@@ -75,9 +90,11 @@ class IntegrationProvider(models.Model):
| Service | Location | Status |
|---------|----------|--------|
| `PaymentService` | `business/billing/services/payment_service.py` | ✅ Scaffolded |
| `InvoiceService` | `business/billing/services/invoice_service.py` | ✅ Scaffolded |
| `BillingEmailService` | `business/billing/services/email_service.py` | ✅ Uses Django send_mail |
| `PaymentService` | `business/billing/services/payment_service.py` | ✅ Complete |
| `InvoiceService` | `business/billing/services/invoice_service.py` | ✅ Complete |
| `StripeService` | `business/billing/services/stripe_service.py` | ✅ **NEW - Complete** |
| `PayPalService` | `business/billing/services/paypal_service.py` | ✅ **NEW - Complete** |
| `EmailService` | `business/billing/services/email_service.py` | ✅ **Updated - Resend Integration** |
---
@@ -1110,14 +1127,17 @@ def send_low_credits_warning(account, current_credits, threshold):
## 5. Required Credentials Checklist
> **Note:** All credentials are stored in the `IntegrationProvider` model and can be configured via Django Admin. The implementation supports both sandbox (testing) and production environments.
### 5.1 Stripe Credentials
| Item | Value | Status |
|------|-------|--------|
| Publishable Key (Live) | `pk_live_...` | ⬜ Needed |
| Secret Key (Live) | `sk_live_...` | ⬜ Needed |
| Webhook Signing Secret | `whsec_...` | ⬜ Needed |
| Products/Prices Created | Plan IDs | ⬜ Needed |
| Publishable Key (Live) | `pk_live_...` | ⬜ Add to IntegrationProvider |
| Secret Key (Live) | `sk_live_...` | ⬜ Add to IntegrationProvider |
| Webhook Signing Secret | `whsec_...` | ⬜ Add to IntegrationProvider |
| Products/Prices Created | Plan IDs | ⬜ Create in Stripe Dashboard |
| **Code Implementation** | — | ✅ **Complete** |
**Stripe Products to Create:**
1. **Starter Plan** - $99/mo - `price_starter_monthly`
@@ -1128,18 +1148,20 @@ def send_low_credits_warning(account, current_credits, threshold):
| Item | Value | Status |
|------|-------|--------|
| Client ID (Live) | `AY...` | ⬜ Needed |
| Client Secret (Live) | `EL...` | ⬜ Needed |
| Webhook ID | `WH-...` | ⬜ Needed |
| Subscription Plans Created | PayPal Plan IDs | ⬜ Needed |
| Client ID (Live) | `AY...` | ⬜ Add to IntegrationProvider |
| Client Secret (Live) | `EL...` | ⬜ Add to IntegrationProvider |
| Webhook ID | `WH-...` | ⬜ Add to IntegrationProvider config |
| Subscription Plans Created | PayPal Plan IDs | ⬜ Create in PayPal Dashboard |
| **Code Implementation** | — | ✅ **Complete** |
### 5.3 Resend Credentials
| Item | Value | Status |
|------|-------|--------|
| API Key | `re_...` | ⬜ Needed |
| Domain Verified | igny8.com | ⬜ Needed |
| DNS Records Added | DKIM, SPF | ⬜ Needed |
| API Key | `re_...` | ⬜ Add to IntegrationProvider |
| Domain Verified | igny8.com | ⬜ Configure in Resend Dashboard |
| DNS Records Added | DKIM, SPF | ⬜ Add to DNS provider |
| **Code Implementation** | — | ✅ **Complete** |
### 5.4 Brevo Credentials (Future)
@@ -1152,25 +1174,25 @@ def send_low_credits_warning(account, current_credits, threshold):
## 6. Implementation Order
### Phase 1: Backend Setup (2-3 days)
### Phase 1: Backend Setup ✅ COMPLETE
1. **Add dependencies:**
1. **Add dependencies:**
```bash
pip install resend>=0.7.0
# PayPal uses requests (already installed)
# Stripe already installed
```
2. **Create service files:**
- `backend/igny8_core/business/billing/services/stripe_service.py`
- `backend/igny8_core/business/billing/services/paypal_service.py`
- Update `backend/igny8_core/business/billing/services/email_service.py`
2. **Create service files:**
- `backend/igny8_core/business/billing/services/stripe_service.py`
- `backend/igny8_core/business/billing/services/paypal_service.py`
- Update `backend/igny8_core/business/billing/services/email_service.py`
3. **Create view files:**
- `backend/igny8_core/business/billing/views/stripe_views.py`
- `backend/igny8_core/business/billing/views/paypal_views.py`
3. **Create view files:**
- `backend/igny8_core/business/billing/views/stripe_views.py`
- `backend/igny8_core/business/billing/views/paypal_views.py`
4. **Add URL routes:**
4. **Add URL routes:**
```python
# backend/igny8_core/business/billing/urls.py
urlpatterns += [
@@ -1184,65 +1206,84 @@ def send_low_credits_warning(account, current_credits, threshold):
]
```
5. **Add email templates:**
5. **Add email templates:**
```
backend/igny8_core/templates/emails/
├── base.html
├── welcome.html
├── password_reset.html
├── payment_confirmed.html
├── email_verification.html
├── payment_confirmation.html
├── payment_approved.html
├── payment_rejected.html
├── payment_failed.html
├── subscription_activated.html
── low_credits.html
── subscription_renewal.html
├── low_credits.html
└── refund_notification.html
```
### Phase 2: Stripe Configuration (1 day)
### Phase 2: Stripe Configuration ⏳ PENDING USER CREDENTIALS
1. Create products and prices in Stripe Dashboard
2. Configure webhook endpoint
3. Get API keys and add to IntegrationProvider via admin
4. Test in sandbox mode
1. Create products and prices in Stripe Dashboard (User action needed)
2. Configure webhook endpoint (User action needed)
3. Get API keys and add to IntegrationProvider via admin (User action needed)
4. Test in sandbox mode (After credentials added)
### Phase 3: Frontend Integration (1-2 days)
### Phase 3: Frontend Integration ✅ COMPLETE
1. Add billing API methods
2. Update PlansAndBillingPage with payment buttons
3. Update UsageAnalyticsPage with credit purchase
4. Add success/cancel handling
1. Add billing API methods (stripe, paypal, purchaseCredits, subscribeToPlan)
2. Update PlansAndBillingPage with payment buttons
3. ✅ Add PaymentGatewaySelector component
4. Add success/cancel handling
### Phase 4: Email Configuration (1 day)
### Phase 4: Email Configuration ⏳ PENDING USER CREDENTIALS
1. Add Resend API key to IntegrationProvider
2. Verify domain
3. Test all email triggers
1. Add Resend API key to IntegrationProvider (User action needed)
2. Verify domain at resend.com (User action needed)
3. Test all email triggers (After credentials added)
### Phase 5: Testing (1-2 days)
### Phase 5: Testing ⏳ PENDING USER CREDENTIALS
1. Test Stripe checkout flow (sandbox)
2. Test PayPal flow (sandbox)
3. Test webhook handling
4. Test email delivery
5. Switch to production credentials
1. Test Stripe checkout flow (sandbox) - After credentials added
2. Test PayPal flow (sandbox) - After credentials added
3. Test webhook handling - After webhooks configured
4. Test email delivery - After Resend configured
5. Switch to production credentials - After testing complete
---
## Summary
**Total Estimated Time:** 6-9 days
**Implementation Status:** ✅ **CODE COMPLETE** - Ready for credentials and testing
**Dependencies:**
- Stripe account with products/prices created
- PayPal developer account with app created
- Resend account with domain verified
**Time Spent:** 2-3 days (Backend + Frontend implementation)
**Files to Create:**
- `stripe_service.py`
- `stripe_views.py`
- `paypal_service.py`
- `paypal_views.py`
- Updated `email_service.py`
- 5 email templates
**Pending Actions (User):**
- ⏳ Stripe account: Create products/prices, configure webhooks, add API keys
- ⏳ PayPal developer account: Create app, configure webhooks, add credentials
- ⏳ Resend account: Verify domain, add API key
**Files Created:** ✅
- ✅ `stripe_service.py` (500+ lines)
- ✅ `stripe_views.py` (560+ lines)
- ✅ `paypal_service.py` (500+ lines)
- ✅ `paypal_views.py` (600+ lines)
- ✅ Updated `email_service.py` (760+ lines)
- ✅ 12 email templates
- ✅ `PaymentGatewaySelector.tsx` (160+ lines)
- ✅ Updated `PlansAndBillingPage.tsx`
- ✅ Updated `billing.api.ts` (+285 lines)
**Existing Infrastructure Used:**
- `IntegrationProvider` model for all credentials
- `Payment`, `Invoice`, `CreditPackage` models
- `PaymentService` for payment processing
- `CreditService` for credit management
- `IntegrationProvider` model for all credentials
- `Payment`, `Invoice`, `CreditPackage` models
- `PaymentService` for payment processing
- `CreditService` for credit management
**Next Steps:**
1. Add Stripe credentials to Django Admin → Integration Providers
2. Add PayPal credentials to Django Admin → Integration Providers
3. Add Resend API key to Django Admin → Integration Providers
4. Test payment flows in sandbox mode
5. Switch to production credentials when ready