PAYMENT-SIGNATURE の送信方法を中心にお読みください。エージェント側のやり取りに加盟店の API キーは不要です。
2 つの統合モード
モード 1:加盟店ホスト型 402
加盟店サーバー自身が x402 server として動作します。エージェントに 402 challenge を返し、署名を受け取り、
order/create で署名を Waffo に引き渡して決済します。エージェントを自社 API 上に留めたい、x402 プロトコルの詳細を自前で実装できる加盟店に適しています。モード 2:Waffo ホスト型 402
加盟店は注文を作成し、Waffo が返すホスト型 URL をエージェントに渡すだけです。402 challenge、署名の受け取り、決済はすべて Waffo キャッシャーが行います。x402 プロトコルの詳細に触れず迅速にリリースしたい加盟店に適しています。
order/create エンドポイントを共用します。区別はただ一つ、リクエストの x402Info に paymentSignatureHeader を含むかどうかです。署名ありはモード 1、署名なしはモード 2 になります。
前提条件
x402 決済の受け入れには、Waffo 導入チームを通じて以下 2 点の開通が必要です。
- 加盟店契約で CRYPTO / USDC 決済プロダクトを有効化する
- Waffo 側でオンチェーン受取パラメータを設定する
wallet/inquiry と order/create はエラーコード A0010(加盟店契約で許可されていない操作)を返します。現在のサポート範囲
オンチェーン受取パラメータの取得
モード 1 で 402 challenge を構築する前に、POST /api/v1/wallet/inquiry で受取パラメータを取得します。このエンドポイントは照会のみで、注文の作成も金額の検証も行いません。
3 つのフィールドはいずれも Waffo の設定値です。challenge の構築にはそのまま使用してください。
payTo を自社のウォレットアドレスに置き換えてはいけません。エージェントの署名内の受取アドレスと金額は、決済前にオンチェーンで厳密に検証されます。モード 1:加盟店ホスト型 402
加盟店側で行うことは 4 つです。wallet/inquiryでnetwork/asset/payToを取得し、価格設定に基づいて 402 challenge を構築(金額はアトミック単位、schemeはexact固定)してエージェントに返す- エージェントの再送リクエストヘッダー
PAYMENT-SIGNATUREから署名を取り出し、そのままorder/createのx402Info.paymentSignatureHeaderに設定する(デコードして再構築しない) - 同期レスポンスの
orderStatusで提供可否を判定する:PAY_SUCCESSは提供、PAY_IN_PROGRESSは Webhook またはorder/inquiryの最終ステータスを待つ、ORDER_CLOSEは拒否 - 提供時にレスポンスの
x402Info.x402ResponseをPAYMENT-RESPONSEヘッダーとしてエージェントに返す。これが x402 準拠の決済レシートです
goodsInfo、orderRequestedAt など)は通常のワンタイム決済の注文作成と同一です。API Reference を参照してください。
paymentSignatureHeader は base64 エンコードされた x402 PaymentPayload です。デコード後の構造は以下のとおりです(エージェント側の x402 SDK が生成するため、加盟店が構築する必要はありません)。
x402Response は base64 エンコードされた決済レシート(x402 SettlementResponse)で、orderStatus = PAY_SUCCESS の場合のみ返されます。デコード後:
transaction はオンチェーンのトランザクションハッシュで、照合とオンチェーン検証に使用できます。payer はエージェントの支払いウォレットアドレスです。
モード 2:Waffo ホスト型 402
加盟店側で行うことは 3 つです。order/createにx402Info: { "x402Request": true }(署名なし)とsuccessRedirectUrl/failedRedirectUrlを設定する- レスポンスの
orderAction(JSON 文字列)を解析してwebUrlを取り出し、エージェントを 302 リダイレクトする。以降の 402 challenge、署名の受け取り、決済はすべて Waffo キャッシャー側で行われます - Webhook または
order/inquiryが返すorderStatusに基づいてリソースを提供する
webUrl にアクセスすると HTTP 402 を受け取ります。challenge はレスポンスボディにあります(x402 プロトコルでは challenge はボディに置かれ、専用のレスポンスヘッダーはありません)。
PAYMENT-SIGNATURE リクエストヘッダー(x402 仕様の X-PAYMENT に相当)に設定します。加盟店の認証情報は一切不要です。
successRedirectUrl または failedRedirectUrl に戻します。ホスト型 URL はブラウザアクセス(チェックアウトページを表示)と x402 クライアントアクセス(プロトコルレスポンスを返す)の両方に対応しています。
決済成功後、Webhook 通知と order/inquiry レスポンスには x402Info.x402Response(構造はモード 1 と同一)が付加されます。それ以外の通知構造は通常の注文と同じです。Webhook イベントタイプを参照してください。
モード比較
注文ステータスの意味(
PAY_IN_PROGRESS、AUTHORIZATION_REQUIRED など)は他の決済手段と共通です。決済ライフサイクルを参照してください。
金額と小数位(2 層の単位)
同一の取引に 2 層の金額表現があります。混同しないでください。
換算ルール:アトミック単位 = 金額 × 106。通貨と金額における USDC の小数 2 桁は Waffo API 層の
orderAmount を指します。402 challenge と EIP-3009 署名内の金額は常にアトミック単位です。モード 1 では両層の金額が同一の値を表す必要があり、不一致の場合は決済検証で失敗します。
エラーコード
x402 は Waffo の既存の外部エラーコードを再利用します。msg に具体的な理由が示されます。
完全な一覧はエラーコードリファレンスを参照してください。
よくある質問
サンドボックス環境はどのチェーンを使いますか?
サンドボックス環境はどのチェーンを使いますか?
サンドボックスは Base Sepolia テストネット(
eip155:84532)で、USDC コントラクトアドレスは 0x036CbD53842c5426634e7929541eC2318f3dCF7e です。本番は Base メインネット(eip155:8453)で、USDC コントラクトアドレスは 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 です。どちらの環境でも network / asset / payTo は wallet/inquiry の実際の返り値に従ってください。他の通貨やネットワークはサポートされますか?
他の通貨やネットワークはサポートされますか?
現在は USDC + Base ネットワークのみです。
orderCurrency に他の通貨を指定すると A0007 が返ります。1 回の承認で複数回請求できますか?
1 回の承認で複数回請求できますか?
できません。x402 の
exact scheme は EIP-3009 transferWithAuthorization に基づいており、その nonce は USDC コントラクト側で 1 回のみ消費されます。署名は一度決済されると無効になり、再送信はオンチェーンで直接失敗します。サブスクリプション型や従量制の複数回請求は x402 の対象範囲外です。orderStatus が PAY_IN_PROGRESS のとき、先にリソースを提供してもよいですか?
orderStatus が PAY_IN_PROGRESS のとき、先にリソースを提供してもよいですか?
いけません。
PAY_IN_PROGRESS はオンチェーン処理中を意味するだけで、最終的に成功も失敗もあり得ます。リソースを提供できるのは orderStatus = PAY_SUCCESS のみで、最終ステータスは Webhook または order/inquiry で確定します。402 challenge はレスポンスヘッダーとボディのどちらにありますか?
402 challenge はレスポンスヘッダーとボディのどちらにありますか?
レスポンスボディ(JSON)にあります。challenge を運ぶヘッダーはありません。x402 のやり取りにおける唯一のプロトコルリクエストヘッダーは、エージェントが署名を送信する
PAYMENT-SIGNATURE(x402 仕様の X-PAYMENT に相当)です。決済レシートは x402Info.x402Response フィールドで返され、仕様の X-PAYMENT-RESPONSE に相当します。「AI 統合ツール(waffo-integrate)」と同じものですか?
「AI 統合ツール(waffo-integrate)」と同じものですか?
違います。AI 統合ツールは AI コーディングツールで Waffo SDK の統合コードを生成するものです。本ページは AI エージェントが支払い側としてステーブルコインで加盟店のサービスを購入する仕組みです。併用できますが、解決する課題は異なります。
関連ドキュメント
- 決済ライフサイクル:注文ステートマシンと最終ステータスの確定
- 通貨と金額:金額フォーマットと小数位ルール
- 冪等性:
paymentRequestIdの冪等性セマンティクス - Webhook 概要:署名検証とリトライポリシー
- API Reference:
order/create、order/inquiry、wallet/inquiryの完全なフィールド定義