# blockwallets — 暗号資産の知識なしで、暗号資産決済を受け付け

> お客様は USDT、USDC、BTC など 17 種類の通貨を 15 のネットワークで支払えます。入金は米ドル建てで残高に計上され、ご自身のウォレットへいつでも出金できます。決済リンクならコード不要。Cryptomus、NOWPayments、Coinbase Commerce 互換の API で残りも自動化できます。資金を動かせる鍵は、インターネットに接続されたサーバーには一切置いていません。
>
> HTML: https://blockwallets.io/?lang=ja · English: https://blockwallets.io/index.md?lang=en

## 暗号資産決済

USDT、USDC、BTC など 17 種類の通貨、15 のネットワーク。お客様が何で払っても、入金はすべて米ドル建てで残高に計上されます。**ブロックチェーンの知識は不要。資金を動かせる鍵はインターネットに接続されたサーバーに置きません。**
 利用を申し込む入金の流れを見る

クローズドベータ · 手数料は1件あたり 1% から、月間取扱高に応じて最低 0.5% まで · 月額費用なし、出金無料

0行のコードで始められます。決済リンクを送るだけ

17種類の通貨に対応。ステーブルコイン、BTC、各チェーンのネイティブ通貨

2つの独立したデータソースがすべての入金を確認

15のネットワーク。お客様は使い慣れたもので支払えます

暗号資産は初めてですか?

### 知っておきたい3つのこと。

支払いを受けるのにブロックチェーンを理解する必要はありません。始めるにはこの3つで十分です。

米ドル建て

#### 価格変動を気にする必要はありません

価格は米ドルで設定し、米ドルで計上されます。USDT、USDC などのステーブルコインは 1:1、BTC などその他の通貨は 30 分間固定したレートで換算します。

スキャンして支払い

#### お客様はいつものアプリで支払えます

取引所アプリや暗号資産ウォレットで QR コードを読み取るだけ。国境も銀行の営業時間もなく、ほとんどの支払いは 1 分ほどで届きます。

取り消し不可

#### チャージバックなし

承認済みの送金はカード決済のように取り消せないため、チャージバックの紛争は起きません。返金するかどうかはあなたが決めます。

受け取り方

### まずはリンクから。自動化はあとで。

今日から決済リンクで受け取り、自動化が必要になったら API をつなぎましょう。どちらも同じ残高に入ります。

コード不要
#### 決済リンク

管理画面で金額を入れるとリンクと QR コードができます。チャットやサイト、プロフィールで共有すれば、お客様は開いて支払うだけです。
 blockwallets.io/l/pl_940219e083e7b45cea11**試してみる ↗** 年間会員+99.00

前金 · 注文 1042+42.00

開発者向け

#### API 連携

決済時にエンドポイントを1つ呼び、お客様を当社の決済ページへ送ります。入金があればサーバーに通知するので、注文の発送や残高のチャージが自動で進みます。

POST /v1/payment200

order_1042 · 自動発送+42.00

topup_88 · ユーザー残高に加算+150.00

入金の流れ

### 決済から残高まで、4ステップ。

あなたは決済を作成して入金を待つだけ。アドレスの発行、チェーンの監視、二重チェック、システムへの通知は当社が行います。

order_1042TRON · USDT · 専用アドレス TX7k…q3Fd$42.00

ソース A同じ送金 · 金額 · アドレス✓ 確認

ソース B独立したプロバイダー✓ 確認

サーバーに通知POST /webhooks/blockwallets200 OK

両方が一致。入金を確定しました。

- 1
#### 決済を依頼する
金額と注文番号を送ります。決済リンクなら管理画面が代わりに行います。同じ注文番号を2回送っても請求は1件だけです。

- 2
#### お客様がスキャンして支払う
当社の決済ページで通貨とネットワークを選び、スキャンします。注文ごとに専用アドレスがあるので、メモなしで入金と注文が自動的に紐づきます。

- 3
#### 本当に届いたか確認する
毎分チェーンを確認して十分な承認数を待ち、さらに独立した2つ目のデータソースが同じ送金を確認して初めて入金とします。偽の入金は通りません。

