Q71 / A / 返信

「決済」及び「開発」関連用語集

カテゴリー: QA  閲覧数:291 配信日:2019-08-28 11:51


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 内ではなく、その先のページにて処理するよう変更しました。


週間人気ページランキング / 4-19 → 4-25
順位 ページタイトル抜粋 アクセス数
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 7
2 EMVCo | クレジットカード仕様(仕様) 6
3 EMVレベル1 / EMVレベル2 / EMVCo とは? 5
4 クレジットカード決済 | 課金 4
5 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 3
5 Squareは、デジタルコンテンツ(デジタル情報)の配信利用が認められないサービス | 「支払」機能を有する決済系サービス(決済サービス) 3
6 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2
6 Off-session Payments with Payment Intents / Payment Intents を使用したオフセッション支払 2
6 Stripe Q32。Webhook のエンドポイントから適切な値を返さなかったときの停止措置について | QA(Stripe) 2
6 「支払」と「送金」の違い | 違い 2
6 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 2
6 プリペイドカード | カード 2
7 振込 | 送金 1
7 IBAN | 海外送金(送金) 1
7 Stripe Q11。テストAPIで、実際のカード番号を入力したらどうなりますか? | QA(Stripe) 1
7 Stripe Q53.Checkout\Sessionの1回限りの支払いで、決済完了したユーザにだけページ表示させたい | QA(Stripe) 1
7 ツイキャスとは?/ 特徴 / キートスとは? 1
7 note | 課金販売できるプラットフォーム 1
7 Stripe webhook 配信の問題 / 実際に受け取った警告メールの受信例 1
7 Stripe webhook 配信の問題 | その他エントリー(Stripe) 1
2024/4/26 1:02 更新
指定期間人気ページランキング / 2020-5-28 → 2024-4-25
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2010
2 EMVCo | クレジットカード仕様(仕様) 1268
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 943
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 901
5 クレジットカード決済 | 課金 880
6 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 876
7 決済用語 855
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 824
9 Omise | 「支払」機能を有する決済系サービス(決済サービス) 767
10 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 761
11 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 741
12 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 738
13 EMVレベル1 / EMVレベル2 / EMVCo とは? 727
14 YouTube | 動画サービス(課金販売できるプラットフォーム) 670
15 プリペイドカード | カード 645
16 EPUB | ファイルフォーマット(電子書籍) 587
17 サブスクリプション | 課金 563
18 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 544
19 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 542
20 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/4/26 1:02 更新