0

Stripe entegrasyon ayarımı doğru şekilde yaptım, çünkü This customer has no attached payment source numaralı bir hatayı döndürüyor. Bu, formun yeterli ödeme bilgisi döndürmediğini belirten bir Şerit hatasıdır. stripeToken formuma geri gönderilmiyor

Bu

olan benim subscriptions.js.coffee: Bu benim şeklidir

stripeResponseHandler = (status, response) -> 
    $form = $('#payment-form') 
    if response.error 
    #Show the errors on the form 
    $form.find('.payment-errors').text response.error.message 
    $form.find('button').prop 'disabled', false 
    else 
    # response contains id and card, which contains additional card details 
    token = response.id 
    #Insert the token into the form so it gets submitted to the server 
    $form.append $('<input type="hidden" name="stripeToken" />').val(token) 
    # and submit 
    $form.get(0).submit() 
    return 

jQuery ($) -> 
    $('payment-form').submit (event) -> 
    $form = $(this) 
    $form.find('button').attr 'disabled', true 
    Stripe.card.createToken $form, stripeResponseHandler 
    false 
    return 

new.html.erb at:

def create 
    @plan = Plan.find(params[:plan_id]) 
    @subscription = CreateSubscription.call(
     @plan, 
     params[:email_address], 
     params[:stripeToken] 
    ) 
    if @subscription.errors.blank? 
     flash[:notice] = "Thank you for your purchase! Please click the link in the email we just sent you to get started." 
     redirect_to authenticated_root_path 
    else 
     render :new 
    end 
    end 

yukarıdaki aramalar bu app/services/create_subscription.rb:

Bu SubscriptionsController#Create olduğunu

<% unless @subscription.errors.blank? %> 
    <%= @subscription.errors.full_messages.to_sentence %> 
<% end %> 

<h2>Subcribing to <%= @plan.name %></h2> 

<%= form_for @subscription, html: {id: 'payment-form'} do |f| %> 
    <input type="hidden" name="plan_id", value="<%= @plan.id %>" /> 
    <span class="payment-errors"></span> 

    <div class="form-row"> 
    <label> 
     <span>Email Address</span> 
     <input type="email" size="20" name="email_address" /> 
    </label> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>Card Number</span> 
     <input type="text" size="20" data-stripe="number" /> 
    </label> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>CVC</span> 
     <input type="text" size="4" data-stripe="cvc" /> 
    </label> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>Expiration (MM/YYYY)</span> 
     <input type="text" size="2" data-stripe="exp-month" /> 
    </label> 
    <span>/</span> 
    <input type="text" size="4" data-stripe="exp-year" /> 
    </div> 

    <button type="submit">Pay Now</button> 
<% end %> 
class CreateSubscription 
    def self.call(plan, email_address, token) 
    user, raw_token = CreateUser.call(email_address) 

    subscription = Subscription.new(
     plan: plan, 
     user: user 
    ) 

    begin 
     stripe_sub = nil 
     if user.stripe_customer_id.blank? 
     binding.pry 
     customer = Stripe::Customer.create(
      source: token, 
      email: user.email, 
      plan: plan.stripe_id 
     ) 

     user.stripe_customer_id = customer.id 
     user.save! 
     stripe_sub = customer.subscriptions.first 
     else 
     customer = Stripe::Customer.retrieve(user.stripe_customer_id) 
     stripe_sub = customer.subscriptions.create(
      plan: plan.stripe_id 
     ) 
     end 

     subscription.stripe_id = stripe_sub.id 

     subscription.save! 
    rescue Stripe::StripeError => e 
     subscription.errors[:base] << e.message 
    end 

    subscription 
    end 
end 

Ben formu stripeToken almıyor biliyoruz nedeni çünkü o create içinde binding.pry kullanmak ve bunu yaparken: hayır params[:stripeToken] olduğunu

00:52:31 web.1    |  14: def create 
00:52:31 web.1    |  15: @plan = Plan.find(params[:plan_id]) 
00:52:31 web.1    | => 16: binding.pry 
00:52:31 web.1    |  17: @subscription = CreateSubscription.call(
00:52:31 web.1    |  18:  @plan, 
00:52:31 web.1    |  19:  params[:email_address], 
00:52:31 web.1    |  20:  params[:stripeToken] 
00:52:31 web.1    |  21: ) 
00:52:31 web.1    |  22: if @subscription.errors.blank? 
00:52:31 web.1    |  23:  flash[:notice] = "Thank you for your purchase! Please click the link in the email we just sent you to get started." 
00:52:31 web.1    |  24:  redirect_to authenticated_root_path 
00:52:31 web.1    |  25: else 
00:52:31 web.1    |  26:  render :new 
00:52:31 web.1    |  27: end 
00:52:31 web.1    |  28: end 
00:52:31 web.1    | 
[1] pry(#<SubscriptionsController>)> params 
00:52:37 web.1    | => {"utf8"=>"✓", "plan_id"=>"1", "email_address"=>"[email protected]", "action"=>"create", "controller"=>"subscriptions"} 

dikkat edin.

00:52:41 web.1    |  10:  begin 
00:52:41 web.1    |  11:  stripe_sub = nil 
00:52:41 web.1    |  12:  if user.stripe_customer_id.blank? 
00:52:41 web.1    | => 13:   binding.pry 
00:52:41 web.1    |  14:   customer = Stripe::Customer.create(
00:52:41 web.1    |  15:   source: token, 
00:52:41 web.1    |  16:   email: user.email, 
00:52:41 web.1    |  17:   plan: plan.stripe_id 
00:52:41 web.1    |  18:  ) 
00:52:41 web.1    | 
[1] pry(CreateSubscription)> token 
00:52:44 web.1    | => nil 

buna sebep ne olabilir ve nasıl düzeltebilirim: Benim create_subscription.rb hizmetinde binding.pry çalıştığınızda Ayrıca

, bu ne alıyorum?

+0

Belki bu paramın bu denetleyicinin beyaz listesinin bir parçası olması gerekir? Güçlü bir params sorunu olabilir gibi görünüyor. –

+0

@Armando - Denetleyicide başka param belirtmem. Diğerleri sadece çalışır. Bunu sadece belirtmem gerekecek mi? – marcamillion

cevap

0

Sonuç olarak, benim sorunum aptal bir hataydı.

jQuery ($) -> 
    $('payment-form').submit (event) -> 
    $form = $(this) 
    $form.find('button').attr 'disabled', true 
    Stripe.card.createToken $form, stripeResponseHandler 
    false 
    return 

konu formu seçicisi içinde: benim CoffeeScript içinde

Bildirim bende bu var. # formun kimliğine ben eklemedim. Buna

$('payment-form').submit (event) -> 

:

$('#payment-form').submit (event) -> 

Bu bir cazibe gibi çalışır

Böylece bir kez bu çizgiyi değiştirdi.

DOH! Faceslap