カテゴリー:
QA
閲覧数:322 配信日:2019-08-03 11:05
Q53
Checkout\Sessionの1回限りの支払いで、決済完了したユーザにだけページ表示させたい
2019/8/3
Q1.'success_url'へ遷移する前に変数を渡し、その変数を'success_url'で受け取ることができますか?
Q2.決済完了したユーザにだけ確実に指定ページ表示させるためには、WEBHOOK ENDPOINT を使用するべきですか?
Q3.「checkout.session.completed」イベントを受け取るWebhookのURLを複数登録した場合について
「checkout.session.completed」イベントが発生したら、同設定の全URLで処理が実行されますか?
Q4.特定のリクエスト先からの「checkout.session.completed」イベントの場合は、という紐づけは出来ない?
下記で動的にエンドポイント作成できるようですが、例えば、特定のリクエスト先からの「checkout.session.completed」イベントの場合だけ特定のWebhookのURLへアクセスすることは出来ますか?
https://stripe.com/docs/api/webhook_endpoints/object
Q5.WebhookのURL登録を、「プログラムで設定する場合」と「ダッシュボードで設定する場合」について
・何か違いはありますか?
・方法が違うだけで結果は同じ?
Q6.https://dashboard.stripe.com/test/webhooks
下記は何が異なりますか?
・アカウントからイベントを受信するエンドポイント
・Connect アプリケーションからイベントを受信するエンドポイント
・Connect決済かどうかで、入力場所が異なるということですか?
・パラメータ('stripe_account')を送信すれば、Connect決済という判断?
<参考 使用予定のコードのイメージ。PHP+JavaScript>
Q7.決済完了したユーザにだけページ表示したい
・WebhookのURLへ直接アクセスされたくないのですが、
if ($event->type == 'checkout.session.completed') {
だけではダメで、下記も必要ですか?
$endpoint_secret
Q8.PHPのWebhookエンドポイント
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
・上記箇所で「Undefined index: HTTP_STRIPE_SIGNATURE 」エラーが表示されるのですが、気にする必要はありますか?
・何らかのサーバの設定がもし必要ならばと思い質問しました
・動作自体は期待した通り動作しています
Q9.Webhookエンドポイントに対するイベント指定について
・「Customerとして存在しているならば」というイベント指定はできますか?
・イベントなので、Customer「作成時」や「更新時」といった指定しか用意されていない?
Q2.決済完了したユーザにだけ確実に指定ページ表示させるためには、WEBHOOK ENDPOINT を使用するべきですか?
Q3.「checkout.session.completed」イベントを受け取るWebhookのURLを複数登録した場合について
「checkout.session.completed」イベントが発生したら、同設定の全URLで処理が実行されますか?
Q4.特定のリクエスト先からの「checkout.session.completed」イベントの場合は、という紐づけは出来ない?
下記で動的にエンドポイント作成できるようですが、例えば、特定のリクエスト先からの「checkout.session.completed」イベントの場合だけ特定のWebhookのURLへアクセスすることは出来ますか?
https://stripe.com/docs/api/webhook_endpoints/object
Q5.WebhookのURL登録を、「プログラムで設定する場合」と「ダッシュボードで設定する場合」について
・何か違いはありますか?
・方法が違うだけで結果は同じ?
Q6.https://dashboard.stripe.com/test/webhooks
下記は何が異なりますか?
・アカウントからイベントを受信するエンドポイント
・Connect アプリケーションからイベントを受信するエンドポイント
・Connect決済かどうかで、入力場所が異なるということですか?
・パラメータ('stripe_account')を送信すれば、Connect決済という判断?
<参考 使用予定のコードのイメージ。PHP+JavaScript>
\Stripe\Stripe::setApiKey("sk_test_xxxx"); //プラットフォーム提供である親アカウントのシークレットキー
$checkoutSession = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
'name' => "デモ",
'amount' => 200,
'currency' => 'jpy',
'quantity' => 10,
]],
'payment_intent_data' => [
'application_fee_amount' => 200,
],
'success_url' => 'https://xxxx/thanks.php',
'cancel_url' => 'https://xxxx/cancel.php',
], [
'stripe_account' => 'acct_xxxx', //販売者である子アカウントの「Accountオブジェクトのidプロパティ値」を入力
]);
?>
<button id="checkout-button" role="link">Pay</button>
<script src="https://js.stripe.com/v3"></script>
<script>
const stripe = Stripe('pk_test_xxxx', { //プラットフォーム提供である親アカウントの公開可能キー
stripeAccount: 'acct_xxxx', //販売者である子アカウントの「Accountオブジェクトのidプロパティ値」を入力
});
const checkoutButton = document.getElementById('checkout-button');
checkoutButton.addEventListener('click', function () {
stripe.redirectToCheckout({
sessionId: '<?php echo $checkoutSession->id; ?>'
})
.then(function (result) {
});
});
</script>
Q7.決済完了したユーザにだけページ表示したい
・WebhookのURLへ直接アクセスされたくないのですが、
if ($event->type == 'checkout.session.completed') {
だけではダメで、下記も必要ですか?
$endpoint_secret
Q8.PHPのWebhookエンドポイント
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
・上記箇所で「Undefined index: HTTP_STRIPE_SIGNATURE 」エラーが表示されるのですが、気にする必要はありますか?
・何らかのサーバの設定がもし必要ならばと思い質問しました
・動作自体は期待した通り動作しています
Q9.Webhookエンドポイントに対するイベント指定について
・「Customerとして存在しているならば」というイベント指定はできますか?
・イベントなので、Customer「作成時」や「更新時」といった指定しか用意されていない?
A
Q1.'success_url'へ遷移する前に変数を渡し、その変数を'success_url'で受け取ることができますか?
変数を'success_url'で受け取ることは可能でございます。“success_url”については、下記にも記載がございます:https://stripe.com/docs/payments/checkout/fulfillment#webhooks
Q2.決済完了したユーザにだけ確実に指定ページ表示させるためには、WEBHOOK ENDPOINT を使用するべきですか?
Stripeでは、”checkout.session.completed”のイベントが送信された(ステータス:2xx)後に、'success_url'へ遷移をさせます。また、もし上記イベントが10秒以内に送信されなかった際には、自動的に'success_url'へ遷移されます。
そのため、一つの方法として、”checkout.session.completed”をWebhookイベントとしてご設定いただくことをご検討いただけるかと存じます。
Q3.「checkout.session.completed」イベントを受け取るWebhookのURLを複数登録した場合について 「checkout.session.completed」イベントが発生したら、同設定の全URLで処理が実行されますか?
はい、ご認識の通りでございます。Q4.特定のリクエスト先からの「checkout.session.completed」イベントの場合は、という紐づけは出来ない?
ご存知かとは存じますが、Webhookのご設定をされることで、アカウント上で発生するイベントについて通知を受け取ることが可能です。また、作成されたイベントが発生しますと、該当のリクエスト先に関してのイベントが送信されます。
Q5.WebhookのURL登録を、「プログラムで設定する場合」と「ダッシュボードで設定する場合」について
ご設定の結果に違いはございませんが、プログラムでWebhookの設定を行う方法でのみ、Connectアカウントでのイベントを受け取るかをご設定いただけます。Connectアカウントでのイベントを受信されたい場合には、”connect”というパラメータをtrueにしていただければと存じます。
Webhookの設定方法の違いについては、下記に記載がございます:https://stripe.com/docs/webhooks/setup#configure-webhook-settings
Q6.https://dashboard.stripe.com/test/webhooks
下記は何が異なりますか?
・アカウントからイベントを受信するエンドポイント
・Connect アプリケーションからイベントを受信するエンドポイント
・Connect決済かどうかで、入力場所が異なるということですか?
・パラメータ('stripe_account')を送信すれば、Connect決済という判断?
Q5でご案内しました通り、Connectアカウントからのイベントを受信されるには、プログラム(API)にてご設定いただきますようお願い申し上げます。下記は何が異なりますか?
・アカウントからイベントを受信するエンドポイント
・Connect アプリケーションからイベントを受信するエンドポイント
・Connect決済かどうかで、入力場所が異なるということですか?
・パラメータ('stripe_account')を送信すれば、Connect決済という判断?
また、Connectアカウントからのイベントを受信された際には、”account”オブジェクトにて、該当のConnectアカウントIDを取得していただけます。
ConnectでのWebhookのご利用に関しては、下記にも記載がございます:https://stripe.com/docs/connect/webhooks
Q7.決済完了したユーザにだけページ表示したい
・WebhookのURLへ直接アクセスされたくないのですが、
if ($event->type == 'checkout.session.completed') {
だけではダメで、下記も必要ですか?
$endpoint_secret
Q1でご案内しました通り、'success_url'には変数を渡すことが可能ですので、これにより、ご想定されておりますようなケースや、悪意のある顧客からの乱用に対して対応いただけるかと存じます。・WebhookのURLへ直接アクセスされたくないのですが、
if ($event->type == 'checkout.session.completed') {
だけではダメで、下記も必要ですか?
$endpoint_secret
なお、同じような事象をご懸念されているユーザのために、Stripeでは幾つかの'success_url'の設定方法を下記にてご案内しております:https://stripe.com/docs/payments/checkout/fulfillment
Q8.PHPのWebhookエンドポイント
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
・上記箇所で「Undefined index: HTTP_STRIPE_SIGNATURE 」エラーが表示されるのですが、気にする必要はありますか?
こちらのご質問に関して明確にご案内させていただくには、該当のエラーについて社内で確認させていただきたく存じます。$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
・上記箇所で「Undefined index: HTTP_STRIPE_SIGNATURE 」エラーが表示されるのですが、気にする必要はありますか?
つきましては、エラーについて下記のような情報をご提供いただけますでしょうか。
・エラーが確認できるスクリーンショット
・該当のWebhookイベントを設定されているStripeアカウント
・エラーを受信された経緯
Q9.Webhookエンドポイントに対するイベント指定について
・「Customerとして存在しているならば」というイベント指定はできますか?
・イベントなので、Customer「作成時」や「更新時」といった指定しか用意されていない?
ご認識の通り、Webhookのイベントはアカウントで発生した事象によって設定いただけますので、「Customerとして存在しているならば」というようなイベントの設定はございません。・「Customerとして存在しているならば」というイベント指定はできますか?
・イベントなので、Customer「作成時」や「更新時」といった指定しか用意されていない?
恐れ入りますが、こちらを設定されたい理由を伺ってもよろしいでしょうか。
もし、他の手段にてご提案させていただける方法がございましたら、社内でお調べさせていただきたく存じます。