- 4
#### お金はあなたのもの
米ドル建てで残高に計上され、いつでも出金を申請できます(出金はすべて担当者が審査し、新しい出金先アドレスは初回の出金まで 24 時間待ちます)。API を使っていれば同時にサーバーへ署名付きの通知が届き、サーバーが落ちていても約2日半再送します。

資金は安全ですか?

0 
### 0 インターネットにつながるサーバー上の秘密鍵。資金を動かせる鍵は、隔離された署名環境だけで使います。

オンラインのサーバーが持つのは読み取り専用の鍵だけです。受取アドレスの生成と残高の確認はできても、送金は一切できません。資金を動かせる鍵はオンラインサービスから隔離された署名環境でのみ使います。集約(スイープ)は固定のコールドウォレットアドレスにしか送らず、加盟店への出金は担当者が承認したうえで、加盟店が登録した出金先アドレスにだけ送ります。

#### オンラインでは受け取りのみ

サーバーは読み取り専用の鍵(`xpub`)だけを保持します。誤って貼り付けられた秘密鍵は拒否されます。

#### 受取アドレスは固定

受取ウォレットはデプロイ設定に固定されており、管理画面からもデータベースからも変更できません。

#### 2つのソースの一致が必須

独立した2つのデータソースが両方確認したときだけ入金として扱います。1つのノードが偽っても通りません。

#### 資金を置いておく必要はありません

いつでも出金を申請でき、指定した残高に達したときや毎日、自動で申請することもできます。出金はすべて担当者が審査し、新しいアドレスは初回の出金まで 24 時間待ちます。すべての払い出しにオンチェーンの記録があります。

#### 送金先を限定

資金を動かす取引はオンラインサービスから隔離された環境で署名します。集約(スイープ)は固定のコールドウォレットアドレスにしか送らず、加盟店への出金は担当者が承認したうえで、加盟店が登録した出金先アドレスにだけ送ります。

#### 危ういときは止める

保護策が1つでも欠けていれば、そのネットワークは受け付けを停止します。

開発者

### コードは2か所だけ。それで連携完了。

決済を作成して決済ページのリンクを受け取り、通知を受けたら署名を確認して発送。まずはテストネットで無料で試せます。

- 
#### 呼び出しは2つだけ
金額と注文番号で作成し、通知を検証して注文番号どおりに発送します。- 
#### テストネットで無料
テスト用の認証情報は公開テストネットで動き、決済ページには「支払いをシミュレート」ボタンがあります。- 
#### 再試行しても安全
同じ `order_id` には常に同じ請求が返ります。- 
#### 他のサービスから移行?
Cryptomus、NOWPayments、Coinbase Commerce の互換 API:パス、パラメータ、署名、Webhook は同じです。ドメインと鍵を差し替えるだけ。 - https://api.cryptomus.com/v1/payment

+ https://blockwallets.io/v1/payment
連携ガイドを読む →

```
<span class="cl"><span class="t-k">import</span> crypto <span class="t-k">from</span> <span class="t-s">"node:crypto"</span>;</span><span class="cl"></span><span class="cl"><span class="t-k">const</span> body = JSON.<span class="t-f">stringify</span>({</span><span class="cl">  order_id: <span class="t-s">"order_1042"</span>,       <span class="t-c">// idempotency key</span></span><span class="cl">  amount: <span class="t-s">"42.00"</span>,              <span class="t-c">// any amount, in USD</span></span><span class="cl">  currency: <span class="t-s">"USD"</span>,</span><span class="cl">  url_callback: <span class="t-s">"https://shop.example.com/webhooks/crypto"</span>,</span><span class="cl">});</span><span class="cl"><span class="t-k">const</span> sign = crypto.<span class="t-f">createHash</span>(<span class="t-s">"md5"</span>)</span><span class="cl">  .<span class="t-f">update</span>(Buffer.<span class="t-k">from</span>(body).<span class="t-f">toString</span>(<span class="t-s">"base64"</span>) + process.env.BW_API_KEY)</span><span class="cl">  .<span class="t-f">digest</span>(<span class="t-s">"hex"</span>);</span><span class="cl"></span><span class="cl"><span class="t-k">const</span> res = <span class="t-k">await</span> <span class="t-f">fetch</span>(<span class="t-s">"https://blockwallets.io/v1/payment"</span>, {</span><span class="cl">  method: <span class="t-s">"POST"</span>,</span><span class="cl">  headers: {</span><span class="cl">    merchant: process.env.BW_MERCHANT,</span><span class="cl">    sign,</span><span class="cl">    <span class="t-p">"content-type"</span>: <span class="t-s">"application/json"</span>,</span><span class="cl">  },</span><span class="cl">  body,</span><span class="cl">});</span><span class="cl"><span class="t-k">return</span> <span class="t-f">redirect</span>((<span class="t-k">await</span> res.<span class="t-f">json</span>()).result.url);</span>
```

