メインコンテンツへスキップ
このプロンプトを AI コードエディタ(Cursor、Copilot、Claude Code など)にコピーして、統合を自動的にセットアップ:

構築するもの

Next.js での完全なチェックアウト統合。以下を含みます:
  • サーバーサイドでのチェックアウトセッション作成
  • クライアントサイドからホスト型チェックアウトへのリダイレクト
  • 支払い確認のための Webhook 処理
  • 支払いステータスに基づく保護されたルート

前提条件

  • Next.js 13+(App Router)
  • API キーを持つ Waffo Pancake アカウント
  • ダッシュボードで作成済みの商品

プロジェクトセットアップ

1. 依存関係のインストール

2. 環境変数

SDK は PEM、base64、生データなど複数の秘密鍵フォーマットに対応しており、初期化時に自動で正規化されます。.env ファイル内のリテラル \n もそのまま使用できます。

チェックアウト 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 でポータルリンクを作成してリダイレクトします:
ID のルール、セッションの有効期間、ヘルパーを使わない書き方はサインイン済みの顧客に注文を管理してもらうを参照してください。

完全なファイル構成


テストチェックリスト

本番稼働前:
  • テストカード 4576 7500 0000 0110 でチェックアウトフローをテスト
  • Webhook が受信されることを確認(ダッシュボードのログを確認)
  • 4576 7500 0000 0220 で拒否された支払いをテスト
  • 成功ページが正しく表示されることを確認
  • 本番 API キーに切り替え
  • Webhook URL を本番エンドポイントに更新

次のステップ

Webhook の処理

Webhook 処理の詳細

サブスクリプション管理

高度なサブスクリプション機能