2015-05-19 2 views
5

Ich versuche, einen Kunden zum ersten Mal zu initialisieren. Ich habe ein Formular, wo sie sich anmelden und alles, und sie reichen es ein. Auf dem Client geschieht folgendes:Wie erstellt man einen Kunden und eine Karte in einer einzigen Aktion mit Stripe?

var cardValues = AutoForm.getFormValues('credit-card-form').insertDoc; 
Stripe.createToken(cardValues, function (err, token) { 
    if (!err && token) { 
    Meteor.call('Stripe.initializeCustomer', token); 
    } 
}); 

Auf der Serverside, ich versuche, so etwas zu tun:

Meteor.methods({ 
    'Stripe.initializeCustomer': function (token) { 
    var Stripe = StripeAPI(process.env.STRIPE_KEY); 
    // some validation here that nobody cares about 
    Stripe.customers.create({ 
     source: token 
    }).then(function (customer) { 
     return Stripe.customers.createCard(customer.id, { 
     source: token 
     }) 
    }).catch(function (error) { 
     // need to do something here 
    }) 
    } 
}); 

Es scheint, dass die Streifen API nicht diese

mag

Unhandled rejection Error: You cannot use a Stripe token more than once

Gibt es eine kanonische Möglichkeit, mehrere Anfragen zum Stripe auf dem Server für ein einzelnes Token zu machen?

+0

Es sieht aus wie Sie das gesamte Token-Wörterbuch sind vorbei, wenn sie auf diese Weise denke ich, sollten Sie nur die TokenID übergeben, wenn der Kunde zu schaffen. – hybrdthry911

Antwort

5

Es scheint, dass Sie in dieser Ausgabe laufen lassen, weil Sie versehentlich ein Token wieder zu verwenden versuchen, eine neue Karte für einen Kunden zu erstellen, wenn ohne das Wissen Sie, haben Sie bereits, dass Token verwendet, um diese Karte für zu erstellen dieser Benutzer. Das Erstellen eines Kunden mit einer gespeicherten Karte ist tatsächlich viel einfacher als erwartet: Wenn Sie ein Kundenobjekt mit einem Token initialisieren, geht die Stripe-API voran und speichert diese Karte in Verbindung mit dem neuen Kunden. Das heißt, können Sie sofort weitermachen und eine Gebühr an den Kunden bei der Erstellung machen, wie in:

Stripe.customers.create({ 
    source: token.id 
}).then(function (customer) { 
    Stripe.charge.create({ 
     amount: 1000, 
     currency: 'usd', 
     customer: customer.id 
    }); 
}); 

Für weitere Informationen, würde ich die Streifen docs bei https://support.stripe.com/questions/can-i-save-a-card-and-charge-it-later und https://stripe.com/docs/api/node#create_customer empfehlen.

Lassen Sie mich wissen, ob das Ihr Problem löst!

+0

Wusste nicht, dass es automatisch eine Karte dem Benutzer hinzugefügt, das war viel einfacher als ich dachte. Ist es sicher, das Kundenobjekt in einer serverseitigen Sammlung zu speichern? – corvid

+0

Ja, es ist absolut sicher, alles zu speichern, was von der API zurückgegeben wird, wie Sie möchten. Ein Angreifer kann mit einem Stripe-Kunden oder sogar einer Karten-ID nichts anfangen, ohne auf den privaten API-Schlüssel Ihres Kontos zugreifen zu müssen. – agentcoops

+0

genial, war Tonnen von Hilfe, danke Sir – corvid

Verwandte Themen