🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3414閲覧

stripeのcheckoutを使って決済機能を実装しているのですが、リダイレクトができない状態になっています。

avicii

総合スコア49

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/10/04 09:06

編集2019/10/06 13:00

今現在私は、stripeのcheckoutを使い、決済機能を実装しています。決済の処理はすることができるのですが、決済後のリダイレクトを指定することができない状態にいます。(元のページ(plans/showページ)に戻ってしまう状態にあります。)もしわかる方がいらしたら、教えて頂きたいです。

イメージ説明
イメージ説明

controller

1 class ChargesController < ApplicationController 2 3 def create 4 @plan = Plan.find(params[:id]) 5 customer = Stripe::Customer.create({ 6 email: params[:stripeEmail], 7 source: params[:stripeToken], 8 }) 9 charge = Stripe::Charge.create({ 10 customer: customer.id, 11 amount: @plan.price, 12 description: "商品ID:#{@plan.id} 商品名:#{@plan.title}", 13 currency: "jpy", 14 15 }) 16 payment.email = customer.email 17 #rails側の売れたとき処理 18 redirect_to purchase_path, notice: 'Event was successfully created.' 19 20 21 rescue Stripe::CardError => e 22 flash[:error] = e.message 23 redirect_to create_charge_path 24 end 25end 26

plans/showページ

view

1<%= form_tag @plan, url: :charges, class: "payment-go" do %> 2 <script src="https://checkout.stripe.com/checkout.js" style="background: #EBEBEB;" class="stripe-button" 3 data-key="<%= Rails.configuration.stripe[:publishable_key] %>" 4 data-amount="<%= @plan.price %>" 5 data-currency="jpy" 6 data-description="クレジット決済" 7 data-name=<%= "#{@plan.title}を購入" %> 8 data-email=<%= "#{current_guider.email}" %> 9 data-label="購入する" 10 data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 11 data-locale="auto" 12 data-allow-remember-me="false"> 13 </script> 14<% end %> 15

gemfile

1group :development, :test do 2 # Call 'byebug' anywhere in the code to stop execution and get a debugger console 3 gem 'byebug' 4 gem "dotenv-rails" 5end 6 7gem 'stripe' 8

routes.rb

1post "plans/:id/charge", to: "charges#create", as: "charge"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例外発生時にcreate_charge_pathへリダイレクトされているのと同様、
Chargeが成功したらredirect_toで完了画面へリダイレクトしてあげればよいと思います。
(そういうことではなく別の方法を探されてますか?)

投稿2019/10/05 15:13

8zca

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

avicii

2019/10/05 17:29

その方法でしたいのですが、コントローラーがうまく機能していなくて、viewの決済のコードだけで動いてしまっていて、リダイレクトできない状態にあります。何か原因があるでしょうか。
8zca

2019/10/06 03:50

charges#createへリクエストが行っているか怪しいですね・・。 railsのログを見ていただいて、 Started POST "/plans/<id>/charge" のようなログが出ているか確認していただけますか? また、stripeのダッシュボードを見たときにテストで決済したレコードが入っているかも見ていただきたいです。 試しに私の環境でやってみましたが <%= form_tag @plan, url: :charges, class: "payment-go" do %> ではうまくポストされず <%= form_tag charge_path(@plan), class: "payment-go" do %> にして動かしてます。
avicii

2019/10/06 12:22 編集

railsのログは、charge POST /plans/:id/charge(.:format) charges#createです。 stripeのダッシュボードでは、テストで決済したレコードが入っています!! <%= form_tag charge_path(@plan), class: "payment-go" do %>で実行したのですが、それでも、元のページに戻ってしまいます。
avicii

2019/10/06 12:36 編集

・今ある投稿で、chargeを足しても、No route matches [GET] "/plans/47/charge"の状態にあります。 ・あと、決済後のshowページのURLが、http://localhost:3000/plans/47?utf8=✓&authenticity_token=2aAfxN22y%2BDeg5CZmY33333q8P7%2Fn3UgMr4QZXTnkC6JsFlaL%BAqOmCh44d3Xp44uGKvmuUR433445imtkY9%3D%3D&stripeToken=tok_1FQ44KYeddud4444&stripeTokenType=card&stripeEmail=hond44a770810%40gmail.comのようになっています。 これらも原因でしょうか?
8zca

2019/10/06 12:35

ちゃんとcharges#createが呼ばれてるのですね。 でしたら最初の回答の通り、redirect_toで完了ページに飛ばしてあげる処理を書くだけでよいと思うのですが。。 #rails側の売れたとき処理 のあとに redirect_to 完了ページのpath でリダイレクトされるはずです。
avicii

2019/10/06 13:23 編集

今リダイレクトするページを作ったのですが、そのページへリダイレクトされません。    get "/purchase" => "charges#purchase" chargesコントローラのdef createに足したのですが、元のページにしか戻らない状態にあります。     redirect_to purchase_path, notice: 'Event was successfully created.' http://localhost:3000/purchaseに入力したら、出るのですが、決済処理後にページ移動がまだできない状態になっています。
8zca

2019/10/06 14:33

解決済みに更新いただいていますが、遷移できたということでしょうか?
avicii

2019/10/06 15:46 編集

はい、plansコントローラの中に、post "plans/:id/purchase", to: "plans#purchase" get "plans/:id/purchase" => "plans#purchase"を作るようにしたら、動くようになりました。 貴重な時間をありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問