# Webhook を設定してデプロイする
Webhook を設定してデプロイし、Stripe からのイベントをリッスンする方法をご紹介します。
# インタラクティブな Webhook エンドポイントビルダー
Webhook を設定してデプロイし、Stripe からのイベントをリッスンする方法をご紹介します。Webhook エンドポイントを使用して、カスタムのメール領収書の送信、注文のフルフィルメント、データベースの更新など、支払い後のコマースイベントを処理することができます。これらの手順は、本番環境で実行する前に一度サンドボックスでテストしてください。
1. Build the server
~~~
npm install
~~~
2. Run the server
~~~
npm start
~~~
1. Run the server
~~~
go run server.go
~~~
1. Build the server
~~~
pip3 install -r requirements.txt
~~~
2. Run the server
~~~
export FLASK_APP=server.py
python3 -m flask run --port=4242
~~~
1. Build the server
~~~
bundle install
~~~
2. Run the server
~~~
ruby server.rb -o 0.0.0.0
~~~
1. Build the server
~~~
composer install
~~~
2. Run the server
~~~
php -S 127.0.0.1:4242 --docroot=public
~~~
1. Build the server
~~~
dotnet restore
~~~
2. Run the server
~~~
dotnet run
~~~
1. Build the server
~~~
mvn package
~~~
2. Run the server
~~~
java -cp target/sample-jar-with-dependencies.jar com.stripe.sample.Server
~~~
~~~
stripe listen --forward-to localhost:4242/webhook.php
~~~
~~~
stripe listen --forward-to localhost:4242/webhook
~~~
### Stripe Node ライブラリーをインストールする
パッケージをインストールし、それをコードにインポートします。また、まったくゼロから開始していて package.json ファイルが必要な場合には、コードエディターのダウンロードリンクを使用してプロジェクトファイルをダウンロードします。
#### npm
ライブラリーをインストールします。
```bash
npm install --save stripe
```
#### GitHub
または、stripe-node ライブラリーのソースコードを直接 [GitHub から](https://github.com/stripe/stripe-node)ダウンロードします。
### Stripe Ruby ライブラリーをインストールする
Stripe ruby gem をインストールし、require を指定してコードに読み込みます。または、まったくゼロから開始していて Gemfile が必要な場合には、コードエディターのリンクを使用してプロジェクトファイルをダウンロードします。
#### Terminal
gem をインストールします。
```bash
gem install stripe
```
#### Bundler
この行を Gemfile に追加します。
```bash
gem 'stripe'
```
#### GitHub
または、stripe-ruby gem のソースコードを直接 [GitHub から](https://github.com/stripe/stripe-ruby)ダウンロードします。
### Stripe Java ライブラリーをインストールする
ビルドに依存関係を追加し、ライブラリーをインポートします。まったくゼロから開始していてサンプルの pom.xml ファイル (Maven 用) が必要な場合は、コードエディターのリンクを使用してプロジェクトファイルをダウンロードします。
#### Maven
POM に以下の依存関係を追加し、{VERSION} を使用するバージョン番号に置き換えます。
```bash
\ncom.stripe\nstripe-java\n{VERSION}\n
```
#### Gradle
build.gradle ファイルに依存関係を追加し、{VERSION} を使用するバージョン番号に置き換えます。
```bash
implementation "com.stripe:stripe-java:{VERSION}"
```
#### GitHub
JAR を直接 [GitHub から](https://github.com/stripe/stripe-java/releases/latest)ダウンロードします。
### Stripe Python パッケージをインストールする
Stripe パッケージをインストールし、コードにインポートします。まったくゼロから開始していて requirements.txt が必要な場合には、コードエディターのリンクを使用してプロジェクトファイルをダウンロードします。
#### pip
pip を使用してパッケージをインストールします。
```bash
pip3 install stripe
```
#### GitHub
stripe-python ライブラリのソースコードを [GitHub から](https://github.com/stripe/stripe-python)直接ダウンロードします。
### Stripe PHP ライブラリーをインストールする
Composer を使用してライブラリーをインストールし、シークレット API キーで初期化します。まったくゼロから開始していて composer.json ファイルが必要な場合には、コードエディターのリンクを使用してファイルをダウンロードします。
#### Composer
ライブラリーをインストールします。
```bash
composer require stripe/stripe-php
```
#### GitHub
または、stripe-php ライブラリーのソースコードを直接 [GitHub から](https://github.com/stripe/stripe-php)ダウンロードします。
### サーバーを設定する
ビルドに依存関係を追加し、ライブラリーをインポートします。まったくゼロから開始していて go.mod ファイルが必要な場合には、コードエディターのリンクを使用してプロジェクトファイルをダウンロードします。
#### Go
必ず Go モジュールを使用してを初期化してください。
```bash
go get -u github.com/stripe/stripe-go/v85
```
#### GitHub
または、stripe-go モジュールのソースコードを直接 [GitHub から](https://github.com/stripe/stripe-go)ダウンロードします。
### Stripe.net ライブラリーをインストールする
.NET または NuGet でパッケージをインストールします。まったくゼロから開始する場合には、設定済みの .csproj ファイルが含まれるファイルをダウンロードします。
#### dotnet
ライブラリーをインストールします。
```bash
dotnet add package Stripe.net
```
#### NuGet
ライブラリーをインストールします。
```bash
Install-Package Stripe.net
```
#### GitHub
または、Stripe.net ライブラリーのソースコードを直接 [GitHub から](https://github.com/stripe/stripe-dotnet)ダウンロードします。
### Stripe ライブラリーをインストールする
パッケージをインストールし、コードにインポートします。まったくゼロから開始していて `package.json` が必要な場合には、コードエディターのリンクを使用してプロジェクトファイルをダウンロードします。
ライブラリーをインストールします。
```bash
npm install --save stripe @stripe/stripe-js next
```
### 新しいエンドポイントを作成する
[Webhook エンドポイント](https://docs.stripe.com/webhooks.md)は、Stripe からのリクエストを受信するサーバー上のデスティネーションであり、顧客による不審請求の申請や継続支払いの成功など、アカウントで発生するイベントについて通知します。サーバーに新しいエンドポイントを追加し、Stripe が未認証の POST リクエストを送信できるように、パブリックアクセス可能であることを確認してください。
### イベントデータを読み込む
Stripe は、リクエスト本文でイベントデータを送信します。それぞれのイベントは、`type`、`id` と `data` にネストされた Stripe の関連リソースが含まれる [Event (イベント) オブジェクト](https://docs.stripe.com/api/events.md)として構成されます。
### イベントを処理する
イベントオブジェクトを入手したら、[タイプ](https://docs.stripe.com/api/events/types.md)を調べ、どのようなイベントが発生したのかを調べます。1 つの Webhook を使用して複数のイベントタイプを一度に処理することも、特定のイベントに対して個別のエンドポイントを設定することもできます。
### コード 200 のレスポンスを返す
妥当な時間内にレスポンスが送信されないと、Stripe はイベントを再試行するため、できるだけ速く[成功の 200 レスポンス](https://docs.stripe.com/webhooks.md#handle-events-asynchronously)を送信してください。Webhook エンドポイント外で非同期で実行できる、実行時間が長いプロセスはコードとして記述してください。
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/webhook` でエンドポイントをテストします。
```bash
npm start
```
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/webhook` でエンドポイントをテストします。
```bash
ruby server.rb
```
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/webhook` でエンドポイントをテストします。
```bash
python3 -m flask --app server run --port=4242
```
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/public/webhook.php`. でエンドポイントをテストします。
```bash
php -S 127.0.0.1:4242
```
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/webhook` でエンドポイントをテストします。
```bash
dotnet run
```
### サーバーを実行する
サーバーを構築して実行し、`http://localhost:4242/webhook` でエンドポイントをテストします。
```bash
go run server.go
```
### サーバーを実行する
サーバーを構築して実行し、http://localhost:4242/webhook でエンドポイントをテストします。
```bash
java -cp target/sample-jar-with-dependencies.jar com.stripe.sample.Server
```
### CLI をダウンロードする
Stripe CLI を使用して Webhook をローカルでテストします。[CLI をダウンロード](https://docs.stripe.com/stripe-cli.md) して、Stripe アカウントでログインします。または、ngrok などのサービスを使用して、ローカル エンドポイントをパブリックにアクセスできるようにします。
```bash
stripe login
```
### Webhook にイベントを転送する
CLI で[イベント転送](https://docs.stripe.com/webhooks.md#test-webhook)を設定し、サンドボックス内のすべての Stripe イベントをローカルの Webhook エンドポイントに送信します。
```bash
stripe listen --forward-to localhost:4242/webhook
```
### Webhook にイベントを転送する
CLI で[イベント転送](https://docs.stripe.com/webhooks.md#test-webhook)を設定し、テスト環境のすべての Stripe イベントをローカルの Webhook エンドポイントに送信します。
```bash
stripe listen --forward-to localhost:4242/public/webhook.php
```
### イベントをシミュレーションする
CLI を使用して、Webhook アプリケーションロジックをテストする[特定のイベントをシミュレート](https://docs.stripe.com/cli/trigger)します。この際、模擬の Stripe イベントオブジェクトを使用して、POST リクエストを Webhook エンドポイントに送信します。
```bash
stripe trigger payment_intent.succeeded
```
### Webhook を保護する
不正行為者による、偽のペイロードの送信や、バックエンドシステムを改変する SQL インジェクションを防止するために、Webhook リクエストの送信元を確認します。クライアントの署名で Webhook を保護して、Webhook リクエストが Stripe によって生成されたものであり、Stripe のふりをして機能するサーバーから生成されたものではないことを確認します。
### エンドポイント署名シークレットを追加する
各Webhookエンドポイントには一意の署名シークレットがあり、ワークベンチの[Webhook](https://dashboard.stripe.com/workbench/webhooks)タブで確認できます。Stripe CLIを使用してローカルでテストしている場合は、`stripe listen`コマンドを使用してCLI出力から署名シークレットを取得することもできます。
### イベントを検証する
Stripe ライブラリを使用して Stripe からのイベントを検証し、構築できます。イベントを正しく検証するには、エンドポイントシークレット、リクエストヘッダー、および未加工のリクエスト本文が必要です。または、Stripe ライブラリを使用せずに、署名を[手動で検証](https://docs.stripe.com/webhooks.md?verify=verify-manually#verify-manually)することもできます。
### リクエストの署名を読み込む
Stripe からの各リクエストには、`Stripe-Signature` ヘッダーが含まれます。後で使用できるように、このヘッダー値への参照を保存します。
### リクエストを検証する
Stripe ライブラリを使用してリクエストが Stripe からのものであることを検証します。未加工のリクエスト本文、`Stripe-Signature` ヘッダー、およびエンドポイントシークレットを渡して、[Event (イベント)](https://docs.stripe.com/api/events/object.md) を構築します。
### エラーを処理する
エラーを確認することにより、構成が不適切な Webhook、または Stripe 以外のサービスからの形式が正しくないリクエストを見つけることができます。よくあるエラーとしては、間違ったエンドポイントシークレットを使用している、リクエスト本文の解析された表現 (JSON など) が渡されている、間違ったリクエストヘッダーが読み込まれている、などがあります。
### エンドポイントをテストする
Stripe CLI を使用して保護されたエンドポイントをテストします。これにより、各テストイベントで適切な署名ヘッダーが送信されます。
// This is a public sample test API key.
// Don’t submit any personally identifiable information in requests made with this key.
// Sign in to see your own test API key embedded in code samples.
const stripe = require('stripe')('<>');
// Replace this endpoint secret with your endpoint's unique secret
// If you are testing with the CLI, find the secret by running 'stripe listen'
// If you are using an endpoint defined with the API or dashboard, look in your webhook settings
// at https://dashboard.stripe.com/webhooks
const endpointSecret = 'whsec_...';
const express = require('express');
const app = express();
app.post('/webhook', express.raw({type: 'application/json'}), (request, response) => {
let event = request.body;
// Only verify the event if you have an endpoint secret defined.
// Otherwise use the basic event deserialized with JSON.parse
if (endpointSecret) {
// Get the signature sent by Stripe
const signature = request.headers['stripe-signature'];
try {
event = stripe.webhooks.constructEvent(
request.body,
signature,
endpointSecret
);
} catch (err) {
console.log(`⚠️ Webhook signature verification failed.`, err.message);
return response.sendStatus(400);
}
}
// Handle the event
switch (event.type) {
case 'payment_intent.succeeded':
const paymentIntent = event.data.object;
console.log(`PaymentIntent for ${paymentIntent.amount} was successful!`);
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent);
break;
case 'payment_method.attached':
const paymentMethod = event.data.object;
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod);
break;
default:
// Unexpected event type
console.log(`Unhandled event type ${event.type}.`);
}
// Return a 200 response to acknowledge receipt of the event
response.send();
app.listen(4242, () => console.log('Running on port 4242'));
{
"name": "stripe-sample",
"version": "1.0.0",
"description": "A sample Stripe implementation",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"author": "stripe-samples",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"stripe": "^21.0.1"
}
}
{
"name": "stripe-sample",
"version": "0.1.0",
"dependencies": {
"@stripe/react-stripe-js": "^3.7.0",
"@stripe/stripe-js": "^7.3.0",
"express": "^4.17.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "^3.4.0",
"stripe": "21.0.1"
},
"devDependencies": {
"concurrently": "4.1.2"
},
"homepage": "http://localhost:3000/checkout",
"proxy": "http://localhost:4242",
"scripts": {
"start-client": "react-scripts start",
"start-server": "node server.js",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"start": "concurrently \"yarn start-client\" \"yarn start-server\""
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
require 'stripe'
\# This is a public sample test API key.
# Don’t submit any personally identifiable information in requests made with this key.
# Sign in to see your own test API key embedded in code samples.
Stripe.api_key = '<>'
\# Replace this endpoint secret with your endpoint's unique secret
# If you are testing with the CLI, find the secret by running 'stripe listen'
# If you are using an endpoint defined with the API or dashboard, look in your webhook settings
# at https://dashboard.stripe.com/webhooks
endpoint_secret = 'whsec_...';
post '/webhook' do
payload = request.body.read
event = nil
begin
event = Stripe::Event.construct_from(
JSON.parse(payload, symbolize_names: true)
)
rescue JSON::ParserError => e
\# Invalid payload
puts "⚠️ Webhook error while parsing basic request. #{e.message}"
status 400
return
end
\# Check if webhook signing is configured.
if endpoint_secret
# Retrieve the event by verifying the signature using the raw body and secret.
signature = request.env['HTTP_STRIPE_SIGNATURE'];
begin
event = Stripe::Webhook.construct_event(
payload, signature, endpoint_secret
)
rescue Stripe::SignatureVerificationError => e
puts "⚠️ Webhook signature verification failed. #{e.message}"
status 400
end
end
\# Handle the event
case event.type
when 'payment_intent.succeeded'
payment_intent = event.data.object # contains a Stripe::PaymentIntent
puts "Payment for #{payment_intent['amount']} succeeded."
# Then define and call a method to handle the successful payment intent.
# handle_payment_intent_succeeded(payment_intent)
when 'payment_method.attached'
payment_method = event.data.object # contains a Stripe::PaymentMethod
# Then define and call a method to handle the successful attachment of a PaymentMethod.
# handle_payment_method_attached(payment_method)
else
puts "Unhandled event type: #{event.type}"
end
status 200
import stripe
\# This is a public sample test API key.
# Don’t submit any personally identifiable information in requests made with this key.
# Sign in to see your own test API key embedded in code samples.
stripe.api_key = '<>'
\# Replace this endpoint secret with your endpoint's unique secret
# If you are testing with the CLI, find the secret by running 'stripe listen'
# If you are using an endpoint defined with the API or dashboard, look in your webhook settings
# at https://dashboard.stripe.com/webhooks
endpoint_secret = 'whsec_...'
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
try:
event = json.loads(payload)
except json.decoder.JSONDecodeError as e:
print('⚠️ Webhook error while parsing basic request.' + str(e))
return jsonify(success=False)
if endpoint_secret:
\# Only verify the event if there is an endpoint secret defined
# Otherwise use the basic event deserialized with json
sig_header = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
except stripe.error.SignatureVerificationError as e:
print('⚠️ Webhook signature verification failed.' + str(e))
return jsonify(success=False)
\# Handle the event
if event and event['type'] == 'payment_intent.succeeded':
payment_intent = event['data']['object'] # contains a stripe.PaymentIntent
print('Payment for {} succeeded'.format(payment_intent['amount']))
# Then define and call a method to handle the successful payment intent.
# handle_payment_intent_succeeded(payment_intent)
elif event['type'] == 'payment_method.attached':
payment_method = event['data']['object'] # contains a stripe.PaymentMethod
# Then define and call a method to handle the successful attachment of a PaymentMethod.
# handle_payment_method_attached(payment_method)
else:
# Unexpected event type
print('Unhandled event type {}'.format(event['type']))
return jsonify(success=True)
certifi==2026.1.4
chardet==5.2.0
click==8.3.1
Flask==3.1.2
idna==3.11
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==3.0.3
requests==2.32.5
stripe==15.0.0
toml==0.10.2
Werkzeug==3.1.5
\Stripe\Stripe::setApiKey($stripeSecretKey);
// Replace this endpoint secret with your endpoint's unique secret
// If you are testing with the CLI, find the secret by running 'stripe listen'
// If you are using an endpoint defined with the API or dashboard, look in your webhook settings
// at https://dashboard.stripe.com/webhooks
$endpoint_secret = 'whsec_...';
$payload = @file_get_contents('php://input');
$event = null;
try {
$event = \Stripe\Event::constructFrom(
json_decode($payload, true)
);
} catch(\UnexpectedValueException $e) {
// Invalid payload
echo '⚠️ Webhook error while parsing basic request.';
http_response_code(400);
exit();
}
if ($endpoint_secret) {
// Only verify the event if there is an endpoint secret defined
// Otherwise use the basic decoded event
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
try {
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
} catch(\Stripe\Exception\SignatureVerificationException $e) {
// Invalid signature
echo '⚠️ Webhook error while validating signature.';
http_response_code(400);
exit();
}
}
// Handle the event
switch ($event->type) {
case 'payment_intent.succeeded':
$paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntent
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded($paymentIntent);
break;
case 'payment_method.attached':
$paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached($paymentMethod);
break;
default:
// Unexpected event type
error_log('Received unknown event type');
}
http_response_code(200);
$stripeSecretKey = '<>';
// This is a public sample test API key.
// Don’t submit any personally identifiable information in requests made with this key.
// Sign in to see your own test API key embedded in code samples.
services.AddSingleton(new StripeClient("<>"));
[Route("webhook")]
[ApiController]
public class WebhookController : Controller
const string endpointSecret = "whsec_...";
var stripeEvent = EventUtility.ParseEvent(json);
var signatureHeader = Request.Headers["Stripe-Signature"];
stripeEvent = EventUtility.ConstructEvent(json,
signatureHeader, endpointSecret);
// If on SDK version < 46, use class Events instead of EventTypes
if (stripeEvent.Type == EventTypes.PaymentIntentSucceeded)
{
var paymentIntent = stripeEvent.Data.Object as PaymentIntent;
Console.WriteLine("A successful payment for {0} was made.", paymentIntent.Amount);
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent);
}
else if (stripeEvent.Type == EventTypes.PaymentMethodAttached)
{
var paymentMethod = stripeEvent.Data.Object as PaymentMethod;
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod);
}
else
{
Console.WriteLine("Unhandled event type: {0}", stripeEvent.Type);
}
return Ok();
catch (StripeException e)
{
Console.WriteLine("Error: {0}", e.Message);
return BadRequest();
}
"github.com/stripe/stripe-go/v85"
"github.com/stripe/stripe-go/v85/webhook"
// This is a public sample test API key.
// Don’t submit any personally identifiable information in requests made with this key.
// Sign in to see your own test API key embedded in code samples.
stripe.Key = "<>"
http.HandleFunc("/webhook", handleWebhook)
event := stripe.Event{}
if err := json.Unmarshal(payload, &event); err != nil {
fmt.Fprintf(os.Stderr, "⚠️ Webhook error while parsing basic request. %v\n", err.Error())
w.WriteHeader(http.StatusBadRequest)
return
}
// Replace this endpoint secret with your endpoint's unique secret
// If you are testing with the CLI, find the secret by running 'stripe listen'
// If you are using an endpoint defined with the API or dashboard, look in your webhook settings
// at https://dashboard.stripe.com/webhooks
endpointSecret := "whsec_..."
signatureHeader := req.Header.Get("Stripe-Signature")
event, err = webhook.ConstructEvent(payload, signatureHeader, endpointSecret)
if err != nil {
fmt.Fprintf(os.Stderr, "⚠️ Webhook signature verification failed. %v\n", err)
w.WriteHeader(http.StatusBadRequest) // Return a 400 error on a bad signature
return
}
// Unmarshal the event data into an appropriate struct depending on its Type
switch event.Type {
case "payment_intent.succeeded":
var paymentIntent stripe.PaymentIntent
err := json.Unmarshal(event.Data.Raw, &paymentIntent)
if err != nil {
fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err)
w.WriteHeader(http.StatusBadRequest)
return
}
log.Printf("Successful payment for %d.", paymentIntent.Amount)
// Then define and call a func to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent)
case "payment_method.attached":
var paymentMethod stripe.PaymentMethod
err := json.Unmarshal(event.Data.Raw, &paymentMethod)
if err != nil {
fmt.Fprintf(os.Stderr, "Error parsing webhook JSON: %v\n", err)
w.WriteHeader(http.StatusBadRequest)
return
}
// Then define and call a func to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod)
default:
fmt.Fprintf(os.Stderr, "Unhandled event type: %s\n", event.Type)
}
w.WriteHeader(http.StatusOK)
require github.com/stripe/stripe-go/v85 v85.0.0
// This is a public sample test API key.
// Don’t submit any personally identifiable information in requests made with this key.
// Sign in to see your own test API key embedded in code samples.
Stripe.apiKey = "<>";
// Replace this endpoint secret with your endpoint's unique secret
// If you are testing with the CLI, find the secret by running 'stripe listen'
// If you are using an endpoint defined with the API or dashboard, look in your webhook settings
// at https://dashboard.stripe.com/webhooks
String endpointSecret = "whsec_...";
post("/webhook", (request, response) -> {
String payload = request.body();
Event event = null;
try {
event = ApiResource.GSON.fromJson(payload, Event.class);
} catch (JsonSyntaxException e) {
// Invalid payload
System.out.println("⚠️ Webhook error while parsing basic request.");
response.status(400);
return "";
}
String sigHeader = request.headers("Stripe-Signature");
if(endpointSecret != null && sigHeader != null) {
// Only verify the event if you have an endpoint secret defined.
// Otherwise use the basic event deserialized with GSON.
try {
event = Webhook.constructEvent(
payload, sigHeader, endpointSecret
);
} catch (SignatureVerificationException e) {
// Invalid signature
System.out.println("⚠️ Webhook error while validating signature.");
response.status(400);
return "";
}
}
// Handle the event
switch (event.getType()) {
case "payment_intent.succeeded":
PaymentIntent paymentIntent = (PaymentIntent) stripeObject;
System.out.println("Payment for " + paymentIntent.getAmount() + " succeeded.");
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent);
break;
case "payment_method.attached":
PaymentMethod paymentMethod = (PaymentMethod) stripeObject;
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod);
break;
default:
System.out.println("Unhandled event type: " + event.getType());
break;
}
response.status(200);
return "";
## 次のステップ
#### [Webhook を保護する](https://docs.stripe.com/webhooks.md#verify-events)
Stripe からの確認済みイベントのみを許可して、Webhook エンドポイントを保護します。
#### [本番環境に移行する](https://docs.stripe.com/webhooks.md#register-webhook)
Webhook エンドポイントを本番環境にデプロイし、必要な特定のイベントのみを送信して大規模にイベントを処理する方法をご紹介します。
#### [ベストプラクティス](https://docs.stripe.com/webhooks.md#best-practices)
再試行や重複イベントの管理など、エンドポイントの維持に関するベストプラクティスをご紹介します。
#### [Stripe CLI](https://docs.stripe.com/stripe-cli.md)
Stripe CLI には、Webhook 以外の Stripe アプリケーションのテストに役立つコマンドがいくつか用意されています。