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

StripeQA

目次一覧

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

Q71 / A / 返信

 閲覧数:307 投稿日: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 Q71.CheckoutSessionで、success_urlに指定したURLでzipダウンロードすると、success_urlへ遷移しない 59
2 Stripe Q54.「Webhookイベントで指定したエンドポイント(指定URL)」をユーザーに閲覧させることは可能? 38
3 Stripe Q52.Checkout\Sessionで1回限りの決済終了した際、添付メール自動送信することはできますか? 37
4 Stripe Q21。新規顧客作成時に新規ソースオブジェクトを添付したいのですが、No such token: src_xxxxとなります 37
5 Stripe Q53.Checkout\Sessionの1回限りの支払いで、決済完了したユーザにだけページ表示させたい 36
6 Stripe Q51.Connect Standard アカウント連結後の返り値で、"refresh_token”も保存した方が良いですか? 35
7 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する 35
8 Stripe Q29。日本で、Connect Customアカウント を導入している事例について 35
9 Stripe Q10。Checkout の Simple で、「data-zip-code="true"」追加した場合について 33
10 Stripe Q56. 作成したCheckout\Sessionオブジェクトが破棄されるタイミングは? 33
11 Stripe Q68.WebhookはPUT送信しているのですか? 32
12 Stripe Q66.Webhookエンドポイントが、"connect"内容も含むかどうかを確認するためにはどうすれば良いですか? 32
13 Stripe Q9。Checkout beta version で、webhookを受け取ると、client_reference_idがNULL 32
14 Stripe Q73.CheckoutのSessionオブジェクトをcreateする際、'payment_intent_data'内の'metadata'として渡したデータを、webhookで受け取る件について 32
15 Stripe Q62.Webhook::constructEventで、SignatureVerificationエラーになるのですが… 32
16 Stripe Q17。カード情報を「card object」「source object」へ保存する違いについて 31
17 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? 31
18 Stripe Q76.ウェブサイトドメインのメールを受信できないのですが、他にドメイン所有権を確認する方法はありますか? 30
19 Stripe Q8。Stripe Checkout public beta version について 30
20 Stripe Q22。「新規Customerオブジェクト作成」と「'source'パラメータ指定タイミング」について 29
2024/7/27 8:40 更新
週間人気ページランキング / 7-20 → 7-26
順位 ページタイトル抜粋 アクセス数
1 決済系サービス比較 | 決済(Webサービスビジネス) 3
1 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 3
2 支払い 2
2 Stripe Q47。Charge::create の 'receipt_email' について | QA(Stripe) 2
2 Stripe webhook 配信の問題 / 実際に受け取った警告メールの受信例 2
2 Stripe Q37。PaymentIntentで支払いを行った後、成功画面を表示させるためにはどうすれば良いですか? | QA(Stripe) 2
3 普通送金とは? / 処理の流れ 1
3 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 1
3 Stripe Payments > SOURCES / ソース | documentation(Stripe) 1
3 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 1
3 PaymentIntentで支払を実装する場合の選択肢 /「Payment Intents API」使用によるカードの支払確認方法は2種類 / PaymentMethodオブジェクトは歴史的経緯により3種類ある 1
3 決済用語 1
3 Stripe Q43。payouts スケジュールについて | QA(Stripe) 1
3 「払い戻し」と「チャージバック」の違い | 違い 1
3 EMVレベル1 / EMVレベル2 / EMVCo とは? 1
3 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 1
3 Stripe Q21。新規顧客作成時に新規ソースオブジェクトを添付したいのですが、No such token: src_xxxxとなります | QA(Stripe) 1
3 Stripe オブジェクト | その他エントリー(Stripe) 1
3 LINE LIVE | ライブ配信サービス(課金販売できるプラットフォーム) 1
3 日本で、Connect Standardアカウント を導入している(と思われる)事例 | その他エントリー(Stripe) 1
2024/7/27 1:02 更新