Add docs
This commit is contained in:
parent
acfed861ab
commit
f622932d09
1 changed files with 119 additions and 0 deletions
119
docs/STRIPE_SETUP.md
Normal file
119
docs/STRIPE_SETUP.md
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
# Stripe Setup Guide (Development)
|
||||||
|
|
||||||
|
This guide provides step-by-step instructions for setting up a Stripe test account and configuring payments for Kaboot in your local development environment.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Kaboot uses Stripe to manage subscriptions for "AI Pro" access. Users get 250 AI quiz generations per month with a paid subscription, while free users are limited to 5.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
1. A [Stripe Account](https://dashboard.stripe.com/register).
|
||||||
|
2. [Stripe CLI](https://stripe.com/docs/stripe-cli) installed on your machine.
|
||||||
|
3. Kaboot local development environment running (see [README.md](../README.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Stripe Dashboard Configuration
|
||||||
|
|
||||||
|
### Step 1: Enable Test Mode
|
||||||
|
Log in to your Stripe Dashboard and ensure the **Test Mode** toggle (usually in the top right) is turned **ON**.
|
||||||
|
|
||||||
|
### Step 2: Create a Product
|
||||||
|
1. Navigate to **Products** > **Add Product**.
|
||||||
|
2. **Name**: `Kaboot AI Pro`
|
||||||
|
3. **Description**: `250 AI quiz generations per month`
|
||||||
|
4. **Pricing**:
|
||||||
|
* **Price 1**: $5.00 USD, Recurring, Monthly.
|
||||||
|
* **Price 2**: $50.00 USD, Recurring, Yearly.
|
||||||
|
5. Click **Save Product**.
|
||||||
|
|
||||||
|
### Step 3: Get Price IDs
|
||||||
|
After saving, copy the **API IDs** for both prices. They look like `price_1P...`. You will need these for your environment variables.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Environment Configuration
|
||||||
|
|
||||||
|
Add the following variables to your `.env` file in the project root:
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Stripe API Keys (Test Mode)
|
||||||
|
# Found at: https://dashboard.stripe.com/test/apikeys
|
||||||
|
STRIPE_SECRET_KEY=sk_test_51P...
|
||||||
|
|
||||||
|
# Stripe Price IDs (from Step 3 above)
|
||||||
|
STRIPE_PRICE_ID_MONTHLY=price_...
|
||||||
|
STRIPE_PRICE_ID_YEARLY=price_...
|
||||||
|
|
||||||
|
# Stripe Webhook Secret (Leave empty initially, see Section 3)
|
||||||
|
STRIPE_WEBHOOK_SECRET=whsec_...
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note**: In development, `STRIPE_SECRET_KEY` should always start with `sk_test_`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Webhook Setup (Local Development)
|
||||||
|
|
||||||
|
Stripe needs to send events (like successful payments) to your local server. Since Stripe cannot access `localhost` directly, you must use the Stripe CLI to forward events.
|
||||||
|
|
||||||
|
### Step 1: Login to Stripe CLI
|
||||||
|
```bash
|
||||||
|
stripe login
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Start Forwarding
|
||||||
|
Run the following command in a new terminal window:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripe listen --forward-to localhost:3001/api/payments/webhook
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Get Webhook Secret
|
||||||
|
The command above will output a **webhook signing secret** (e.g., `whsec_abc123...`).
|
||||||
|
1. Copy this secret.
|
||||||
|
2. Paste it into your `.env` file as `STRIPE_WEBHOOK_SECRET`.
|
||||||
|
3. **Restart your backend server** to apply the changes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Testing the Flow
|
||||||
|
|
||||||
|
### Test Credit Card
|
||||||
|
Use Stripe's [test card numbers](https://stripe.com/docs/testing#cards). The most common is:
|
||||||
|
* **Card Number**: `4242 4242 4242 4242`
|
||||||
|
* **Expiry**: Any future date
|
||||||
|
* **CVC**: Any 3 digits
|
||||||
|
* **Zip**: Any 5 digits
|
||||||
|
|
||||||
|
### Webhook Events to Monitor
|
||||||
|
When testing, watch your `stripe listen` terminal. You should see:
|
||||||
|
- `checkout.session.completed`: When a user finishes the payment.
|
||||||
|
- `customer.subscription.updated`: When status changes.
|
||||||
|
- `invoice.paid`: When the monthly/yearly bill is settled (resets generation counts).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Troubleshooting
|
||||||
|
|
||||||
|
### Webhook Signature Mismatch
|
||||||
|
**Error**: `Webhook signature verification failed`
|
||||||
|
- **Solution**: Ensure `STRIPE_WEBHOOK_SECRET` in `.env` matches the secret shown in your `stripe listen` output. Each time you run `stripe listen`, a new secret might be generated if not configured as a permanent endpoint.
|
||||||
|
|
||||||
|
### Missing Keys
|
||||||
|
**Error**: `Stripe API Key not found`
|
||||||
|
- **Solution**: Verify `STRIPE_SECRET_KEY` is set in the `.env` file that the **backend** (server) is reading.
|
||||||
|
|
||||||
|
### Checkout Session Fails
|
||||||
|
**Error**: `No such price: price_...`
|
||||||
|
- **Solution**: Ensure your `STRIPE_PRICE_ID_MONTHLY` and `STRIPE_PRICE_ID_YEARLY` variables match the Price IDs in your Stripe **Test Mode** dashboard.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
- **Webhook Endpoint**: `POST /api/payments/webhook`
|
||||||
|
- **Checkout Initiation**: `POST /api/payments/checkout`
|
||||||
|
- **Billing Portal**: `POST /api/payments/portal` (Allows users to manage/cancel subscriptions)
|
||||||
|
- **Database Fields**: User subscription status is stored in the `users` table (`subscription_status`, `generation_count`, etc.).
|
||||||
Loading…
Add table
Add a link
Reference in a new issue