> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Ruby SDK：KYC・AML・取引モニタリング

> Didit公式Ruby SDKのクイックスタート。net/httpベースでサーバーAPIを呼び出せます。Rails対応のWebhook検証と認証トークンの確認にも対応しています。

Ruby向けの公式Didit gemです。Ruby 3.1以降が必要で、標準ライブラリの`net/http`を使用します。すべてのSDKに共通する事項については、[サーバーSDKの概要](https://docs.didit.me/ja/integration/server-sdks/overview.md)を参照してください。

## インストール

```bash theme={null}
gem install didit-sdk
```

このgemは[RubyGemsの`didit-sdk`](https://rubygems.org/gems/didit-sdk)として公開されています。ソースと変更履歴はGitHubの[didit-protocol/sdk-ruby](https://github.com/didit-protocol/sdk-ruby)にあります。

または、Gemfileに`gem "didit-sdk"`を追加して`bundle install`を実行します。読み込むには`require "didit"`を使用します。

## クライアントを設定する

`Didit::Client.new`は環境変数`DIDIT_API_KEY`を読み込みます。これを上書きする場合や、アプリケーション単位の呼び出し（ケース、ネットワーク、規制レポート）に必要な組織IDとアプリケーションIDを設定する場合は、キーワード引数を渡します。リクエストのフィールドは、APIと同じ名前のキーワード引数です。レスポンスは、フィールドごとのリーダー、`[:field]`、`to_h`を備えたオブジェクトです。

```ruby theme={null}
require "didit"

didit = Didit::Client.new(
  api_key: ENV["DIDIT_API_KEY"],
  organization_id: ENV["DIDIT_ORGANIZATION_ID"],
  application_id: ENV["DIDIT_APPLICATION_ID"],
  timeout: 30,
  max_retries: 2
)

# Options for a single call.
decision = didit.with_options(timeout: 5, max_retries: 0).sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
puts decision.status
```

## セッションを作成する

ワークフローの[検証セッション](https://docs.didit.me/ja/sessions-api/create-session.md)を作成し、ユーザーをそのURLに誘導します。

```ruby theme={null}
require "didit"

didit = Didit::Client.new

session = didit.sessions.create(
  workflow_id: "11111111-2222-3333-4444-555555555555",
  vendor_data: "user-123",
  callback: "https://example.com/verification/done"
)
puts session.url
```

## 判定を読み取る

ユーザーが手続きを完了したとき（またはWebhookが届いたとき）に、[判定を読み取ります](https://docs.didit.me/ja/sessions-api/retrieve-session.md)。各機能の結果はリストで、ワークフローのノードごとに1件のエントリーがあります。

```ruby theme={null}
require "didit"

didit = Didit::Client.new

decision = didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
puts decision.status
(decision.id_verifications || []).each do |verification|
  puts verification.status
end
```

## Webhookを検証する

受信したままのリクエストボディと、リクエストヘッダーを渡します。`verify`は、有効で期限内の配信ではない場合`Didit::WebhookVerificationError`を発生させ、それ以外の場合は型付きのイベントを返します。

```ruby theme={null}
require "didit"

WEBHOOK_SECRET = ENV.fetch("DIDIT_WEBHOOK_SECRET", "")

def handle_webhook(raw_body, headers)
  event = Didit::Webhooks.verify(raw_body, headers, WEBHOOK_SECRET)
  case event
  when Didit::Webhooks::StatusUpdatedEvent
    puts "#{event.session_id} #{event.status}"
  end
  200
rescue Didit::WebhookVerificationError => e
  puts "rejected: #{e.reason}"
  400
end
```

Railsでは`handle_webhook(request.raw_post, request.headers)`を呼び出します。シークレットのローテーション中は、`[new_secret, old_secret]`のように両方を渡します。イベントと署名方式については[Webhook](https://docs.didit.me/ja/integration/webhooks.md)を参照してください。

## 取引をスクリーニングする

支払い、出金、または暗号資産の送金を[トランザクションモニタリング](https://docs.didit.me/ja/transaction-monitoring/overview.md)に送信します。レスポンスには、そのステータスとリスクスコアが含まれます。

```ruby theme={null}
require "didit"

didit = Didit::Client.new

transaction = didit.transactions.create(
  transaction_id: "txn-1001",
  transaction_category: "finance",
  transaction_details: { direction: "outbound", amount: 1500, currency: "EUR" },
  subject: { entity_type: "individual", vendor_data: "user-123", full_name: "Maria Garcia" }
)
puts "#{transaction.status} #{transaction.score}"
```

## Authenticationトークンを検証する

`Didit::Authentication`は、[Authentication](https://docs.didit.me/ja/authentication/overview.md)のイシュアーが署名したアクセストークンを、リクエストのたびにDiditを呼び出すことなく、バックエンドで検証します。また、コードの交換、トークンの更新、セッションの確認と取り消し、ステップアップの実行も行います。

> [!NOTE]
>
> トークン検証では、アプリケーションのイシュアーと署名鍵に対して、[サーバーでトークンを検証する](https://docs.didit.me/ja/authentication/tokens-and-jwks.md#サーバーでトークンを検証する)に記載されたチェックを行います。

```ruby theme={null}
require "didit"

# Your issuer URL, or Didit::Authentication.from_publishable_key("pk_live_...", client_id: ...).
AUTH = Didit::Authentication.new("https://your-app.auth.didit.me", client_id: "your-application-id")

def current_user(access_token)
  AUTH.verify_access_token(access_token).sub
rescue Didit::TokenVerificationError => e
  puts "rejected: #{e.reason}"
  nil
end
```

## エラー

```ruby theme={null}
require "didit"

didit = Didit::Client.new

begin
  didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")
rescue Didit::NotFoundError
  puts "no such session"
rescue Didit::APIStatusError => e
  puts "#{e.status} #{e.request_id}"
end
```

## リストとファイル

```ruby theme={null}
require "didit"

didit = Didit::Client.new

# Lists page through every result.
didit.sessions.list(status: "Approved").auto_paging_each do |session|
  puts session.session_id
end

# Uploads take a Pathname, an IO or Didit::FilePart. A String is sent as the file's bytes.
result = didit.id_verification.verify(
  front_image: Pathname("id-front.jpg"),
  back_image: Pathname("id-back.jpg")
)
puts result.to_h
```

[APIリファレンス](https://docs.didit.me/ja/api-reference/overview.md)のサーバーエンドポイントのページには、その操作のRubyサンプルがあります。ただし、[概要](https://docs.didit.me/ja/integration/server-sdks/overview.md)に記載されている、まだどの1.0.1リリースにも含まれていないエンドポイントとフィールドは除きます。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.