如何使用 Meteor js 在 Stripe 成功后重定向到成功页面

How to redirect to a success page After Stripe success with Meteor js

我正在用 meteor 进行条纹支付测试,

我正在收到付款以成功从我的服务器中剥离,

我正在使用流星方法执行此操作,

但我需要

  1. 向用户显示付款处理视觉效果,然后在付款成功时显示
  2. return 一个成功的支付对象返回给客户(我可以这样做,然后用各种信息呈现一个成功的模板

我怎么能做到这两个呢?

提交事件

Template.step4.events({
  'submit #insertpaymentInfo':function(e){
      e.preventDefault();
      Stripe.setPublishableKey('PUBLISHABLEKEY');
      var $form = $('#insertpaymentInfo');
      $form.find('button').prop('disabled', true);
      Stripe.card.createToken($form, callbackStripe);

  }
});

条带服务器收到令牌后的回调

function callbackStripe(status, response){
  var $form = $('#insertpaymentInfo');
  console.log("hi 1")
  if (response.error) {
    $form.find('.payment-errors').text(response.error.message);
    $form.find('button').prop('disabled', false);
  } else {

    var token = response.id;

    //TODO build an array of relevant data that needs to be sent to the server
    //Token on its own only sent for testing

    Meteor.call('processPayment',token);
  }
}

这是我的流星方法服务器端

 Meteor.methods({
    'processPayment':function(stripeToken){
         console.log("stripe token = "+ stripeToken);
         check(stripeToken,String);
         console.log("payment and order can be processed and created");
         var Stripe = StripeAPI('TESTKEY');

      Stripe.charges.create({
       amount: 1000, // amount in cents, again
       currency: "usd",
       card: stripeToken,
       description: "payinguser@example.com"
      }, function (err, res) {
        console.log(err, res);
     });
 }
});

您可以在同一个父模板中处理所有这些模板,使用反应变量来显示不同的子模板。

Template.step4.created = function(){
  this.state = new ReactiveVar("editing");
}

<template name="step4">
  {{#if state "editing"}}
    {{> payment_form}}
  {{/if}}
  {{#if state "processing"}}
    {{> processing}}
  {{/if}}
  {{#if state "success"}}
    {{> success}}
  {{/if}}
</template>

Template.step4.helpers({
  state: function(param){
    return Template.instance().state.get() === param;
  }
});

Template.step4.events({
  'submit #insertpaymentInfo':function(e, template){
    e.preventDefault();
    Stripe.setPublishableKey('PUBLISHABLEKEY');
    var $form = $('#insertpaymentInfo');
    $form.find('button').prop('disabled', true);
    template.state.set("processing");
    Stripe.card.createToken($form, function(err, res){
      if (error){
        template.state.set("editing");
        // error handle as you did above
      } else {
        template.state.set("success");
        // show info via response object
      }
    });
  }
});