2016-03-28 17 views
0

問題を含む可能性があるすべてのファイルを確認しましたが、他のAPIバージョンを使用しようとしました。コーダーマニュアル、ストライプでエラーが発生しました:この顧客には、支払い元がありません

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

そして最後に、私たち:

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

ここRegistrationsControllerがある:ここでは

は私User.rbファイルがありますer.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(); 
 
    } 
 
});

私はそれを解決するために、いくつかの方法を試してみましたけれども、私は実際には問題を見つける傾けること、不満を取得しています。誰かの助けを惜しみませんか?

+0

どのようなバージョンの 'stripe' gemを使用しますか? – spickermann

+0

1.16.1はgemのバージョンです。私が試したAPIは、最新のAPIと2015-01-11でした。 –

+0

'1.16.1'はかなり古く、あなたが試した両方のバージョンより古いです。あなたは新しいバージョンに更新することを検討しましたか?現時点では、「1.38.0」が最新のバージョンです。 – spickermann

答えて

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

0

私はuser.jsファイルにストライプcreateToken機能へ

.card

方法を追加することにより、作業私のアプリを得ました。

if (!error) { 
     Stripe.card.createToken({ 
     number: ccNum, 
     cvc: cvcNum, 
     exp_month: expMonth, 
     exp_year: expYear 
     }, stripeResponseHandler); 
    } 
関連する問題