Ich habe mit Meteor und dem Stripe-Paket gearbeitet, um zu versuchen, einen Kunden zu machen. So Zuerst habe ich meine Client-Seite Code haben, die ein Verfahren auf dem Server ruft so, wenn darauf geklickt i in den Client.js haben:Erhalten Meteor Anruf zur Rückkehr Streifen Zahlungen Antwort
Meteor.call('usersignup', function (error, result) {
console.log (result);
});
So nennt dies die Methode auf den server.js:
var Future = Npm.require('fibers/future');
var stripe = StripeAPI('my key'); // secret stripe API key
Meteor.methods({
usersignup: function(cusEmail){
var fut = new Future();
stripe.customers.create(
{ email: cusEmail },
function(err, customer) {
if (err) {
console.log(err);
fut.ret;
}
fut.ret(customer);
}
);
return fut.wait();
},
userfail: function(cusid){
var fut = new Future();
stripe.customers.retrieve(cusid, function(err, result) {
if(err){
console.log(err);
fut.ret;
}
fut.ret(err, result);
});
return fut.wait();
}
});
Jetzt funktioniert das und ich erstelle einen Kunden, wenn ich mich beim stripe.com-Dashboard anmelde, aber ich versuche, die Antwort an den Client zurückzubekommen, zumindest die Kundennummer für den Augenblick und drucke sie in der Konsole aus. Dies ist, wo ich es nicht zum Funktionieren bringen kann. Es wird nicht definiert, wenn ich console.log (Ergebnis) mache. Irgendwelche Ideen?
EDIT: Also habe ich die Faser und den Stripe Key als globale Variablen jetzt und bekomme keinen Fehler, aber die Renditen scheinen keine Werte zurückzugeben. so auf der Client-Seite habe ich:
'click #signupsubmit': function (event) {
console.log("hello");
var whatis = getVal(); // function gets value of forms and returns object
var testid;
var cusid = Meteor.call('usersignup', whatis.email, function (error, result) {
if (error) {
console.log(err.message);
return;
}
console.log(result);
console.log("meteor call");
testid = result;
return (result);
});
console.log("outside call");
console.log(testid);
console.log(cusid);
},
});
Also habe ich einige console.log Tests wurden ausgeführt, und es scheint sie die meteor.call führt und hält die Linie hinunter. Console.log von sowohl testid als auch cusid gibt undefined zurück, aber ein paar Sekunden später erhalte ich das console.log von result und die Zeichenfolge "meteor call" aus dem meteor call. Gibt es eine Möglichkeit zu warten, bis der Meteor-Call beendet ist, und dann den Rest meiner Click-Funktion laufen zu lassen? so Konsolausgabe gehen wie:
- "Hallo"
- "außerhalb Anruf"
- Test-ID nicht definiert
- cusid undefined
- "Meteor Anruf"
- "Ergebnis"
Dieser große gearbeitet, aber wenn ich eine andere Methode machen ging an, die beispielsweise den Kunden löschen würde es wirft ein Fehler mit ('Zukunft mehr als einmal gelöst'). So jetzt jemand Klicks einreichen bekommt alle Informationen aus dem Formular und erstellt ein stripe.customer dann eine Meteor.user erstellen, aber sagen, dass der Accounts.createUser einen Fehler wirft ich eine Methode, führen Sie die Streifen Kunden zu löschen. Nachdem ich meine Stripe Del Methode aufgerufen habe, wird der Fehler angezeigt. – asiammyself
Könnten Sie den aktualisierten Code hochladen? Ich brauche ein bisschen mehr zu gehen, aber ich denke, dass es vielleicht kehrt mehrere vorgesehen sind, so dass Sie nur, um sicherzustellen, haben fut.ret läuft einmal – Akshat
aktualisiert Code. Made Future eine globale Var. Ich weiß nicht, ob das der richtige Weg ist, aber jetzt funktioniert es. Die Funktion scheint immer noch nicht auf die Rückkehr zu warten. – asiammyself