【问题标题】:StripeJS error: This customer has no attached payment sourceStripe JS 错误:此客户没有附加付款来源
【发布时间】: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


【解决方案1】:

想通了。一个 Rails 菜鸟的错误。我没有更新我的 application_controller.rb 文件,该文件应包含以下几行以供设计:

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:stripe_card_token])
  end

【讨论】:

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