コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
Ask AI
アカウントを作成
サインイン
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
始める
支払い
財務の自動化
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
概要
バージョン管理
変更ログ
API バージョンのアップグレード
SDK バージョンをアップグレードする
開発者向けのツール
SDK
API
テスト
ワークベンチ
イベントの送信先
    イベントとの連携
    Amazon EventBridge
    Webhook エンドポイント
      Webhook ビルダー
      Webhook のバージョン管理
      Webhook の署名確認エラーを解決
      未配信の Webhook イベントを処理
ワークフロー
Stripe CLI
Stripe Shell
開発者ダッシュボード
エージェントツールキット
Stripe 健全性アラートLLM を使用した構築Visual Studio Code をご利用の場合ファイルのアップロード
セキュリティ
セキュリティ
Stripe を拡張する
Stripe Apps
Stripe のコネクター
パートナー
Partner Ecosystem
パートナー認定
ホーム開発者向けのツールEvent DestinationsWebhook endpoint

Webhook の署名確認エラーを解決する

Webhook イベントをリッスンするときに一般的なエラーを修正する方法をご紹介します。

ページをコピー

Webhook イベントを処理する際は、イベントが Stripe から送信されていることを確認して、エンドポイントを安全に保護することをお勧めします。そのためには、Stripe-Signature ヘッダーを使用して次の 3 つのパラメーターを指定し、constructEvent() 関数を呼び出します。

  • requestBody: Stripe から送信されたリクエスト本文の文字列
  • signature: Stripe から送信されたリクエストの Stripe-Signature ヘッダー
  • endpointSecret: エンドポイントに関連付けられたシークレット
Ruby
Stripe::Webhook.construct_event(request_body, signature, endpoint_secret)

この関数により、署名確認エラーが発生することがあります。

Webhook signature verification failed. Err: No signatures found matching the expected signature for payload.

このエラーを受け取った場合、上記の関数に渡した 3 つのパラメーターのうち、少なくとも 1 つが正しくありません。以下の手順では、各パラメーターが正しく設定されていることを確認する方法を説明します。

エンドポイントシークレットを確認する

最も一般的なエラーは、誤ったエンドポイントシークレットの使用によるものです。ダッシュボードで作成した Webhook エンドポイントを使用している場合は、ダッシュボードでエンドポイントを開いて、ページの上部にあるシークレットを表示リンクをクリックしてシークレットを表示します。

Webhook シークレットキーの場所を示すダッシュボードのスクリーンショット

Stripe CLI を使用している場合は、stripe listen コマンドを実行するとシークレットが Terminal に出力されます。

Webhook シークレットキーの場所を示す CLI のスクリーンショット

いずれの場合も、シークレットは whsec_ プレフィックスで始まりますが、シークレットそのものは異なります。 CLI がダッシュボードで管理されているエンドポイントのシークレットを使用している場合、転送されるイベントの署名は確認しないでください。その逆も同様です。

最後に、コードで使用されている endpointSecret を出力して、それが上記のものと一致していることを確認します。

リクエスト本文を確認する

リクエスト本文は、Stripe が信する、変更の加えられていない UTF-8 エンコードの文字列でなければなりません。これを文字列として出力すると、次のようになります。

{ "id": "evt_xxx", "object": "event", "data": { ... } }

未加工のリクエスト本文を取得する

一部のフレームワークは、空白の追加や削除、キーと値のペアの並べ替え、文字列の JSON への変換、エンコードの変更などの処理を行って、リクエスト本文を編集する場合があります。これらのケースはすべて、署名確認の失敗につながります。

以下は、一般的な設定を使用してデータを解析または変更する可能性があるフレームワークのリストと、未加工のリクエスト本文を取得する方法に関するヒントをいくつか示したものです。

フレームワーク取得方法
Express を使用した stripe-node ライブラリ組み込みのクイックスタートガイドに従ってください。
BodyParser を使用した stripe-node ライブラリGitHub のこの問題に記載されている解決策をお試しください。
stripe-node ライブラリと Next.js App Routerこの実例を見てください。
stripe-node ライブラリと Next.js Pages Routerこの例のように、 bodyParser を無効にして buffer(request) の使用をお試しください。

Lambda 関数を使用した AWS API ゲートウェイ

Lambda 関数を使用して AWS API Gateway の未加工のリクエスト本文を取得するには、API ゲートウェイで本文のマッピングテンプレートを次のように設定します。

  • コンテンツタイプ: application/json
  • テンプレートコンテンツ:
{ "method": "$context.httpMethod", "body": $input.json('$'), "rawBody": "$util.escapeJavaScript($input.body).replaceAll("\\'", "'")", "headers": { #foreach($param in $input.params().header.keySet()) "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end #end } }

次に、Sigma 関数でイベントの rawBody プロパティを使用して未加工の本文にアクセスし、イベントの headers プロパティを使用してヘッダーにアクセスします。

署名を確認する

signature パラメーターを出力して、次のようになることを確認します。

t=xxx,v1=yyy,v0=zzz

そうでない場合は、ヘッダーから署名を抽出する際に、コードに問題がないか確認します。

このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc