adding-stripe について
アプリに Stripe の決済、請求、サブスクリプションを導入するためのコーディングスキルです。チェックアウトや Webhook 処理、任意のカスタマーポータルを扱います。
主な機能
- 01Stripe SDK のセットアップ
- 02チェックアウトセッション用エンドポイント
- 03Webhook 署名の検証
- 04サブスクリプションイベントの処理
- 05任意の請求ポータル
- 06料金ページとの連携
活用シーン
- 01単発決済やサブスクリプションの追加
- 02サブスクリプション状態の同期
- 03ユーザーによるサブスクリプション管理
- 04Stripe CLI によるローカル Webhook テスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ spencerpauly/ awesome-cursor-skills --skill adding-stripeインストール後、Claude Code で/adding-stripeを入力して読み込まれたか確認します。
詳細
Stripe 決済を追加する
ユーザーが決済、請求、サブスクリプション、または Stripe の統合を追加したい場合に、このスキルを使用します。
手順
-
SDK をインストールする
npm install stripe @stripe/stripe-js -
環境変数を追加する
STRIPE_SECRET_KEY=sk_test_... NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_... STRIPE_WEBHOOK_SECRET=whsec_... -
Stripe クライアントモジュールを作成する —
lib/stripe.tsを作成します。import Stripe from "stripe"; export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: "2024-12-18.acacia", }); -
チェックアウト API ルートを作成する — Stripe Checkout セッションを作成するエンドポイントを作成します。
const session = await stripe.checkout.sessions.create({ mode: "subscription", // or "payment" for one-time payment_method_types: ["card"], line_items: [{ price: priceId, quantity: 1 }], success_url: `${origin}/success?session_id={CHECKOUT_SESSION_ID}`, cancel_url: `${origin}/pricing`, customer_email: userEmail, }); return redirect(session.url!); -
Webhook ハンドラーを作成する —
/api/webhooks/stripeにPOSTエンドポイントを作成します。stripe.webhooks.constructEventを使用して Webhook 署名を検証します。- 主要なイベントを処理します:
checkout.session.completed、customer.subscription.updated、customer.subscription.deleted、invoice.payment_failed。 - サブスクリプションのステータスでデータベースを更新します。
-
カスタマーポータルを追加する(任意) — ユーザーがサブスクリプションを管理できるよう、
stripe.billingPortal.sessions.createにリダイレクトするエンドポイントを作成します。 -
料金ページの UI を追加する — 料金プランのカードを配置し、チェックアウト API ルートを呼び出す料金ページを作成します。
注意事項
- Webhook の署名は必ず検証してください。未検証のペイロードを信頼してはいけません。
- ローカルで Webhook をテストするには、Stripe CLI(
stripe listen --forward-to localhost:3000/api/webhooks/stripe)を使用してください。 - 顧客が重複して作成されないよう、Stripe の顧客 ID をユーザーデータベースに保存してください。
- 価格をハードコードするのではなく、
stripe.prices.listを使って動的に取得してください。
コメント
Markdown 対応