2012-07-03 8 views
5

Ho lavorato all'integrazione di Stripe nella mia applicazione Web e non sembra funzionare. Per aiutarmi, ho utilizzato Rails Cast di Ryan Bates sull'integrazione di Stripe. Ogni volta che cerco di eseguire il modulo di pagamento, ricevo un errore che dice "C'era un problema con la mia carta di credito". Penso che il problema risieda nel mio file coffeescript, ma forse mi sbaglio. Ho incluso il token utente stripe come parte del mio modello utente invece di inserirlo nel suo modello di abbonamento. Ecco il codice CoffeeScript ho:Cosa c'è di sbagliato con il mio coffeescript a Stripe?

jQuery -> 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) 
    subscription.setupForm() 

user = 
    setupForm: -> 
    $('#new_user').submit -> 
     $('input[type=submit]').attr('disabled', true) 
     if $('#card_number').length 
     user.processCard() 
     false 
     else 
     true 

    processCard: -> 
    card = 
     number: $('#card_number').val() 
     cvc: $('#card_code').val() 
     expMonth: $('#card_month').val() 
     expYear: $('#card_year').val() 
    Stripe.createToken(card, user.handleStripeResponse) 

    handleStripeResponse: (status, response) -> 
    if status == 500 
     $('#user_stripe_card_token').val(response.id) 
     $('#new_user')[0].submit() 
    else 
     $('#stripe_error').text(response.error.message) 
     $('input[type=submit]').attr('disabled', false) 

Sono un principiante quando si tratta di programmazione, in modo che qualsiasi aiuto che potete dare me sarebbe fantastico.

Ecco l'errore che ottengo nel mio terminale quando provo ad iscriversi:

Parametri: { "utf8" => "✓", "authenticity_token" => "Xas + iA + a3op7jUi57qTr7XWQSClPscA7fR19rkclkEE =", " utente "=> {" stripe_card_token "=>" "," name "=>" Jack "," email "=>" [email protected] "," numero_telefono "=>" 203-xxx-xxxx "," password "=>" [FILTRATO] "," password_confirmation "=>" [FILTRATO] "}," commit "=>" Crea il mio account "}

Utente esistente (0,2 ms) SELECT 1 AS uno da" utenti " WHERE LOWER ("users". "Email") = LOWER ('[email protected] ') LIMIT 1 Errore righe durante la creazione del cliente: ID token non valido:

mio punto di vista per l'iscrizione è questo:

<% provide(:title, 'Sign up') %> 
<h1>Sign up</h1> 

<div class="row"> 
    <div class="span6 offset3"> 
     <%= form_for(@user) do |f| %> 
      <%= render 'shared/error_messages' %> 

      <%= f.hidden_field :stripe_card_token %> 

      <%= f.label :name %> 
      <%= f.text_field :name %> 

      <%= f.label :email %> 
      <%= f.text_field :email %> 

      <%= f.label :phone_number, "Your cell phone number" %> 
      <%= f.text_field :phone_number %> 

      <%= f.label :password %> 
      <%= f.password_field :password %> 

      <%= f.label :password_confirmation, "Password confirmation" %> 
      <%= f.password_field :password_confirmation %> 

      <%= label_tag :card_number, "Credit Card Number" %> 
      <%= text_field_tag :card_number, nil, name: nil %> 

      <%= label_tag :card_code, "Security Code on Card (CVV)" %> 
      <%= text_field_tag :card_code, nil, name: nil %> 

      <%= label_tag :card_month, "Card Expiration" %> 
      <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"}%> 
     <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %> 

    <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> 
    <% end %> 
</div> 
</div> 

<div id="stripe_error"> 
    <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript> 
</div> 

Il mio codice per il mio controller è questo per il metodo create:

def create 
    @user = User.new(params[:user]) 
    if @user.save_with_payment 
    sign_in @user 
     flash[:success] = "Welcome to the Sample App!" 
    redirect_to edit_user_path(current_user) 
    UserMailer.welcome_email(@user).deliver 
    else 
     render 'new' 
    end 
    end 

Il mio codice per la migrazione di database per il token dell'utente è questo:

class AddStripeToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :stripe_customer_token, :string 
    end 
end 

E il codice per il metodo save_with_payment nel mio modello è questo:

def save_with_payment 
    if valid? 
     customer = Stripe::Customer.create(description: email, plan: 1, card: stripe_card_token) 
     self.stripe_customer_token = customer.id 
     save! 
    end 

    rescue Stripe::InvalidRequestError => e 
    logger.error "Stripe error while creating customer: #{e.message}" 
    errors.add :base, "There was a problem with your credit card." 
    false 
    end 
+0

Quali 'status' e' response' stai tornando e cosa ti fa pensare che il tuo CoffeeScript piuttosto che le tue informazioni sulla carta sia il problema? –

+0

In stripe, il mio account è attualmente in modalità test e sto utilizzando il codice della scheda: 4242424242424242, il codice cvc: 123 e una data di scadenza oltre il mese di oggi. Non ricevo un errore dell'applicazione, ma solo un errore che le informazioni della carta non sono corrette. Aggiungerò l'errore che ricevo nel mio terminale alla domanda originale. Grazie per il tuo interesse! – user1483441

+0

Perché stai selezionando 'status == 500' come una condizione di successo? Ciò significa che c'è stato un errore del server sui server Stripe. Dovresti controllare 'if (! Response.error)'. Hai notato che 'stripe_card_token' è vuoto sul tuo server, giusto? –

risposta

0

2 cose che vengono in mente:

  1. si dovrebbe fare un controllo di stato per 200, non 500
  2. Potrebbe essere necessario richiedere il file CoffeeScript nelle application.js
    • per esempio // = richiedono agli utenti
0

potrei sbagliarmi, ma a questo punto:

handleStripeResponse: (status, response) -> 
    if status == 500 
    $('#user_stripe_card_token').val(response.id) 

Oltre a modificare if status == 500 a if status == 200, questa linea $('#user_stripe_card_token').val(response.id) potrebbe essere necessario $('#new_user_stripe_card_token').val(response.id). Assicurati di controllare l'ID di input.

Problemi correlati