Я использую метод метеоризмы для извлечения значений из функции на стороне клиента. Я использую stripe api, он работает нормальноКак передавать сообщения об ошибках от сервера метеоров к клиенту
Однако при возникновении ошибки в функции stripe.charges.create
ошибка не возвращается клиенту, что приводит к методу stripeCheckout
, который отправляет пользователя в полный шаблон. Я предполагаю, что есть способ принять ошибки в ответе от ленточных серверов или функции Stripe.customers.create
на стороне сервера передать их клиенту и сообщить пользователю о конкретной ошибке, а также не отправлять их в полный шаблон, используя оператор if, основанный на ошибках или Статус успеха с сервера полосы, который передается метеору.
Это то, что связано с ответом об ошибке из полос 'Stripe.charges.create function to the meteor server and then passing it back to the client through the
stripeCheckout`.
Хорошо, надеюсь, я смогу решить эту проблему. И любые советы по подходу к созданию этого токена, созданию клиента и взиманию платы за лучшую практику, я открыт для любых предложений.
Спасибо!
Клиент JS
Stripe.card.createToken({
number: $('.card-number').val(),
cvc: $('.card-cvc').val(),
exp_month: $('.card-expiry-month').val(),
exp_year: $('.card-expiry-year').val(),
address_line1: addressValue1,
address_line2 : addressValue2,
address_city: cityValue,
address_state: provinceState,
address_country: country,
address_zip: zip,
name: firstName + lastName
}, stripeResponseHandler);
function stripeResponseHandler(status, response) {
if (response.error) {
alert(response.error.message);
}else{
// response contains id and card, which contains additional card details
var token = response.id;
Meteor.call('stripeCheckout',token, function (error, result) {
Router.go("/complete");
});
}
}
Сервер JS
Meteor.methods({
stripeCheckout: function (token) {
Stripe.customers.create({
source: token
}, function(err, customer) {
id = customer.id;
if(err){
throw new Meteor.Error("create-failed", err.message);
}else{
throw new Meteor.Error("create-failed", err.message);
}
Stripe.charges.create({
amount: 1000,
currency: 'usd',
customer: id
}, function (err, res) {
if(err){
throw new Meteor.Error("create-failed", err.message);
}else{
throw new Meteor.Error("create-failed", err.message);
}
});
});
}
});
UPDATE:
Я добавил свои текущие выявляющие ошибки, я бросаю ошибку во всех случаях, и я получаю это ответ в моей консоли.
Exception in delivering result of invoking 'stripeCheckout': TypeError: Cannot read property 'error' of undefined
at http://localhost:3000/client/stripeClient.js?0eb126fd5e018d3cac3f8ec1505f32b7fdc97604:197:22
at Meteor.bindEnvironment [as _callback] (http://localhost:3000/packages/meteor.js?81e2f06cff198adaa81b3bc09fc4f3728b7370ec:977:22)
at _.extend._maybeInvokeCallback (http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:3858:12)
at _.extend.receiveResult (http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:3878:10)
at _.extend._livedata_result (http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:4931:9)
at onMessage (http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:3723:12)
at http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:2717:11
at Array.forEach (native)
at Function._.each._.forEach (http://localhost:3000/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:156:11)
at _.extend._launchConnection.self.socket.onmessage (http://localhost:3000/packages/ddp.js?41b62dcceb3ce0de6ca79c6aed088cccde6a44d8:2716:11)
Это нашивки POST /v1/customers
ответ
{
error:{
message: "Your card was declined."
type: "card_error"
code: "card_declined"
}
}
Вы нашли способ решить эту проблему? Я в той же ситуации ... – JohnnyQ