先に書いておくこと
これは段階1です。偽の確認役(facilitator)を相手にしたテスト21件だけで確かめていて、テストネットでも本番でも、まだ1回も本物の支払いを受けていません。本番のネットワークは allow_mainnet=True を自分で書かない限り断ります。
x402 の流れ
仕様(https://docs.x402.org/core-concepts/http-402 )の流れはこうです。
- 払わずに呼ぶ →
402とPAYMENT-REQUIREDヘッダー(Base64のJSON。値段・受け取り先・ネットワーク) - クライアントが署名して
PAYMENT-SIGNATUREをつけて再送 - 門が確認役の
/verifyに聞く → 関数を動かす →/settleに聞く - 決済が通ったときだけ
200・結果・PAYMENT-RESPONSE
門は鍵を持たず、署名も確かめません。それは確認役の仕事です。
門が守る約束(テストで確認)
| 場合 | 結果 |
|---|---|
| 払っていない | 402 と値段 |
| 正しい支払い | 200・結果・受領 |
| 同じ支払いを2回 | 402 payment_already_used
|
| 署名の偽造 | 402・関数は動かない |
| 値段より少ない・受け取り先が違う | 402 |
| 決済の失敗 | 402・結果なし |
| 関数が例外を出す | 400・決済しない(同じ支払いを使い直せる) |
見つけてもらうための情報(Bazaar)
402 の応答に extensions.bazaar(呼び出しの例と入出力の型)を入れられます(https://docs.x402.org/extensions/bazaar )。載せた例を実際に払って呼ぶと、載せた答えが返ることもテストで確かめています。$0.001 未満の値段は受け付けません。
使い方(偽の確認役・お金は動かない)
python -m paygate --tool yourmodule:yourfunction --pay-to 0xYOUR_TESTNET_RECEIVING_ADDRESS --facilitator fake
--pay-to は受け取り用のアドレスです。秘密鍵や復元の言葉はこの道具のどこにも入れないでください。
限界
- 二重払いの記憶はプロセスの中だけ。再起動すると忘れます
-
exactの方式だけ - 項目名は 2026-10-28 に読んだ docs.x402.org と Fireblocks の参照ページに合わせています。本番の前に最新の仕様を確かめてください
コード
https://github.com/ayatrader/x402-paygate (MIT・Python標準ライブラリのみ)
次はテストネット(Base Sepolia)で外から1回払って結果が返るか(段階2)を確かめ、確かめた数字だけ追記します。