编码器手册,Stripe引发错误:此客户没有附加的付款来源

时间:2016-03-28 15:54:44

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

我检查了每个可能包含问题的文件,尝试使用其他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;
&#13;
&#13;

这是RegistrationsController:

&#13;
&#13;
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;
&#13;
&#13;

最后,User.js文件:

&#13;
&#13;
$(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;
&#13;
&#13;

我感到很沮丧,虽然我尝试了几种方法来解决它,但我确实找不到问题。会帮助任何人的帮助!!!

2 个答案:

答案 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);
    }