
Handles the full Stripe integration lifecycle from basic checkout sessions to complex subscription billing and webhook processing. Covers both hosted checkout pages and custom Payment Element implementations, with proper PCI compliance patterns baked in. The examples show real payment flows you'll actually use, including SCA handling for European customers and marketplace scenarios with Connect. What I appreciate is the clear distinction between when to use Checkout Sessions versus Payment Intents, since most developers overcomplicate this choice. Includes webhook event handling for the critical payment states and subscription lifecycle management that production apps need.
$ npx -y skills add wshobson/agents --skill stripe-integration --agent claude-codeInstalls into .claude/skills of the current project.
Master Stripe payment processing integration for robust, PCI-compliant payment flows including checkout, subscriptions, webhooks, and refunds.
Checkout Sessions
ui_mode='custom'Payment Intents (Bespoke control)
Setup Intents (Save Payment Methods)
Critical Events:
payment_intent.succeeded: Payment completedpayment_intent.payment_failed: Payment failedcustomer.subscription.updated: Subscription changedcustomer.subscription.deleted: Subscription canceledcharge.refunded: Refund processedinvoice.payment_succeeded: Subscription payment successfulComponents:
import stripe
stripe.api_key = "sk_test_..."
# Create a checkout session
session = stripe.checkout.Session.create(
line_items=[{
'price_data': {
'currency': 'usd',
'product_data': {
'name': 'Premium Subscription',
},
'unit_amount': 2000, # $20.00
'recurring': {
'interval': 'month',
},
},
'quantity': 1,
}],
mode='subscription',
success_url='https://yourdomain.com/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url='https://yourdomain.com/cancel'
)
# Redirect user to session.url
print(session.url)
Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.
# Use test mode keys
stripe.api_key = "sk_test_..."
# Test card numbers
TEST_CARDS = {
'success': '4242424242424242',
'declined': '4000000000000002',
'3d_secure': '4000002500003155',
'insufficient_funds': '4000000000009995'
}
def test_payment_flow():
"""Test complete payment flow."""
# Create test customer
customer = stripe.Customer.create(
email="test@example.com"
)
# Create payment intent
intent = stripe.PaymentIntent.create(
amount=1000,
automatic_payment_methods={
'enabled': True
},
currency='usd',
customer=customer.id
)
# Confirm with test card
confirmed = stripe.PaymentIntent.confirm(
intent.id,
payment_method='pm_card_visa' # Test payment method
)
assert confirmed.status == 'succeeded'
Sponsors