目次一覧
状態:-
閲覧数:1,704
投稿日:2019-08-03
更新日:2019-08-12
Q53 / A
Q53-2.追加質問 / A-2 / A-2-1
Q53-2.追加質問 / A-2 / A-2-1
Q53 / A
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「作成時」や「更新時」といった指定しか用意されていない?
恐れ入りますが、こちらを設定されたい理由を伺ってもよろしいでしょうか。
もし、他の手段にてご提案させていただける方法がございましたら、社内でお調べさせていただきたく存じます。
Q53-2.追加質問 / A-2 / A-2-1
Q53-2.追加質問
幾つか疑問点がありましたので、追加で教えてください。
2019/8/5
Q1.'success_url'へ遷移する前に渡すことができる変数について
・「https://stripe.com/docs/payments/checkout/fulfillment」を試して、CHECKOUT_SESSION_IDを受け取ることができたのですが、CHECKOUT_SESSION_IDの他に渡すことができる変数はありますか?
・あるいは、'success_url'末尾へ「?key={変数名}」とすることで任意の変数をGETで受け取ることが出来る仕組みですか?
Q2.Connectアカウントでのイベントについて
「Connectアカウント」という用語自体が分からないのですが、
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している場合、「Connectアカウント」は親子何れのアカウントが該当しますか?
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している状態で、子アカウントで決済が発生した場合(checkout.session.completedイベント?)は、「Connectアカウントでのイベント」に該当しますか?
< その他 >
$_SERVER['HTTP_STRIPE_SIGNATURE'] エラーの件
・説明できる情報が用意できた場合に改めて質問させていただきます
「Customerとして存在しているならば」イベントの件
・任意ユーザへの記事販売を考えています
・ユーザがStripeで記事を購入した後、購入済ユーザであることを自サービス側で判定しようと思っていたのですが、Stripe側で何か便利な仕組みが提供されていれば、購入済ユーザであることの判定処理に使えるかも…、と軽い気持ちで質問しました
・「https://stripe.com/docs/payments/checkout/fulfillment」を試して、CHECKOUT_SESSION_IDを受け取ることができたのですが、CHECKOUT_SESSION_IDの他に渡すことができる変数はありますか?
・あるいは、'success_url'末尾へ「?key={変数名}」とすることで任意の変数をGETで受け取ることが出来る仕組みですか?
Q2.Connectアカウントでのイベントについて
「Connectアカウント」という用語自体が分からないのですが、
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している場合、「Connectアカウント」は親子何れのアカウントが該当しますか?
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している状態で、子アカウントで決済が発生した場合(checkout.session.completedイベント?)は、「Connectアカウントでのイベント」に該当しますか?
< その他 >
$_SERVER['HTTP_STRIPE_SIGNATURE'] エラーの件
・説明できる情報が用意できた場合に改めて質問させていただきます
「Customerとして存在しているならば」イベントの件
・任意ユーザへの記事販売を考えています
・ユーザがStripeで記事を購入した後、購入済ユーザであることを自サービス側で判定しようと思っていたのですが、Stripe側で何か便利な仕組みが提供されていれば、購入済ユーザであることの判定処理に使えるかも…、と軽い気持ちで質問しました
A-2
Q2.Connectアカウントでのイベントについて
「Connectアカウント」という用語自体が分からないのですが、
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している場合、「Connectアカウント」は親子何れのアカウントが該当しますか?
Connectアカウントとは、「子アカウント」という意味でご案内させていただきました。「Connectアカウント」という用語自体が分からないのですが、
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している場合、「Connectアカウント」は親子何れのアカウントが該当しますか?
・例えば、Connect の「Standardアカウント」で「Direct Charge」を設定している状態で、子アカウントで決済が発生した場合(checkout.session.completedイベント?)は、「Connectアカウントでのイベント」に該当しますか?
はい、ご認識の通りでございます。< その他 >
「Customerとして存在しているならば」イベントの件
・任意ユーザへの記事販売を考えています
・ユーザがStripeで記事を購入した後、購入済ユーザであることを自サービス側で判定しようと思っていたのですが、Stripe側で何か便利な仕組みが提供されていれば、購入済ユーザであることの判定処理に使えるかも…、と軽い気持ちで質問しました
恐れ入りますが、ご想定されている設定は、現時点ではStripeではご用意しておりません。「Customerとして存在しているならば」イベントの件
・任意ユーザへの記事販売を考えています
・ユーザがStripeで記事を購入した後、購入済ユーザであることを自サービス側で判定しようと思っていたのですが、Stripe側で何か便利な仕組みが提供されていれば、購入済ユーザであることの判定処理に使えるかも…、と軽い気持ちで質問しました
確かに、ご提案いただいたような設定にて、Customerの2重登録を防ぐことも出来るかと存じますので、今回お寄せいただいたお声をふまえ、弊社にて機能の充実・改善を引き続き行ってまいります。また、何かアップデートがありましたらアナウンスさせていただきます。
A-2-1
'success_url'内での変数について、確認が取れましたのでご連絡いたしました。
恐れ入りますが、現時点でテンプレートとしてご利用いただける変数は、{CHECKOUT_SESSION_ID}のみとなっております。
なお、貴社開発に依拠してしましますが、任意の変数をご追加いただくことは可能となっております。
Stripe Q52.Checkout\Sessionで1回限りの決済終了した際、添付メール自動送信することはできますか?
Stripe Q54.「Webhookイベントで指定したエンドポイント(指定URL)」をユーザーに閲覧させることは可能?