2016-01-10 15 views
8

Sto spegnendo il checkout delle strisce con stripe.js. Tutto funziona quando digito una carta, tranne che non passa mai. Ogni volta che fare clic su Invia sto ottenendo un errore che dice:Impossibile caricare un cliente che non ha una striscia di carta attiva

Cannot charge a customer that has no active card 

Ho provato utilizzando sia la scheda di prova e un vero e proprio numero di carta di credito e due di loro mi stanno dando lo stesso errore. Qui è la mia stripe.rb:

class ChargesController < ApplicationController 
    before_action :authenticate_user! 
    def new 
    end 

    def create 
     # Amount in cents 
     @amount = 500 

     customer = Stripe::Customer.create(
     :email => params[:stripeEmail], 
     :source => params[:stripeToken] 
    ) 

     Stripe.api_key = 'sk_test_string' 

charge = Stripe::Charge.create(
:amount => 1000, 
:customer => customer.id, 
:currency => "usd", 
:card => params[:stripeToken] # replace full card details with the string token from our params 
) 

    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     redirect_to new_charge_path 
    end 
end 

Ecco il mio Haml con il javascript embeded:

.well{:style => "margin-left: 0px; position: relative; min-width: 650px; min-height: 180px; max-height: 180px"} 
    = form_tag charges_path :id => 'payment-form' do 
     .row 
     .row 
     %div 
      %label.control-label{:for => "number"} Card Number 
      %input#number{"data-stripe" => "number", :pattern => "[\\d ]*", :placeholder => "**** **** **** ****", :size => "20", :style => "width: 18em", :type => "text", :maxlength => "16"}/ 
     .row 
     %div 
      %label.control-label{:for => "cvc"} CVC 
      %input#cvc{"data-stripe" => "cvc", :pattern => "\\d*", :placeholder => "***", :size => "3", :style => "width: 3em", :type => "text"}/ 
      = image_tag "credit.png" 
     %div 
      %label.control-label Exp (MM/YYYY) 
      %input#exp-month{"data-stripe" => "exp-month", :pattern => "\\d*", :placeholder => "MM", :size => "2", :type => "text"}/ 
      %span/
      %input#exp-year{"data-stripe" => "exp-year", :pattern => "\\d*", :placeholder => "YYYY", :size => "4", :type => "text"}/ 
     .row 
     .price 
      5.00 
     %div 
      %button.btn.btn-primary.btn-large{:type => "submit"} Buy Now 
:javascript 
Stripe.setPublishableKey('pk_test_string'); 
$('#payment-form').submit(function(event) { 
    var form = $(this); 
    form.find('button').prop('disabled', true); 
    Stripe.createToken(form, stripeResponseHandler); 
    return false; 
}); 
function stripeResponseHandler(status, response) { 
    var form = $('#payment-form'); 
    if (response.error) { 
    form.find('.payment-errors').text(response.error.message); 
    form.find('button').prop('disabled', false); 
    } else { 
    var token = response.id; 
    form.append($('<input type="hidden" name="stripeToken">').val(token)); 
    form.get(0).submit(); 
    } 

Edit: sono andato in file registro degli errori stripe e mi sta dando questa:

error: 
    message: "Cannot charge a customer that has no active card" 
    type: "card_error" 
    param: "card" 
    code: "missing" 

Ma ho compilato l'errore della scheda e dovrebbe funzionare. Se aiuta mi sto usando le chiavi di test.

Edit 2: Ecco ciò che viene inviato nella striscia

id: cus_7gzOPGpAB2DMYY 
object: "customer" 
account_balance: 0 
created: 1452402410 
currency: null 
default_source: null 
delinquent: false 
description: "Thank you" 
discount: null 
email: null 
livemode: false 
metadata: 
shipping: null 
sources: 
    object: "list" 
    data: 
    has_more: false 
    total_count: 0 
    url: "/v1/customers/cus_7gzOPGpAB2DMYY/sources" 
subscriptions: 
    object: "list" 
    data: 
    has_more: false 
    total_count: 0 
    url: "/v1/customers/cus_7gzOPGpAB2DMYY/subscriptions" 

risposta

1

Ho contattato la banda e hanno capito. È il modo in cui haml restituisce questo codice. Così, invece di questo:

= form_tag charges_path :id => 'payment-form' do

Si dovrebbe fare questo:

= form_tag charges_path do #payment-form

e funzionerà correttamente.

+3

Sei sicuro ?? –

+0

Tutto funzionava, tranne stripe.js non è riuscito a trovare il modulo di pagamento. – Jakxna360

6

Credo che si dovrebbe mettere in :card => params[:stripeToken]Stripe::Customer.create invece di Stripe::Charge.create