```
<span class="cl"><span class="t-k">import</span> crypto <span class="t-k">from</span> <span class="t-s">"node:crypto"</span>;</span><span class="cl"></span><span class="cl"><span class="t-k">export</span> <span class="t-k">async</span> function <span class="t-k">POST</span>(req: Request) {</span><span class="cl">  <span class="t-k">const</span> { sign, ...data } = JSON.<span class="t-f">parse</span>(<span class="t-k">await</span> req.<span class="t-f">text</span>());</span><span class="cl">  <span class="t-k">const</span> json = JSON.<span class="t-f">stringify</span>(data).<span class="t-f">replaceAll</span>(<span class="t-s">"/"</span>, <span class="t-s">"\\/"</span>);</span><span class="cl">  <span class="t-k">const</span> expected = crypto.<span class="t-f">createHash</span>(<span class="t-s">"md5"</span>)</span><span class="cl">    .<span class="t-f">update</span>(Buffer.<span class="t-k">from</span>(json).<span class="t-f">toString</span>(<span class="t-s">"base64"</span>) + process.env.BW_API_KEY)</span><span class="cl">    .<span class="t-f">digest</span>(<span class="t-s">"hex"</span>);</span><span class="cl">  <span class="t-k">if</span> (sign !== expected) <span class="t-k">return</span> <span class="t-k">new</span> <span class="t-f">Response</span>(<span class="t-s">"bad sign"</span>, { status: <span class="t-n">401</span> });</span><span class="cl"></span><span class="cl">  <span class="t-k">if</span> (data.status === <span class="t-s">"paid"</span> || data.status === <span class="t-s">"paid_over"</span>) {</span><span class="cl">    <span class="t-k">await</span> <span class="t-f">credit</span>(data.order_id, data.payment_amount_usd);</span><span class="cl">  }</span><span class="cl">  <span class="t-k">return</span> <span class="t-k">new</span> <span class="t-f">Response</span>(<span class="t-s">"ok"</span>);</span><span class="cl">}</span>
```

```
<span class="cl"><span class="t-k">POST</span> /webhooks/crypto</span><span class="cl"><span class="t-h">Content-Type:</span> application/json</span><span class="cl"></span><span class="cl">{</span><span class="cl">  <span class="t-p">"type"</span>: <span class="t-s">"payment"</span>,</span><span class="cl">  <span class="t-p">"uuid"</span>: <span class="t-s">"6f1c2a7e…"</span>,</span><span class="cl">  <span class="t-p">"order_id"</span>: <span class="t-s">"order_1042"</span>,</span><span class="cl">  <span class="t-p">"amount"</span>: <span class="t-s">"42.00"</span>,</span><span class="cl">  <span class="t-p">"payment_amount_usd"</span>: <span class="t-s">"42.00"</span>,</span><span class="cl">  <span class="t-p">"status"</span>: <span class="t-s">"paid"</span>,</span><span class="cl">  <span class="t-p">"is_final"</span>: true,</span><span class="cl">  <span class="t-p">"network"</span>: <span class="t-s">"tron"</span>,</span><span class="cl">  <span class="t-p">"payer_currency"</span>: <span class="t-s">"USDT"</span>,</span><span class="cl">  <span class="t-p">"txid"</span>: <span class="t-s">"9c1e…"</span>,</span><span class="cl">  <span class="t-p">"sign"</span>: <span class="t-s">"5f0c9b…e9a1"</span></span><span class="cl">}</span>
```

