【问题标题】:Creating Subscription with stripe使用条带创建订阅
【发布时间】:2014-07-11 07:56:09
【问题描述】:

我正在尝试使用 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

有什么想法吗?

【问题讨论】:

  • 手动创建表单是不好的做法,因为表单中没有 csrf-token 在抬头 InvalidAuthenticityToken

标签: ruby-on-rails ruby ruby-on-rails-4 stripe-payments


【解决方案1】:

我找到了一种解决方法,说实话可能很简单,它是标准的条带结帐,用 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 是您想要的任何路线,不要忘记在您的 routes.rb 中将其定义为 POST(而不是获取)

编辑:您可以使用此方法检索小时交易令牌,我还添加了一些 html 隐藏字段来恢复,同时我的交易详细信息,它的工作就像一个魅力

【讨论】:

    【解决方案2】:

    几个问题:

    --

    表格

    您包含的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-05
      • 2019-07-07
      • 2021-12-03
      • 1970-01-01
      • 2018-09-20
      • 2023-03-07
      • 2015-02-20
      • 2013-09-05
      相关资源
      最近更新 更多