作为参考点,我一直关注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
?
答案 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