#### AI にプロンプトを1つコピーするだけ
 
ChatGPT、Claude、Cursor などのコーディングアシスタントに貼り付けてください。ドキュメントを読み、テストネットでテストの流れを動かしてから、受け入れチェックリストを返してくれます。
 ChatGPT で開く ↗llms-full.txt を読むチャットを開きます Claude で開く ↗llms-full.txt を読むチャットを開きます
技術スタックに合わせたプロンプトを作る →

blockwallets の暗号資産決済を私のプロジェクトに組み込んでください。 1. まず https://blockwallets.io/llms-full.txt と https://blockwallets.io/agents.md を読んでください。ほかの決済サービスについての記憶より、これらを優先してください。 2. テストネット上のテスト用認証情報から始めてください(blockwallets 管理画面のテストモード。決済ページに「支払いをシミュレート」ボタンがあります)。テストの流れがすべて通るまで本番の鍵には触れないでください。 3. POST https://blockwallets.io/v1/payment(amount、currency "USD"、order_id、url_callback)で決済を作成し、お客様を result.url に送ってください。 4. Webhook は信頼する前に必ず検証してください:"sign" を取り除き、残りを JSON にエンコードしてすべての "/" を "\/" にエスケープし(PHP の json_encode($data, JSON_UNESCAPED_UNICODE) と同じ。ASCII 以外の文字はそのまま)、base64 にして API key を連結し、md5 の16進値を "sign" と比較します。 5. status が "paid" と "paid_over" のときは支払済みとして扱ってください。同じ order_id には常に同じ請求が返るので再試行は安全です。各注文の入金処理は1回だけにしてください。 6. merchant ID と API key は環境変数に置き、コードには書かないでください。 終わったら、次の受け入れチェックリストを各項目チェックまたは説明付きで返してください: - [ ] テスト決済が作成でき、result.url で決済ページが開く - [ ] 「支払いをシミュレート」で Webhook が届き、署名検証が通る - [ ] 本文や sign を改ざんした Webhook は拒否される - [ ] Webhook が再送されても、注文は一度だけ支払済みになる - [ ] 認証情報は環境変数から読み込まれる - [ ] 本番に切り替えるために変更が必要な箇所 ネットワーク

### 何で支払われても、受け取るのは米ドル。

ステーブルコインは等価で計上され、為替レートもスプレッドもありません。BTC、LTC、ネイティブ通貨は 30 分間固定したレートで見積もります。

| ネットワーク | 通貨 | 到着時間 | 最低額 |
| --- | --- | --- | --- |
| TRON | USDTTRX | 約 1 分 | $1.00 |
| BNB Smart Chain | USDTUSDCUSD1FDUSDBNB | 約 1 分 | $1.00 |
| Ethereum | USDTUSDCDAIETH | 約 1–18 分 | $5.00 |
| Base | USDCDAIETH | 約 1–25 分 | $1.00 |
| Polygon PoS | USDTUSDCPOL | 約 1 分 | $1.00 |
| Arbitrum One | USDTUSDCDAIETH | 約 1–30 分 | $1.00 |
| OP Mainnet | USDTUSDCETH | 約 1–25 分 | $1.00 |
| Avalanche C-Chain | USDTUSDCAVAX | 約 1 分 | $1.00 |
| X Layer | USDTUSDCOKB | 約 1–20 分 | $1.00 |
| Dogecoin | DOGE | 約 1–40 分 | $1.00 |
| Solana | USDTUSDCSOL | 約 1 分 | $1.00 |
| TON | USDTTON | 約 1 分 | $1.00 |
| Litecoin | LTC | 約 3–15 分 | $1.00 |
| Bitcoin | BTC | 約 10–30 分 | $5.00 |
| Bitcoin Cash | BCH | 約 10–60 分 | $1.00 |

