Stripeでオンライン決済した後のダウンロードページの作り方
Silicon Valley Super Ware
2020年9月17日
Stripeでオンライン決済した後のダウンロードページの作り方
Stripeでオンライン決済をした際のダウンロードページの作り方について触れておきます。今回紹介している方法は、Stripe側で事前に用意したユーザーインターフェースを利用しています。したがって、決済が完了した後に表示するページのURLはセッションを作成する際に指定する必要があります。
ここで考えなくてはいけないのは、複数の商品(サービス)を販売する場合、提供するファイルへのリンク先も異なります。決済が終わった後にそのページが呼び出される際に何を表示するかを事前に決めておく必要があります。
Stripeが提供する方法は?
要は、URLの最後に「?session_id=XXXX」の様に、セッションIDの情報を渡す方法です。この方法を使うと、表示する際にセッションIDを基に販売した商品(サービス)情報を取得して、必要なダウンロード情報を表示するという方法が一番簡単です。
先日の全体の流れの時の説明では詳しい事を書いていませんでしたが、バックエンドからセッション情報を受け取ってStripeの決済画面を呼び出す前に、商品情報とセッション情報をFirebaseに残すようにします。
決済が完了(成功)した場合は、クエリーパラメータと一緒に指定したページが呼び出されるので、Vueルータでクエリパラメータを読みだして、商品情報を基にページを作成すれば商品、ユーザーごとのダウンロードページの作成が可能です。
Vueで記述する場合は、「created」の所に以下のような記述を書けば、セッションIDを取得できます。
created: function() {
console.log("create");
console.log(this.$route.query.session_id);
},
この方法が比較的簡単に個別のダウンロードページを作成する方法になります。
Firebaseはデータベースの利用ができるので値の受け渡しも簡単です
別の方法としては、Firebaseではなく、VUEXの方にセッション情報を残して対応する事も可能ですが、インターネット接続が遮断されたり、ブラウザーを閉じてしまった場合などは情報が失われる可能性があるのでおすすめしません。バックエンドで対応する方法
オンライン決済処理をするために、バックエンドサービスを導入しているので、別の方法としては、バックエンド側でダウンロードページを用意する方法もあります。この場合も、Stripeの決済画面の処理が成功した場合、一緒にセッションIDをクエリーパラメータとして送って、バックエンド側でこの情報を読み取ってダウンロードページを作成するという方法が利用できます。
this.app.get("/download", async (req, res) => {
// Gets the session information
const sessionId = req.query.session_id
Expressを利用している場合は、ルーティングの処理で「/download」が呼ばれた場合に、リクエストのメッセージから、クエリーパラメータを取り出す事ができます。
この方法はセキュリティ上有利です!
フロントエンドで処理する場合、Firebaseのデータベースアクセスのコードはブラウザーから閲覧可能になるので、セキュリティールールをしっかり設定する必要がありますが、バックエンドで処理する場合、データベースアクセスはフロントエンドからは見られない様にできるため、Firebaseのセキュリティルールの設定は簡単ですみます。バックエンドサイドでレンダリングする方法としては、NUXTやNEXTを含めていろいろありますが、ダウンロードページの作成だけならば、ExpressとExpress-Handlebars(express-handlebars)を使うともう少しシンプルなコードでバックエンド側のレンダリングが可能です。
詳細は、別途説明の投稿を書こうと思いますので今日は紹介だけにします!
クエリーパラメータがない場合
バックエンドで、オンライン決済が成功した場合と失敗した場合の表示するページは、バックエンドがセッションをリクエストする際に送ります。
// Requests a check out session
const session: any = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
line_items: [
{
price_data: price_data,
quantity: 1,
},
],
mode: "payment",
success_url: URL + "download?session_id={CHECKOUT_SESSION_ID}",
cancel_url: URL,
});
つまり、セッションIDがURLに含まれていない場合はエラーにします。
上の例では、商品選択ページ(「URL」)にリダイレクトしています。
こうする事で、支払いを完了した場合のみにダウンロードページを表示できます!
あとは、ダウンロードのリンクを取得して、それをダウンロードページのHTMLに埋め込めば良い事になります。
ダウンロードのリンクは注意が必要なのは別の投稿で紹介した通りです。
FirebaseのStorageのAPIを使ってダウンロードのURLを取得した場合はそのリンクは誰にでも有効で、有効期限もありません。それで問題ない場合はこれを使っても問題ありません。
ダウンロードのリンクは注意が必要なのは別の投稿で紹介した通りです。
FirebaseのStorageのAPIを使ってダウンロードのURLを取得した場合はそのリンクは誰にでも有効で、有効期限もありません。それで問題ない場合はこれを使っても問題ありません。
しかし多くの場合では、リンクの有効期限を設定した方が良い場合が多くなります。
その場合の方法は
その場合の方法は
興味のある方は今すぐお問合せください!
またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。

コメント
コメントを投稿