Webhookシークレットの作成
アカウント用の新しいWebhook署名シークレットを作成します。シークレット値は作成時に一度だけ返されます - すぐに安全に保存してください。このシークレットを使用して、受信したWebhookイベントがOmiseから本物であることを検証します。
リクエストパラメータ
このエンドポイントはリクエストパラメータを必要としません。新しい署名シークレットが自動的に生成されます。
オプション - 1項目オプションパラメータ
レスポンス
200
Webhookシークレットが正常に作成されましたWebhookシークレットが作成されました。シークレット値はこのレスポンスにのみ含まれます - 再度取得することはできません。すぐに安全に保存してください。
レスポンスに含まれるもの:
object- オブジェクトタイプ(常に "webhook_secret")id- 一意のシークレット識別子(whsec_*)。管理用に保存してください。secret- 実際の署名シークレット。すぐに保存してください - 再度表示されません。livemode- ライブモードのシークレットかどうかcreated_at- ISO 8601形式の作成タイムスタンプmetadata- カスタムキーバリューデータ(提供された場合)
400
不正なリクエストリクエストの検証に失敗しました。詳細はエラーメッセージを確認してください。
一般的な原因:
- メタデータが15,000文字を超過
- 無効なメタデータ形式
- シークレットの最大数に達した
401
認証エラー認証に失敗しました。無効または欠落したAPIキーです。
一般的な原因:
- Authorizationヘッダーの欠落
- 無効なシークレットキー
- シークレットキーの代わりにパブリックキーを使用
- 不正なHTTP Basic Auth形式
5xx
サーバーエラーサーバー側でエラーが発生しました。これはまれですが、適切に処理する必要があります。
対処方法:
- 指数バックオフでリクエストを再試行
- status.omise.coでサービス障害を確認
- 詳細なガイダンスについてはエラー処理を参照
コードサンプル
- cURL
- Ruby
- Python
- Node.js
- PHP
- Java
- C#
- Go
curl https://api.omise.co/webhooks/secrets \
-u skey_test_5xuy4w91xqz7d1w9u0t: \
-X POST
require 'omise'
Omise.api_key = 'skey_test_5xuy4w91xqz7d1w9u0t'
secret = Omise::WebhookSecret.create({
metadata: {
environment: 'production'
}
})
# secret.secretを安全に保存 - 再度表示されません
puts secret.secret
import omise
omise.api_secret = 'skey_test_5xuy4w91xqz7d1w9u0t'
secret = omise.WebhookSecret.create(
metadata={
'environment': 'production'
}
)
# secret.secretを安全に保存 - 再度表示されません
print(secret.secret)
const omise = require('omise')({
secretKey: 'skey_test_5xuy4w91xqz7d1w9u0t'
});
const secret = await omise.webhookSecrets.create({
metadata: {
environment: 'production'
}
});
// secret.secretを安全に保存 - 再度表示されません
console.log(secret.secret);
<?php
define('OMISE_SECRET_KEY', 'skey_test_5xuy4w91xqz7d1w9u0t');
$secret = OmiseWebhookSecret::create([
'metadata' => [
'environment' => 'production'
]
]);
// $secret['secret']を安全に保存 - 再度表示されません
echo $secret['secret'];
Client client = new Client.Builder()
.secretKey("skey_test_5xuy4w91xqz7d1w9u0t")
.build();
WebhookSecret secret = client.webhookSecrets().create()
.metadata("environment", "production")
.send();
// secret.getSecret()を安全に保存 - 再度表示されません
System.out.println(secret.getSecret());
var client = new Client("skey_test_5xuy4w91xqz7d1w9u0t");
var secret = await client.WebhookSecrets.Create(new CreateWebhookSecretRequest
{
Metadata = new Dictionary<string, string>
{
{ "environment", "production" }
}
});
// secret.Secretを安全に保存 - 再度表示されません
Console.WriteLine(secret.Secret);
client, _ := omise.NewClient(
"pkey_test_5xuy4w91xqz7d1w9u0t",
"skey_test_5xuy4w91xqz7d1w9u0t",
)
secret, _ := client.WebhookSecrets().Create(&operations.CreateWebhookSecret{
Metadata: map[string]string{
"environment": "production",
},
})
// secret.Secretを安全に保存 - 再度表示されません
fmt.Println(secret.Secret)
エ ラーコードと結果コード
一般的なエラーコード
| コード | 説明 | 解決方法 |
|---|---|---|
authentication_failure | 無効なAPIキー | シークレットキーが正しいことを確認 |
bad_request | 無効なパラメータ | メタデータの形式とサイズを確認 |
limit_reached | シークレットの最大数に達した | 新しいシークレットを作成する前に未使用のシークレットを削除 |
Webhookシークレットのフィールド
| フィールド | 説明 |
|---|---|
object | オブジェクトタイプ(常に "webhook_secret") |
id | 一意のシークレット識別子(whsec_*) |
secret | 署名シークレット(作成時のみ表示) |
livemode | ライブモードのシークレットかどうか |
created_at | ISO 8601形式の作成タイムスタンプ |
metadata | カスタムキーバリューデータ |
重要な注意事項
シークレットをすぐに保存
secretフィールドはWebhookシークレットが作成されたときに一度だけ返されます。このレスポンスの後は、シークレットのID、作成日、メタデータのみ確認でき、実際のシークレット値は確認できません。
シークレットを安全な場所に保存してください:
- 環境変数
- AWS Secrets Manager
- HashiCorp Vault
- Google Cloud Secret Manager
- Azure Key Vault
複数のシークレットの使用
一度に複数のアクティブなWebhookシークレットを持つことができます。これはキーローテーション時に便利です:
- 新しいシークレットを作成
- 古いシークレットと新しいシークレットの両方を受け入れるように検証コードを更新
- 更新された検証コードをデプロイ
- 古いシークレットを削除