2016-09-07 2 views
0

Вот краткое изложение:Trouble возвращает достоверный результат при интеграции нашивки API в моем Метеор приложение

  • Я пытаюсь запустить нашивки API на моем Метеор приложение асинхронно
  • Короче говоря, все работает (т.е. подписка и плата создаются нормально и отображаются на моей панели инструментов Stripe)
  • При возникновении ошибок ошибки обычно отображаются и отображаются на клиенте с помощью удобных оповещений
  • У меня возникла проблема, когда есть успех и подписка на клиента , результат не представить в клиенте, а вместо этого всегда возвращается как ошибка, несмотря на его успешный процесс

Вот что мой метод похож на сервере:

createCustomer: function(token, email, plan){ 
    try{ 
    let createCustomer = Meteor.wrapAsync(stripe.customers.create); 
    let result = createCustomer({ 
     source: token, 
     email: email, 
     plan: plan 
    }); 

    let subscription = { 
     customer: result.id, 
     sub: result.subscriptions.data[0].id, 
     plan: result.subscriptions.data[0].plan.name 
    }; 

    Meteor.users.update({_id: Meteor.userId()}, {$set: subscription}); 

    } catch(error){ 
    if(error.code === "incorrect_cvc"){ 
    throw new Meteor.Error("incorrect_cvc", error.message); 
    } 
// More of such errors follows 
    } 
} 

Вот как это выглядит на клиенте:

Stripe.card.createToken({ 
    number: number, 
    cvc: cvc, 
    exp_month: exp, 
    exp_year: exp_year, 
    address_zip: zip, 
    address_country: country 
    }, function(status, response){ 
    if(response.error){ 
     console.log("Make sure all fields are filled before submitting order."); 
    } else{ 
     let token = response.id; 
     Meteor.call("createCustomer", token, email, plan, function(error, result){ 
     if(result){ 
     console.log("Congratulations, everything worked!"); 
     } else{ 
      if(error.error === "incorrect_cvc"){ 
      console.log("oops, the CSV is incorrect"); 
      } 

      // More of such errors follow.. 
     } 
     }) 
    } 
    }); 

Итак, все работает с точки зрения реальной ошибки, она отлично срабатывает на сервере + клиент. Когда пользователь использует карточку, сборы создаются и подписка всегда создается. HOWEVER, когда есть успех и все щелкают в порядке, я все равно получаю сообщение об ошибке на клиенте через обратный вызов, и результат никогда не true или не срабатывает. Не знаю, почему.

+0

вы могли бы иметь успех с вашей полосой вызова то неудачи в собственном коде, и это будет пойман тот же 'catch' блока. Вы уверены, что 'let subscription = { клиент: result.id, sub: result.subscriptions.data [0] .id, plan: result.subscriptions.data [0] .plan.name };' выполняет без ошибок? Или может 'Meteor.userId()' быть undefined? –

+0

@MichelFloyd Все определено и работает отлично. Подписка добавляется в документ пользователя, и подписка создается на Stripe. Ошибка все равно возвращается на клиенте. Даже если я удалю блок подписки и просто вызову 'stripe.customers.create', все еще есть ошибка. –

+0

Когда я использую обещания вместо этого, он отлично работает с результатами. Однако у меня проблемы с отображением ошибок на клиенте. Лол. –

ответ

1

Не на 100% на Метеор, но мне кажется, что ваш метод createCustomer на самом деле ничего не возвращает, поэтому у result у вашего (err, result) ничего не может быть в нем?

Как уже упоминалось в комментариях, вы можете выделить шаги и обернуть их в свой собственный набор try-catch, чтобы вы могли лучше изолировать проблему.

Кроме того, я чувствую, как вы могли бы, вероятно, обобщать свой серверный код ошибки что-то вроде:

throw new Meteor.Error(error.error, error.message); 

И я мог бы быть даже соблазн сделать что-то вроде этого, по крайней мере, во время тестирования/разработки - это как вы можете на самом деле console.log() оригинальная ошибка в браузере:

throw new Meteor.Error(error.error, error.message, JSON.stringify(error)); 
+0

Вы на самом деле правы. Я полностью забыл о добавлении метода возврата. Теперь он отлично работает. Я работал над этим так долго, что не мог найти простого решения. –

+0

Awesome - рад это слышать! : D – floatingLomas