ハイライトされた通貨はステーブルコインで、いずれも 1:1 で米ドルとして計上します。短いほうの時間は $1,000 未満の支払いの目安です。$1,000 以上、さらに $5,000 以上ではより多くの承認を待つため、金額が大きいほど長いほうの時間に近づきます。

料金

### かかるのは決済ごとの手数料だけ。規模が大きいほど安く。

すべての加盟店に同じ料金段階を適用し、前月の取扱高に応じて自動で下がります。交渉は不要です。

1%/ 件
 
最低 0.5%。ネットワーク手数料はお客様が負担します。
 月額費用なし初期費用なし出金無料最低取扱高なし

$50,000 未満1%

$50,000 以上0.9%

$100,000 以上0.8%

$250,000 以上0.7%

$500,000 以上0.6%

$1,000,000 以上0.5%

よくある質問

### 短く答えます。

#### どの通貨を受け取れますか?

15 のネットワークで 17 種類:USDT、USDC、USD1、FDUSD、DAI、BTC、LTC、DOGE、BCH、およびネイティブ通貨 TRX、BNB、ETH、POL、AVAX、OKB、SOL、TON。ネットワーク:TRON、BNB Smart Chain、Ethereum、Base、Polygon PoS、Arbitrum One、OP Mainnet、Avalanche C-Chain、X Layer、Dogecoin、Solana、TON、Litecoin、Bitcoin、Bitcoin Cash。ステーブルコインは米ドルで 1:1 計上、その他の通貨は 30 分間固定したレートで換算します。

#### 料金はいくらですか?

1件あたり 1%。前月の取扱高に応じて自動で下がり、$50,000 以上で 0.9%、最低 0.5% です。月額費用・初期費用なし、出金無料。ネットワーク手数料はお客様が負担します。

#### ブロックチェーンを理解する必要はありますか?

ありません。管理画面で金額を入力すれば決済リンクと QR コードができ、お客様がスキャンして支払うと米ドル建てで残高に入ります。アドレス、承認、照合は blockwallets が担当します。

#### 出金はどうすればいいですか?

管理画面からいつでもご自身のウォレットへの出金を申請できます。残高が指定額に達したときや毎日、自動で申請するよう設定することもできます。出金はすべて担当者が審査し、新しく登録した出金先アドレスは初回の出金まで 24 時間待ちます。出金は無料で、それぞれオンチェーンの取引が表示されます。

#### 秘密鍵はどこにありますか?

資金を動かせる鍵は、外部にサービスを提供するサーバーには一切置いていません。オンラインサービスから隔離された署名環境でのみ使います。集約(スイープ)は固定のコールドウォレットアドレスにしか送らず、加盟店への出金は担当者が承認したうえで、加盟店が登録した出金先アドレスにだけ送ります。インターネットに接続されたサーバーが持つのは読み取り専用の公開鍵(xpub)だけで、受取アドレスの生成と残高の確認はできても、送金はできません。

#### Cryptomus、NOWPayments、Coinbase Commerce から移行すると何が変わりますか?

変わるのは API のドメインと鍵だけです。3つそれぞれに互換 API があり、パス、パラメータ、署名アルゴリズム、Webhook の形式は元のサービスと同じなので、コードはそのまま使えます。

#### テストモードはありますか?

あります。テストモードには公開テストネット用の専用認証情報があり、決済ページには「支払いをシミュレート」ボタンがあるので、決済の作成、支払い、Webhook、署名の検証を本物のお金を使わずに試せます。

### さあ、始めましょう。
 
blockwallets は加盟店向けに順次公開しています。事業について少し教えていただければ、アカウント開設のご案内をメールでお送りします。暗号資産が初めてでも大丈夫。備考欄で何でも聞いてください。
 
手数料:1件あたり 1%。前月の取扱高が $50,000 に達すると 0.9% に下がり、規模に応じて最低 0.5% まで下がります。 [料金を見る →](https://blockwallets.io/pricing?lang=ja)
 - **1**すべての申し込みを確認し、メールでご返信します。- **2**承認後は、本物のお金を使わずにテストモードですべて試せます。- **3**納得したら本番へ。出金はいつでも申請できます。
