我检查了每个可能包含问题的文件,尝试使用其他API版本,因此基本上尝试了我在互联网上找到的所有内容。
这是我的User.rb文件:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :plan
attr_accessor :stripe_card_token
def save_with_payment
if valid?
customer = Stripe::Customer.create(description: email, plan: plan_id, source: stripe_card_token)
self.stripe_customer_token = customer.id
save!
end
end
end
&#13;
这是RegistrationsController:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :select_plan, only: :new
def create
super do |resource|
if params[:plan]
resource.plan_id = params[:plan]
if resource.plan_id == 2
resource.save_with_payment
else
resource.save
end
end
end
end
private
def select_plan
unless params[:plan] && (params[:plan] == '1' || params[:plan] == '2')
redirect_to root_url
end
end
end
&#13;
最后,User.js文件:
$(document).ready(function(){
Stripe.setPublishableKey($('meta[name="stripe_key"]').attr('content'));
$("#from-submit-btn").click(function(event) {
event.preventDefault();
$('input[type=submit]').attr('disabled', true);
var error = false;
var ccNum = $('#card_number').val(),
cvcNum = $('#card_code').val(),
expMonth = $('#card_month').val(),
expYear = $('#card_year').val();
if (!error) {
Stripe.createToken({
number: ccNum,
cvc: cvcNum,
exp_month: expMonth,
exp_year: expYear
}, stripeResponseHandler);
}
});
function stripeResponseHandler(status, response) {
var f = $("#new_user");
var token = response.id;
f.append('<input type="hidden" name="user[stripe_card_token]" value="' + token + '" />');
f.get(0).submit();
}
});
&#13;
我感到很沮丧,虽然我尝试了几种方法来解决它,但我确实找不到问题。会帮助任何人的帮助!!!
答案 0 :(得分:0)
此错误表示创建的客户没有令牌。在您的代码中:
customer = Stripe::Customer.create(description: email, plan: plan_id, source: stripe_card_token)
stripe_card_token
可能是nil
或空字符串。
请注意,在JavaScript代码中,在stripeResponseHandler
回调中,您应首先检查response.error
以确保令牌创建成功。您可以在此处找到示例:https://stripe.com/docs/custom-form#step-3-sending-the-form-to-your-server。
答案 1 :(得分:0)
我通过添加
让我的应用正常工作.card
User.js文件中Stripe createToken函数的方法。
if (!error) { Stripe.card.createToken({ number: ccNum, cvc: cvcNum, exp_month: expMonth, exp_year: expYear }, stripeResponseHandler); }