2014-05-20 9 views
8

Sto usando gemma rubino di banda per (cercare di) compiere due passi:errore Stripe: "L'oggetto della carta deve avere un valore per 'numero'" quando si crea un cliente

  1. Raccogliere una carta usando Stripe del " Checkout" forma
  2. creare un cliente utilizzando il token fornito dal reindirizzamento dalla presentazione sotto forma

il secondo di questi passaggi solleva una Stripe::CardError il cui messaggio è:

The card object must have a value for 'number'

la documentazione delle API descrive il processo: https://stripe.com/docs/tutorials/subscriptions#subscribing-a-customer-to-a-plan

Il mio codice (un controller azione Rails)

def receive_redirect 
    customer = Stripe::Customer.create(
     plan: "stripe_plan_name", 
     card: params[:stripeToken] 
    ) 
end 

params [: stripeToken] è simile al seguente:

{"id"=>"tok_1044TY4GgNdNSosPXdAmIZdt", "livemode"=>"false", "created"=>"1400620581", "used"=>"false", "object"=>"token", "type"=>"card", "card"=>{"id"=>"card_1044TY4GgNdNSosPuDSuygow", "object"=>"card", "last4"=>"9424", "type"=>"Discover", "exp_month"=>"9", "exp_year"=>"2014", "fingerprint"=>"Lz5ASwlmyseG0gYo", "customer"=>"", "country"=>"US", "name"=>"[email protected]", "address_line1"=>"", "address_line2"=>"", "address_city"=>"", "address_state"=>"", "address_zip"=>"", "address_country"=>""}, "email"=>"<my_email>@<my_host>"}

... Come puoi vedere, non mi danno un numero, quindi cosa devo fare?

Pila

striscia 1.8.8 (gemma rubino)
Rails 3.2.13
Rubino 1.9.3

risposta

15

Il valore si dovrebbe essere impostando card: per è solo l'id del token e non l'intero oggetto che stai passando in questo momento. Qualcosa di simile a questo (il mio rubino è un po 'arrugginito):

card: params[:stripeToken][:id] 

potete vedere un esempio di ingressi validi per Customer.create nel Stripe API Docs.

+1

Immagino che tu abbia ragione. Ogni esempio di codice nel documento di riferimento sembra essere sbagliato in questo senso. – JellicleCat

+1

Verifica due volte il codice di acquisto, utilizzando il codice di esempio di Stripe, 'stripeToken' sicuramente dovrebbe essere una semplice stringa contenente un ID token. Sembra che il token sia stato consultato tramite l'API per qualche ragione. – colinm

+1

@colinm Sfortunatamente gli esempi di Stipe sono piuttosto negativi. Ad esempio in questo caso il loro esempio mostra: 'customer.source = stripe_token' Ciò che dovrebbe dire è:' customer.source = stripe_token [: id] 'Non c'è indicazione che voglia l'id non l'intero token. Il messaggio di errore quando si assegna l'intero token è ancora peggio: "deve specificare il tipo di oggetto" Questo ti porta in una buca del coniglio cercando di assegnargli l'oggetto della carta. –

Problemi correlati