【问题标题】:Coder Manual, Stripe raises an error: This customer has no attached payment sourceCoder Manual,Stripe 报错:此客户没有附加支付来源
【发布时间】:2016-07-15 22:08:59
【问题描述】:

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

这里是注册控制器:

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

最后是 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();
  }
});

我感到很沮丧,虽然我尝试了几种方法来解决它,但我无法真正找到问题所在。会感谢任何人的帮助!!!

【问题讨论】:

  • 你使用什么版本的stripe gem?
  • 1.16.1 是 gem 的版本。我尝试的 API 是最新的和 2015-01-11。
  • 1.16.1 已经很老了,比您尝试过的两个 api 版本都旧。您是否考虑过更新到较新的版本?目前1.38.0 是最新版本。
  • 我已经尝试过了,但仍然收到错误“此客户没有附加的付款来源”。虽然在服务器尝试提交事务后我看到 500 Internal Server。
  • 条带化日志给出 400 请求错误。

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


【解决方案1】:

此错误表示创建的客户没有令牌。在您的代码中:

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

【讨论】:

    【解决方案2】:

    我通过添加让我的应用程序正常工作

    .卡片

    User.js 文件中 Stripe createToken 函数的方法。

      if (!error) {
          Stripe.card.createToken({
            number: ccNum,
            cvc: cvcNum,
            exp_month: expMonth,
            exp_year: expYear
          }, stripeResponseHandler);
        }
    

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 2016-05-22
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2018-12-13
      • 2019-01-26
      • 2018-11-07
      • 2018-07-28
      相关资源
      最近更新 更多