【发布时间】:2017-03-13 11:21:19
【问题描述】:
之前有人问过这个问题,但是在任何一个链接上都没有突出的解决方案,并且在尝试了链接中提供的所有方法后问题仍然存在。我正在尝试生成条带订阅计划,每次完成该过程时,我都会收到错误消息“此客户没有附加的付款来源”。正如您在屏幕截图中看到的,stripe_card_token 也被生成了,我也有来自 JS 的 console.log 令牌,它也被生成了。我已经附上了所有相关的代码文件。
此项目的 Github 链接:https://github.com/arpit016/picture-app
Stripeerror 截图
user.rb 文件
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :plan
attr_accessor :stripe_card_token
def save_with_payment
if valid?
customer = Stripe::Customer.create(
:source => stripe_card_token,
:email => email,
:plan => plan_id
)
self.stripe_customer_token = customer.id
save!
end
end
end
users.js 文件
$(document).ready(function() {
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'));
$('#form-submit-btn').click(function(event) {
event.preventDefault();
$('input[type=submit]').prop('disabled', true);
var error = false;
if (!error) {
Stripe.card.createToken($('#new_user'), stripeResponseHandler);
}
return false;
}); //form submission
function stripeResponseHandler(status, response){
if (status == 200){
//Get a reference to the form
var f = $('#new_user');
//Get the token from the response
var token = response.id;
console.log("Token:" + token);
//Add the token to the form
f.append('<input type="hidden" name="user[stripe_card_token]" value="' + token + '" />');
console.log(f)
//Submit the form
f.get(0).submit();
}
else {
$('#stripe_error').text(response.error.message).show();
$('input[type=submit]').attr('disabled', false)
}
}
});
设计修改后的注册控制器
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
def select_plan
unless params[:plan] && (params[:plan] == '1' || params[:plan] == '2')
flash[:warning] = "Please select a valid membership"
redirect_to root_url
end
end
end
【问题讨论】:
-
@Deepak 我已经看到该链接,并且在创建客户时我已经在使用源而不是卡
标签: ruby-on-rails ruby-on-rails-4 devise stripe-payments