2015-10-06 2 views
5

Sto costruendo un'applicazione (basata su risorsa online). Puoi iscriverti o accedere con un dispositivo. Quindi, è possibile acquistare un prodotto. Oppure crea la tua lista e vendi i tuoi prodotti.Rails - Stripe :: InvalidRequestError (Deve fornire origine o cliente.)

Sto integrando Stripe. Quando creo il Charge, ottengo questo errore nella console: Stripe::InvalidRequestError (Must provide source or customer.).

ecco il codice del orders_controller.rb per l'azione di carica:

Stripe.api_key = ENV["STRIPE_API_KEY"] 
token = params[:stripeToken] 

begin 
    charge = Stripe::Charge.create(
    :amount => (@listing.price * 100).floor, 
    :currency => "usd", 
    :card => token 
    ) 
    flash[:notice] = "Thanks for ordering!" 
rescue Stripe::CardError => e 
    flash[:danger] = e.message 
end 

Naturalmente sto dare un'occhiata nella Documentazione Stripe API qui: Charge documentation example e qui: Charge full API Reference

I Non sono sicuro di come gestire lo :resource o customer. Ho visto in altri materiali sul web che alcune persone creano un cliente. In altri siti si dice che lo :card è deprecato, quindi sono un po 'confuso.

Lascerò il repository github del mio progetto e mi sento libero di dare un'occhiata. Sto provando a trattare anche con Trasferimenti e Destinatari. Project Repository

Grazie.

risposta

8

Come indicato nello docs, stripe si aspetta che venga menzionato cliente o fonte durante la creazione di un addebito. Quindi, si sia necessario

  • Creare un cliente su striscia (se si vuole far pagare quel cliente anche in futuro) dal token che avete ricevuto, e ricordare che cliente durante la creazione di una carica,

    customer = Stripe::Customer.create(source: params[:stripeToken]) 
    
    charge = Stripe::Charge.create({ 
        :amount => 400, 
        :currency => "usd", 
        :customer => customer.id, 
        :description => "Charge for [email protected]" 
    }) 
    
  • Oppure, se non si vuole creare un cliente, poi parlare direttamente di token ricevuto come fonte,

    Stripe::Charge.create({ 
        :amount => 400, 
        :currency => "usd", 
        :source => params[:stripeToken], 
        :description => "Charge for [email protected]" 
    }) 
    
+0

Grazie. Sei severo. Ma ora ho solo un altro errore: 'stripe :: invalidrequesterror (impossibile trasferire a un destinatario che non ha un account di pagamento predefinito)' Dare un'occhiata alla documentazione. Il processo per la mia app è questo: User Sing Up. Quindi, si crea un nuovo prodotto e quando si crea questo prodotto, si aggiungono le informazioni del proprio conto bancario. Quindi, aggiungiamo il tuo account, sei in grado di acquistare. –

+0

Osservando l'errore, sembra che tu stia trasferendo fondi a qualche destinatario. Quale numero di conto stai utilizzando per il trasferimento? Avete controllato la sezione [testing] (https://stripe.com/docs/testing) nella documentazione Stripe, che ha numeri di account di prova? –