# 署名チェッカー

> リクエストボディまたは Webhook ボディを貼り付けてください。このページは Cryptomus と同じ方法で署名を手順ごとに計算し、各ステップをあなたの結果と照合して、最初の相違箇所に印を付けます。すべてブラウザー内で動作します。このページはネットワークリクエストを一切送れないため、API key があなたのコンピューターの外に出ることはありません。
>
> HTML: https://blockwallets.io/docs/sign?lang=ja · English: https://blockwallets.io/docs/sign.md?lang=en

## リクエスト署名(あなたが当社の API を呼び出す場合)

1. 署名対象のテキストは、送信するリクエストボディそのものです。スペース、改行、エスケープも含めてバイト単位で同じにします。
2. その UTF-8 バイト列の base64 を取ります。
3. sign = md5(ステップ 2 + API key)。`sign` ヘッダーで送信し、`merchant` ヘッダーには merchant UUID を入れます。

署名が誤っていると API は 401 を返し、レスポンスの `debug.body_base64` は、当社が受け取ったボディから計算したステップ 2 の値です。あなたの結果とそのまま比較できます。

## Webhook 署名(当社があなたの Webhook URL を呼び出す場合)

1. `sign` フィールドを取り除き、残りを PHP の `json_encode` と同じ方法で再エンコードします。コンパクト、`/` は `\/` にエスケープ、非 ASCII はそのままです。
2. ステップ 1 の UTF-8 バイト列の base64 を取ります。
3. md5(ステップ 2 + API key) が `sign` と一致しなければなりません。merchant と同じモード(Live / Test)の API key を使ってください。

## よくある原因

- 別のモードの API key、またはローテーション済みの key。
- フレームワークがボディを再シリアライズした(整形、キーの順序、数値の書式)。受け取った生のボディで検証してください。
- Webhook を再エンコードするときに `/` を `\/` にエスケープしていない。

このチェッカーはすべてブラウザー内で動作し、ページはネットワークリクエストを送れないため、API key があなたのコンピューターの外に出ることはありません。検証コードの例: https://blockwallets.io/docs/cryptomus?lang=ja#verify
