Skip to content
Back to skills

Integrating Stripe Payments

ASecurity

Complete workflow for integrating Stripe payments (subscriptions or one-time) with Convex + Next.js. Includes hosted checkout, webhooks, UI components, and testing. Use when adding payment functionality to a Convex + Next.js app.

  • 666 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 9, 2026
developmentbashnextjstestingapidatabasefrontendbackendsecuritydocumentation

Works with

  • cli
  • api
  • mcp

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill integrating-stripe-payments --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Integrating Stripe Payments?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Integrating Stripe Payments
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-integrating-stripe-payments/badge)](https://www.skillsdirectory.com/skills/majiayu000-integrating-stripe-payments)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: Integrating Stripe Payments
description: Complete workflow for integrating Stripe payments (subscriptions or one-time) with Convex + Next.js. Includes hosted checkout, webhooks, UI components, and testing. Use when adding payment functionality to a Convex + Next.js app.
version: "1.0.0"
dependencies: ["stripe", "convex", "next.js"]
allowed-tools: ["stripe-mcp", "convex-mcp", "file_write", "bash"]
---

# Integrating Stripe Payments

## Core Workflow

When user requests Stripe payment integration for Convex + Next.js:

### 1. Requirements Gathering
Ask these questions first:
- **Payment type**: Subscription or one-time payment?
- **Backend**: Confirm this is Convex (required for this skill)
- **Checkout preference**: Hosted Stripe Checkout (recommended) or embedded?
- **Pricing**: Amount, currency, billing interval for subscriptions?
- **Product**: What does user get after payment?

### 2. API Keys & Environment Setup
**CRITICAL**: Gather these FIRST before proceeding - MCP tools require credentials.

1. **Get Stripe API keys from user**:
   - Ask for Stripe Secret Key (starts with `sk_test_` or `sk_live_`)
   - Add to `.env.local`: `STRIPE_SECRET_KEY=sk_test_...`

2. **Install dependencies**: `npm install stripe`

3. **Set initial environment variables**:
   - `STRIPE_SECRET_KEY` (from step 1)
   - `NEXT_PUBLIC_SITE_URL=http://localhost:3000` (default local development)

4. **Use Stripe MCP tool** to create product/price and get price ID
5. **Use Convex MCP tool** to set remaining environment variables
6. **Manual fallback**: Follow `resources/environment-setup.md`

Complete required env vars:
- `STRIPE_SECRET_KEY` ✓ (set in step 1)
- `STRIPE_PRICE_ID` (from Stripe MCP tool)
- `STRIPE_WEBHOOK_SECRET` (set during webhook configuration)
- `NEXT_PUBLIC_SITE_URL` ✓ (set in step 1)

### 3. Database Schema
Update `convex/schema.ts` with Stripe fields. See `resources/database-schema.ts` for complete schema.

### 4. Backend Implementation
Copy and customize these files:
- `convex/stripe.ts` ← Use `resources/convex-stripe-actions.ts`
- `convex/stripeDb.ts` ← Use `resources/convex-stripe-db.ts`
- `convex/http.ts` ← Use `resources/convex-webhook-handler.ts`

**Key customizations**:
- Update membership tier names (`"pro"` vs `"premium"`)
- Adjust auth field names (`clerkId` vs your auth system)
- Set correct API version: `2025-08-27.basil`
- Enable coupon codes by setting `allow_promotion_codes: true` in checkout session creation

### 5. Frontend Components
Create UI components from `resources/ui-components.tsx`:
- `UpgradeButton` - Shows different states based on membership
- `ManageBillingButton` - Opens customer portal

**UI Design Guidelines**:
- Match existing app design system
- Use gradients and proper state management
- Show loading states and error handling
- Keep prices in sync with Stripe Dashboard

### 6. Webhook Configuration
1. Get Convex deployment URL (use `.convex.site` domain)
2. Create webhook in Stripe Dashboard: `https://your-deployment.convex.site/stripe/webhook`
3. Select events: `checkout.session.completed`, `customer.subscription.*`, `invoice.*`
4. Copy webhook secret to environment variables

### 7. Testing
Follow `resources/testing-checklist.md`:
- Test successful payment flow
- Test failed payments
- Test customer portal
- Verify webhook delivery
- Use Stripe CLI for local testing

### 8. Production Deployment
- Switch to live Stripe keys
- Create production webhook endpoint
- Configure Customer Portal and Smart Retries
- Test with real payment (then refund)

## Best Practices

**Always:**
- Use hosted checkout for simplicity and security
- Use `constructEventAsync` in webhooks (not `constructEvent`)
- Include user metadata in checkout sessions
- Handle missing `current_period_end` with fallbacks
- Keep UI prices synchronized with Stripe prices
- Use consistent Stripe API version across all files
- Set `allow_promotion_codes: true` to enable coupon code input during checkout

**Never:**
- Use `.convex.cloud` for webhooks (use `.convex.site`)
- Skip webhook idempotency in production
- Forget to configure Customer Portal
- Deploy without testing webhook delivery

## Common Issues

**Webhook not working**: Check domain (`.convex.site`) and webhook secret
**Membership not updating**: Verify webhook events and metadata
**API errors**: Ensure consistent API version usage

## Documentation References

Use **Stripe MCP tool** for latest documentation when:
- Checking API changes or new features
- Troubleshooting integration issues
- Verifying best practices

See `resources/` folder for complete code examples and detailed setup instructions.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.