stripeのcheckoutを使って決済機能を実装しているのですが、"You cannot use a Stripe token more than once"というエラーが起きてしまい動かない状態にあります。
私は、今現在stripeのcheckoutを使って、決済機能を実装しようと考えています。showページで、決済機能を配置しているので、showコントローラでリダイレクトやcustomerのcreateを実装しようと考えているのですが、"You cannot use a Stripe token more than once"というエラーが発生して動かない状態にあります。
試したこと:
他のコントローラ(purchase)に配置して、リダイレクトやcustomerのcreateを実装しようと考えたのですが、コントローラのアクションが行われず、そのまま元のページに戻ってしまう状態になってしまいました。
config/routes.rb
resources :plans
post "plans/:id/purchase", to: "plans#purchase"
get "plans/:id/purchase" => "plans#purchase"
controllers/plans_controller.rb
def purchase
@plan = Plan.find(params[:id])
end
def show
@plan = Plan.find(params[:id])
customer = Stripe::Customer.create({
email: params[:stripeEmail],
source: params[:stripeToken],
})
charge = Stripe::Charge.create({
customer: customer.id,
amount: @plan.price,
description: "商品ID:#{@plan.id} 商品名:#{@plan.title}",
currency: "jpy",
})
if customer.save
#ページのリダイレクト
redirect_to "/plans/#{@plan.id}/purchase", notice: "商品を購入しました!"
#購入者にメールを送る
GuiderMailer.guider_payment_mail(self).deliver_now
#投稿者にメールを送る
GuiderMailer.guider_shipment_mail(self).deliver_now
#投稿を削除する
@plan.destroy
else
redirect_to "/plans/#{@plan.id}/fail", notice: "エラーが起きました"
end
rescue Stripe::CardError => e
flash[:error] = e.message
end
views/plans/show.html.erb
<%= form_tag("/plans/#{@plan.id}/purchase") do %>
<script src="https://checkout.stripe.com/checkout.js" style="background: #EBEBEB;" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-amount="<%= @plan.price %>"
data-currency="jpy"
data-description="クレジット決済"
data-name=<%= "#{@plan.title}を購入" %>
data-email=<%= "#{current_guider.email}" %>
data-label="購入する"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto"
data-allow-remember-me="false">
</script>
<% end %>