Stripe Q71.CheckoutSessionで、success_urlに指定したURLでzipダウンロードすると、success_urlへ遷移しない

StripeQA

目次一覧

 状態:-  閲覧数:350  投稿日:2019-08-28  更新日:2019-09-11  
Q71 / A / 返信

Q71 / A / 返信

 閲覧数:174 投稿日:2019-08-28 更新日:2019-09-11 

Q71


CheckoutSessionで、success_urlに指定したURLでzipダウンロードすると、success_urlへ遷移しない
2019/8/28
Q1.CheckoutSessionで、success_urlに指定したURLでzipダウンロードすると、success_urlへ遷移しないのですが、
success_urlへ遷移しない要件としてはどんなことが挙げられますか?

※success_urlに指定したURLでzipダウンロードしなければ、success_urlへ無事遷移します

Q2.CheckoutSessionで、success_urlへ遷移しなかった場合、success_urlへ(ボタンクリックなどの)手動で遷移させることは出来ますか?

----------------------------------------------------------------
< 試した内容 >
親アカウント
acct_xxxx

子アカウント
acct_xxxx

子アカウントでログを見ると、処理自体は成功しているように見えます。エラー表示されていません
https://dashboard.stripe.com/test/events/evt_1FCGraLlsmkNgPt85x7K1Byv

親アカウントでWebhookを確認すると、処理自体は成功しているように見えます。エラー表示されていません
https://dashboard.stripe.com/test/webhooks/we_1FApFFEfFqi3KPm39pJRvTEu

チェックアウト画面のまま遷移しないURL
https://checkout.stripe.com/pay/cs_test_FKL5xm2RgctI99mMVwCH4J9VlFE0m1uQ8YvGkWJwPjEtoqpzKCPFmHLN#fidkdWxOYHwnPyd1blpxYHZxWlFmQlRBU0NkXDBPc2RdVkxARE9yMEBGfDU1UFJuPXJxV0MnKSd2cXdsdWBEZmZqcGtxJz8nZGZmcVo0QzV%2Fck9JaXZobktiVXE9Jyknd2BjYHd3YHdKd2xibGsnPydtcXF1dj8qKnFsdWgrZHVoK3FqbnxqJyknaGxhdic%2FfidicGxhJz8nZGM8ZDc9MDMoYDJhNigxM2AzKD03ZD0oZ2EwYTxkMDI9ZDU8JyknaHBsYSc%2FJ2cwPWNmM2BgKDYzY2EoMTY2NShkPWZhKGc8MjIyNDVnPT1jNycpJ3ZsYSc%2FJzNgPTA8ZmQ8KDA0NzwoMTc9PShnMTc0KGBkZjM0PGExNDczZCd4KSdnYHFkdic%2FXlh4JSUl


PHPコード抜粋
\Stripe\Checkout\Session::create([
 'payment_method_types' => ['card'],
 'line_items' => [[
   'name' => "デモ",
   'amount' => 200,
 ]],
 'payment_intent_data' => [
   'application_fee_amount' => 200,
 ],
 'success_url' => 'http://'.SERVER_URL.'/stripe/charge-success?session_id={CHECKOUT_SESSION_ID}',
 'cancel_url' => 'http://'.SERVER_URL.'/stripe/charge-cancel',  
], [
 'stripe_account' => 'acct_xxxx', //販売者である子アカウントの「Accountオブジェクトのidプロパティ値」を入力
]);


添付ファイルは、success_urlに記述しているPHPコード抜粋です
▼success_urlに記述しているPHPコード抜粋
<?php
function zipDownload($pPath, $pMimeType = null)
{
   //-- ファイルが読めない時はエラー(もっときちんと書いた方が良いが今回は割愛)
   if (!is_readable($pPath)) { die($pPath); }

   //-- Content-Typeとして送信するMIMEタイプ(第2引数を渡さない場合は自動判定) ※詳細は後述
   $mimeType = (isset($pMimeType)) ? $pMimeType
                                   : (new finfo(FILEINFO_MIME_TYPE))->file($pPath);

   //-- 適切なMIMEタイプが得られない時は、未知のファイルを示すapplication/octet-streamとする
   if (!preg_match('/\A\S+?\/\S+/', $mimeType)) {
       $mimeType = 'application/octet-stream';
   }

   //-- Content-Type
   header('Content-Type: ' . $mimeType);

   //-- ウェブブラウザが独自にMIMEタイプを判断する処理を抑止する
   header('X-Content-Type-Options: nosniff');

   //-- ダウンロードファイルのサイズ
   header('Content-Length: ' . filesize($pPath));

   //-- ダウンロード時のファイル名
   header('Content-Disposition: attachment; filename="' . basename($pPath) . '"');

   //-- keep-aliveを無効にする
   header('Connection: close');

   //-- readfile()の前に出力バッファリングを無効化する ※詳細は後述
   while (ob_get_level()) { ob_end_clean(); }

   //-- 出力
   readfile($pPath);

   //一時ファイル(zipファイル)の削除
   unlink($pPath);

   //-- 最後に終了させるのを忘れない
   exit;
}

$zipName = 'archive.zip';

$zipPath = '/var/www/htmlxxxx/tmp';

$command =  'cd ' . $zipPath . ';' . // exampleディレクトリへ移動
       'zip -rjo '. $zipName . ' /var/www/html/xxxx/file/'; // targetディレクトリを圧縮しmyfile.zipを作成

