[英]Subscription not creating on custom Stripe form but is creating subscription on Stripe
[英]Creating Subscription with stripe
我正在嘗試使用Stripe創建一個訂閱包。這是我到目前為止所擁有的
我的控制器方法。
def subscription_one
session[:tab] = "$1.99/Month"
@subscription = Subscription.where(user_id:current_user.id)
end
def create
@subscription = Subscription.new(params[:subscription])
if @subscription.save_with_payment
redirect_to @subscription, :notice => "Thank you for subscribing!"
else
render :new
end
end
subscription_one.html.erb
<% if @subscription.present? %>
CREDIT CARD DETAILS PRESENT
<% else %>
<form action="/membership/apply" method="POST" id="payment-form">
<article>
<label class="amount"> <span>Amount: $5.00</span> </label>
</article>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount="500"></script>
<% end %>
在我提供的字段中顯示所有值后,當我提交時,我收到錯誤
ActionController::InvalidAuthenticityToken in MembershipController#create
有任何想法嗎?
幾個問題:
-
形成
您包含的form
是硬編碼的
您遇到的問題是,如Philidor Green
,此表單將不具有Rails提供的正確的authenticity token
。 根據經驗,Rails為大多數HTML元素提供幫助,允許您為應用創建一致的代碼:
<%= form_tag path do %>
<% end %>
你應該使用form_tag
-
訂閱
Subscription.new(params[:subscription])
應該:
def subscribed_one
Subscription.new(subscription_params)
end
private
def subscription_params
params.require(:subscription).permit(:params, :attributes)
end
-
更新
為了解決這個問題,我會這樣做:
#view
<% if @subscription.present? %>
Credit Card Details Present
<% else %>
<%= form_tag membership_apply_path, id: "payment-form" do %>
<%= content_tag :article do %>
<%= label_tag class: "amount" %>
<%= content_tag :span, "Amount: $5.00" %>
<% end %>
<% submit_tag "Susbcribe" %>
<% end %>
<% end %>
#app/views/layouts/application.html.erb
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount="500">
</script>
#app/controllers/subscriptions_controller.rb
def subscription_one
session[:tab] = "$1.99/Month"
@subscription = Subscription.where(user_id:current_user.id)
end
def create
@subscription = Subscription.new(params[:subscription])
if @subscription.save_with_payment
redirect_to @subscription, :notice => "Thank you for subscribing!"
else
render :new
end
end
我找到了一個解決方法,也許簡單到老實說,這是標准的條帶檢查,用for_path替換標准的Form元素。 它似乎有效:
<%= form_tag stripe_user_standart_charge_checkout_path do %>
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="..."
data-amount="999"
data-name="Grégoire Mulliez"
data-description="Timee"
data-zip-code="true"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto"
data-currency="eur">
</script>
<% end %>
stripe_user_standart_charge_checkout_path是你想要的任何路由,不要忘記在你的路由中將它定義為POST(不是get).rb
編輯:你可以使用這種方法檢索小時交易令牌,我還添加了一些html隱藏字段來修復,同時我的交易細節,它的工作就像一個魅力
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.