GMOサイン

GMOサイン API活用ガイド:電子署名導入と実装手順

ⓘ本ページはプロモーションが含まれています

Contents

スポンサードリンク

GMOサインとは – 提供機能と活用シーン {#gmoサインとは-提供機能と活用シーン}

GMOサインは 「書類アップロード → 署名依頼作成 → ステータス取得」 の3ステップで電子契約を自動化できるサービスです。RESTful API が中心となっているため、既存の業務システムに最小限のコード追加で統合可能です。

主な提供機能 {#主な提供機能}

  • 書類アップロード
    PDF・画像(PNG/JPG)を Base64 エンコードして送信し、document_id を取得します。

  • 署名依頼作成
    アップロード済みドキュメントに対し、署名者情報と有効期限 expire_at(ISO8601 形式)を設定し、署名リンク (sign_url) を生成します。

  • ステータス管理
    取得 API とキャンセル API により、リアルタイムで進捗確認・途中停止が可能です。

活用シーン別事例 {#活用シーン別事例}

シナリオ ビジネス課題 GMOサインの活かし方
営業案件の見積書送付 手動メール添付でミスが多い 見積 PDF を API でアップロード → 署名リンクを自動生成 → メール本文に埋め込み
社内稟議・承認フロー 社内共有ドライブのバージョン管理が煩雑 稟議書をサインフロー化し、ステータス取得で進捗可視化
請求書への顧客署名 請求書送付後に支払確認まで時間がかかる 請求書 PDF に署名依頼 → 完了通知を受け取り、会計システムへ自動連携

API 利用開始までの事前準備 {#api-利用開始までの事前準備}

本章では、実装に入る前に必要なアカウント作成・キー取得・環境設定手順を解説します。「開発者が迷わず次のステップへ進める」 ことを意識しています。

手順概要 {#手順概要}

  1. 会員登録 – 法人アカウント作成
  2. API キー取得 – テスト用・本番用キーを発行
  3. 環境切替 – テスト環境 URL と本番環境 URL を明確に分離

詳細手順とポイント {#詳細手順とポイント}

ステップ 操作内容 注意点
1️⃣ 会員登録 GMOサイン公式サイトで法人アカウントを作成(管理者メールが必須) 管理者権限のメールは社内で共有しないこと
2️⃣ API キー取得 管理画面 「API 設定」→「新規キー発行」X-API-KEYSecret Key が発行される キーはテスト・本番別に管理し、環境変数で保持
3️⃣ 環境切替 テスト環境 URL: https://api-test.gmosign.com
本番環境 URL: https://api.gmosign.com
キーとエンドポイントは必ずセットで管理し、混在しないよう CI でチェック
4️⃣ スコープ設定 「書類アップロード」・「署名依頼作成」のスコープを有効化 未設定だと 403 Forbidden が返るので必ず確認

ポイント:テスト環境は無料枠(月間 1,000 件)がありますが、本番に切り替える前に必ずキー・URL のペアが正しいか CI パイプラインで検証してください。


認証方式とリクエストヘッダー構成 {#認証方式とリクエストヘッダー構成}

GMOサインは HMAC SHA256 による署名認証を採用しています。以下では、署名生成ロジックと実際の HTTP ヘッダー例をコード付きで示します。

署名生成手順 {#署名生成手順}

  1. パラメータ準備
  2. nonce:ランダム文字列(12 桁の十六進数)
  3. timestamp:Unix エポック秒(例: 1729875600
  4. HTTP メソッド、リクエストパス、リクエストボディ(JSON 文字列、GET の場合は空文字)

  5. ベース文字列作成

  1. HMAC SHA256 計算
    signature = HMAC_SHA256(secretKey, baseString)(16 進数表記)

HTTP ヘッダー例(Python) {#httpヘッダー例python}

重要noncetimestamp はリクエストごとに必ず更新し、同一組み合わせの再利用はリプレイ攻撃につながります。


主要エンドポイントとサンプル JSON {#主要エンドポイントとサンプル-json}

本章では、実務で頻繁に使用する 3 つ のエンドポイントを中心に、リクエスト/レスポンス例と必須パラメータを示します。各エンドポイントはテスト環境でも同一仕様です。

書類アップロード {#書類アップロード}

アップロードは Base64 エンコードされたバイナリデータを送信し、document_id を取得します。

項目 説明
HTTP メソッド / パス POST /v1/documents
必須パラメータ file_name, content_type, file_base64

リクエスト例

レスポンス例

署名依頼作成 {#署名依頼作成}

expire_atISO8601 UTC(例:2024-11-01T23:59:59Z)で指定します。整数の Unix タイムスタンプから変換する方法は Python サンプルで解説しています。

項目 説明
HTTP メソッド / パス POST /v1/signings
必須パラメータ document_id, signers, expire_at

リクエスト例

レスポンス例

ステータス取得・キャンセル {#ステータス取得キャンセル}

操作 HTTP メソッド / パス
ステータス取得 GET /v1/signings/{signing_id}
キャンセル POST /v1/signings/{signing_id}/cancel

ステータス取得レスポンス例

キャンセル成功レスポンス例


公式サンプルコード実装例 (Python・PHP・Node.js) {#公式サンプルコード実装例pythonphpnodejs}

以下のスニペットは 「書類アップロード → 署名依頼作成 → ステータス取得」 のフローをシンプルに示しています。共通ロジック(make_signature、環境変数取得)は各言語で同一仕様です。

コード中のコメントはすべて英語に統一し、変数名も snake_case(Python) / camelCase(Node.js)/ PascalCase(PHP)で統一しました。

共通ポイント

項目 内容
環境変数 API_KEY, SECRET_KEY を使用し、ハードコーディングを回避
nonce 生成 12 桁の十六進数(例: a3f9c7d2e1b6
timestamp Unix エポック秒 (int(time.time()))
expire_at Python では datetime.utcfromtimestamp(ts).isoformat() + "Z" に変換

Python(requests)サンプル {#pythonサンプル}


PHP(Guzzle)サンプル {#phpサンプル}


Node.js(Axios)サンプル {#nodejsサンプル}


運用・トラブルシューティングガイド {#運用トラブルシューティングガイド}

本章では、実装後に頻出するエラーと対処法、テスト→本番移行時のチェックリスト、セキュリティベストプラクティス、レートリミット・課金概要、FAQ をまとめます。

エラーコード一覧と推奨対応 {#エラーコード一覧}

HTTP ステータス 主な原因 具体的対処
400 Bad Request パラメータ欠落・JSON 構文エラー 必須項目を公式サンプルと比較し、file_base64 が正しくエンコードされているか再確認
401 Unauthorized X-API-KEY 無効、署名不一致 キーが最新か確認。noncetimestamp の生成ロジックをテスト環境でデバッグ
403 Forbidden スコープ未付与、IP 制限 管理画面で documents, signings スコープを有効化。必要なら IP ホワイトリストに開発サーバを追加
404 Not Found リクエストパスミス、ID が存在しない パスと ID をログ出力し、テスト環境/本番環境が混在していないかチェック
429 Too Many Requests 1 分間に 30 件以上のリクエスト(レートリミット)[^1] バックオフアルゴリズムを実装し、キューイングで負荷平準化
500 Internal Server Error サーバ側障害・一時的通信不良 数秒待って再試行。X-Request-ID を添えてサポートに問い合わせ

テスト環境から本番へ移行する際のチェックリスト {#テスト環境から本番へのチェックリスト}

  1. キー・URL の置換
  2. API_KEY_TEST → API_KEY_PRODSECRET_KEY_TEST → SECRET_KEY_PROD を正しく設定。
  3. スコープ確認
  4. 本番アカウントで同一スコープが有効か管理画面で検証。
  5. データクリーンアップ
  6. テスト用 document_id / signing_id が本番に残っていないことを確認(不要なら削除 API でクリア)。
  7. ログレベル調整
  8. 開発時は DEBUG、運用時は INFO 以上にし、シークレット情報が出力されないようマスク処理。
  9. 負荷テスト実施
  10. 1 分間のリクエスト数を 30 件以下に抑えることを確認(自動リトライ含む)。

セキュリティベストプラクティス {#セキュリティベストプラクティス}

項目 推奨設定
通信 HTTPS(TLS 1.2 以上)必須。証明書の有効期限は自動監視。
シークレット管理 環境変数、またはクラウドの Secret Manager に格納し、コードベースにハードコーディングしない。
IP 制限 管理画面で自社サーバ IP のみ許可(可能な場合)。
キー定期ローテーション 90 日ごとに Secret Key を再発行し、古いキーは即削除。
監査ログ X-NONCE, X-TIMESTAMP, X-REQUEST-ID は保存し、不正アクセスのトレースを可能にする。

レートリミット・課金概要 {#レートリミット課金概要}

項目 内容
レートリミット 1 分間あたり 30 リクエスト(全エンドポイント共通)※超過時は 429 が返る[^1]
課金モデル 月額プラン + 従量課金
・署名依頼 1 件につき ¥50 (税別)
・テスト環境は月間 1,000 件まで無料枠あり[^2]
請求サイクル 月末締め、翌月 15 日払い。利用明細は管理画面から CSV ダウンロード可能。

FAQ(よくある質問) {#faq}

  1. テスト環境と本番環境のデータは共有されますか?
  2. 完全に分離されています。キーもエンドポイントも別物なので、テストデータが本番に流出することはありません。

  3. expire_at を過ぎたらどうすれば再送できますか?

  4. 既存の署名依頼はキャンセルし、新しい expire_at(例:当日から 7 日後)で再度作成してください。

  5. PDF 以外に対応しているファイル形式はありますか?

  6. 現在は PDF、PNG、JPG が公式サポート対象です。その他フォーマットは要問い合わせ。

  7. Webhook によるリアルタイム通知は可能ですか?

  8. はい。管理画面でエンドポイント URL を登録すると、署名完了・キャンセル等のイベントが POST されます(詳細は API リファレンス参照)。

  9. 大量署名依頼をバッチ処理したい場合の推奨方法は?

  10. キューイングサービス(例:Amazon SQS、Google Pub/Sub)でリクエストを蓄積し、1 分間に 30 件以下になるようスロットルして送信します。

参考情報 {#参考情報}

[^1]: GMOサイン公式 API リファレンス – 「レートリミット」セクション(2024‑11 更新)
[^2]: GMOサイン料金ページ – 「無料枠と従量課金」項目(2024‑11 取得)


この記事は 2024 年 12 月に最終更新されています。新機能や仕様変更があった場合は、公式ドキュメントをご確認ください。

スポンサードリンク

-GMOサイン