如何设置条纹宝石

时间:2014-04-28 05:59:49

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

作为参考点,我一直关注Stripe for Ruby on Rails上的this guide。完成后,我收到此错误:

Cannot charge a customer that has no active card

我现在在我的智慧结束......

我的包中有条纹。我跑了rails g controller payments

这是我设置的付款控制器:

class PaymentsController < ApplicationController
  before_action :session_check

  def index
    redirect_to new_payment_path
  end

  def new
  end

  def create
    @amount = 900

    customer = Stripe::Customer.create(
      :email => current_user.email,
      :card  => params[:stripetoken]
    )

    charge = Stripe::Charge.create(
      :customer    => customer.id,
      :amount      => @amount,
      :description => 'Rails Stripe customer',
      :currency    => 'cad'
    )

    redirect_to account_path
  rescue Stripe::CardError => e
    render text: e.message
  end
end

:session_check是应用程序控制器中的一个方法:

def session_check
  redirect_to login_path unless current_user
end

在路线中resources :payments

这就是我在config/initializers/stripe.rb中所拥有的:

# For Runnning on Development or Test Environments:
# sandbox number is 4242 4242 4242 4242
# any three digit CVC
# expiry date must be in future

Rails.configuration.stripe = {
  :publishable_key => Rails.env.production? ? ENV['PUBLISHABLE_KEY'] : "pk_test_long_hash",
  :secret_key      => Rails.env.production? ? ENV['SECRET_KEY'] : "sk_test_another_long_hash"
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]

payments/new.html.erb内我们有:

<h1 class="text-center"> Upgrade Today </h1>

<div class="row">
  <div class="container">
    <div class="text-center">
      <%= form_tag payments_path do %>
        <article>
          <label class="amount">
            <span>Amount: $9.00</span>
          </label>
        </article>

        <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                data-name="Site Using Stripe"
                data-description="One Month Subscription"
                data-amount="900"
                data-currency="cad"
                data-email="<%= current_user.email %>"
                data-allow-remember-me="true"></script>
      <% end %>
    </div>
  </div>
</div>

payments/create.html.erb非常简单。条纹默认值:

<h2> Thanks, you paid <strong>$5.00</strong>!</h2>

关键问题:为什么我处理测试信用卡时会收到Cannot charge a customer that has no active card

1 个答案:

答案 0 :(得分:2)

我不是这方面的专家,但我确实有一个使用String的应用程序,在我的Create方法中我们有这一行:

:card =&gt; PARAMS [:stripetoken]

Stripe :: Charge中的

,而不是Stripe :: Customer中的

对我来说有意义的是,客户可能拥有多张卡,但每次收费必须提供一张独特的卡。

以下是我的付款模式中的内容

  def save_with_payment(payment)
    if valid?
      Stripe::Charge.create(
        :amount => payment.amount*100, #amount in cents
        :currency => "usd",
        :card => stripe_card_token,
        :description => "description of payment");
      save
    end
    rescue Stripe::InvalidRequestError => e
    logger.error "Stripe error while creating customer: #{e.message}"
    errors.add :base, "There was a problem with your credit card."
    false
  end