exec($command);  // コマンド実行
// zipファイルパス
$zipFilePath = $zipPath.'/'.$zipName;

// echo $zipPath;
// exit;
// zip出力
//-- Content-Typeを自動判定せずに指定する時
zipDownload($zipFilePath, 'application/zip');

?>


A


社内にて確認させていただきましたが、zipファイルのダウンロードは、Stripeシステム上ではなく御社のウェブサイト上で発生するものかと存じます。

そのため、リダイレクトがうまくいかない際の対策としては、Webhookを活用してcheckout.session.completed イベントの通知を受け取った後に、別途顧客へメールでファイルやダウンロードリンクを送信できるかと存じます:https://stripe.com/docs/payments/checkout/fulfillment#webhooks

リダイレクトされる場合、もしくはされなかった場合でも、Success_url 内ではなくリダイレクトページ内にZipファイルがダウンロードできるよう開発されることをお薦めいたします。

なお、Stripe Checkout フォームのリダイレクトは、顧客が御社ウェブサイトへ遷移しZipファイルをダウンロードやする前に行われます。そのため、リダイレクトされた後のアクションは、Checkout手順とは別対応となることご留意ください。ダウンロードのページやリンクが表示される前に発生しますが、その後の設定については Checkoutの手順に該当しなくなります。

返信


Stripeシステムの問題ではなく、実装記述場所の問題ですね。

Success_url 内ではなく、その先のページにて処理するよう変更しました。



Stripe Q70.「checkout.session.completed イベント」と「charge.succeeded イベント」と「application_fee.created イベント」の違いについて

Stripe Q72.Unexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com. (Network error [errno 77]: )

コメント投稿(ログインが必要)



類似度ページランキング
順位 ページタイトル抜粋
1 Stripe Q54.「Webhookイベントで指定したエンドポイント(指定URL)」をユーザーに閲覧させることは可能? 38
2 Stripe Q52.Checkout\Sessionで1回限りの決済終了した際、添付メール自動送信することはできますか? 37
3 Stripe Q21。新規顧客作成時に新規ソースオブジェクトを添付したいのですが、No such token: src_xxxxとなります 37
4 Stripe Q53.Checkout\Sessionの1回限りの支払いで、決済完了したユーザにだけページ表示させたい 36
5 Stripe Q51.Connect Standard アカウント連結後の返り値で、"refresh_token”も保存した方が良いですか? 35
6 Stripe Q29。日本で、Connect Customアカウント を導入している事例について 35
7 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する 35
8 Stripe Q10。Checkout の Simple で、「data-zip-code="true"」追加した場合について 33
9 Stripe Q56. 作成したCheckout\Sessionオブジェクトが破棄されるタイミングは? 33
10 Stripe Q68.WebhookはPUT送信しているのですか? 32
11 Stripe Q66.Webhookエンドポイントが、"connect"内容も含むかどうかを確認するためにはどうすれば良いですか? 32
12 Stripe Q9。Checkout beta version で、webhookを受け取ると、client_reference_idがNULL 32
13 Stripe Q73.CheckoutのSessionオブジェクトをcreateする際、'payment_intent_data'内の'metadata'として渡したデータを、webhookで受け取る件について 32
14 Stripe Q62.Webhook::constructEventで、SignatureVerificationエラーになるのですが… 32
15 Stripe Q17。カード情報を「card object」「source object」へ保存する違いについて 31
16 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? 31
17 Stripe Q8。Stripe Checkout public beta version について 30
18 Stripe Q22。「新規Customerオブジェクト作成」と「'source'パラメータ指定タイミング」について 29
19 Stripe Q60. Checkout\SessionオブジェクトとPaymentIntentオブジェクトの関係性は1対1ですか? 29
20 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? 29
2022/7/01 1:06 更新
週間人気ページランキング / 6-24 → 6-30
順位 ページタイトル抜粋 アクセス数
1 クレジットカード決済 | 課金 | 決済用語 201
2 プリペイドカード | カード | 決済用語 157
3 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) | 決済用語 23
4 決済用語 8
5 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) | 決済用語 7
6 ICとは? / ICクレジットカード / ICクレジットカードとは? | 決済用語 6
6 Stripe Q68.WebhookはPUT送信しているのですか? | QA(Stripe) | 決済用語 6
6 「支払、送金、出金」機能を有する決済系サービス(決済サービス) カテゴリー | 決済用語 6
6 電子決済等代行業に関する制度 | Webサービスビジネス | 決済用語 6
6 「支払」機能を有する決済系サービス(決済サービス) カテゴリー | 決済用語 6
6 個人間送金 | Webサービスビジネス | 決済用語 6
6 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) | 決済用語 6
6 EMVCo | クレジットカード仕様(仕様) | 決済用語 6
6 ICクレジットカード | クレジットカード仕様(仕様) | 決済用語 6
7 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) | 決済用語 5
8 Stripe Q9。Checkout beta version で、webhookを受け取ると、client_reference_idがNULL | QA(Stripe) | 決済用語 4
8 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) | 決済用語 4
8 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) | 決済用語 4
8 Stripe 変更履歴 | その他エントリー(Stripe) | 決済用語 4
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) | 決済用語 4
2022/7/1 1:01 更新