✨ AI でインストール
✨ AI でインストール
このプロンプトを AI コードエディタ(Cursor、Copilot、Claude Code など)にコピーして、統合を自動的にセットアップ:
構築するもの
Next.js での完全なチェックアウト統合。以下を含みます:- サーバーサイドでのチェックアウトセッション作成
- クライアントサイドからホスト型チェックアウトへのリダイレクト
- 支払い確認のための Webhook 処理
- 支払いステータスに基づく保護されたルート
前提条件
- Next.js 13+(App Router)
- API キーを持つ Waffo Pancake アカウント
- ダッシュボードで作成済みの商品
プロジェクトセットアップ
1. 依存関係のインストール
2. 環境変数
チェックアウト API ルートの作成
SDK を使用してチェックアウトセッションを生成する API ルートを作成します:SDK はリクエスト署名を自動で処理するため、手動でヘッダーを設定する必要はありません。冪等性はオプトインです:リトライで 2 件目のレコードを作ってはいけない場合は、書き込み(または server action)の最後の引数に
{ idempotencyKey } を渡してください。渡さなければヘッダーは送信されず、重複排除も行われません。割引
割引は単発商品、新規サブスクリプション、プラン変更に適用されます。チェックアウトセッションには 3 つの設定があり、couponId は他の 2 つと同時には指定できません(両方を送ると 400):
couponId:購入者が変更・削除できないクーポンを適用promotionCode:購入者に表示されるコードを事前入力 ——allowPromotionCodes: trueも指定しない限りロックallowPromotionCodes: true:チェックアウトページにコード入力欄を表示(省略した場合は、ストアに商品で使えるコードがあるときのみ表示。falseで非表示)
couponId や promotionCode をリクエストボディから受け取らないでください。 上のルートは API Key で署名するため、ブラウザから送られた値はあなたの権限で適用されます —— 購入者があなたの任意のクーポンを自分の購入に適用できてしまいます。割引はサーバー側で決めてください:
@waffo/pancake-nextjs のコンポーネントを使う場合、リンクチェックアウトは discountCode を受け付けます(商品ページに discount_code として渡され、適用・ロックされます)。createCheckoutAction() の server action は allowPromotionCodes をそのまま渡しますが、同じ理由で couponId と promotionCode を取り除きます。クーポンを適用したりコードを事前入力したりするには、上のように自分のサーバーコードから @waffo/pancake-ts を呼び出してください。
価格ページコンポーネント
チェックアウトボタン付きの価格ページを作成します:Webhook ハンドラー
SDK 組み込みのverifyWebhook() を使用して支払い確認を処理します — テスト環境と本番環境の両方の公開鍵が内蔵されているため、Webhook シークレットを管理する必要はありません:
SDK の
verifyWebhook() は内蔵された公開鍵を使用するため、WAFFO_WEBHOOK_SECRET 環境変数は不要です。リプレイ保護もデフォルトで含まれています。成功ページ
支払い成功後に確認を表示します:保護されたルートのミドルウェア
サブスクリプションステータスに基づいてルートを保護します:サーバーコンポーネント:サブスクリプションの確認
カスタマーポータルリンク
サインイン済みのユーザーが、メールのコードなしで注文とサブスクリプションを管理できるようにします。サーバーの Route Handler でポータルリンクを作成してリダイレクトします:完全なファイル構成
テストチェックリスト
本番稼働前:- テストカード
4576 7500 0000 0110でチェックアウトフローをテスト - Webhook が受信されることを確認(ダッシュボードのログを確認)
-
4576 7500 0000 0220で拒否された支払いをテスト - 成功ページが正しく表示されることを確認
- 本番 API キーに切り替え
- Webhook URL を本番エンドポイントに更新
次のステップ
Webhook の処理
Webhook 処理の詳細
サブスクリプション管理
高度なサブスクリプション機能