如何跟踪用户进行Stripe Payments

时间:2016-09-12 19:43:23

标签: mongodb stripe-payments

我目前正试图为我的MEAN堆栈应用找出一种方法来跟踪哪些用户付费以授予他们访问我网页的某个部分的权限。我考虑了几个选项:条带客户ID,MongoDB记录和我可以更新的HTML属性。

我的平均堆栈通过JWT跟踪用户,并且看起来条纹为他们分配了他们自己的客户ID,这不是理想的。是否可以使用JWT而不是强制切刀ID?

MongoDB记录。我认为这可能是最好的选择。创建新用户后,我会给它一个hasPaid = no的属性。然后在提交付款时更新该客户的记录。然后我想运行一个脚本,让每个人每天都回未支付?

HTML元素/属性。我不知道这是否可能;但是在收到付款后创建HTML会话期间携带的密钥会很酷。如果该人关闭浏览器,那么会话将被关闭?

我正在寻找有关我的3个选项的指导,以确定它们是否是最佳解决方案。此外,如果有人对替代品有任何建议,我全都耳朵!

提前致谢。

2 个答案:

答案 0 :(得分:0)

一般来说,最常见的方法是第二种方法:在数据模型中使用一个属性来指示用户是否已获得付费/应该被授予访问权限。成功创建费用[0]后,更新模型以指示,然后根据此属性过滤访问权限。

[0] https://stripe.com/docs/api/node#create_charge

答案 1 :(得分:0)

在您的用户模型中使用Boolean值。

    var UserSchema = new Schema({
     name: String,
     hasPaid: {type: Boolean, default: false} //set this false
    });

然后在您的REST API路由中,用户购买产品;现在将hasPaid设置为true

    // req.user._id is passport config 
    User.findOneAndUpdate({_id: req.user._id}, {$set: {"hasPaid":istrue}}).exec(function(err) {

     if(err) {
      throw err;
     }else {
      req.flash('success', 'Thank you for submitting the form.');

      res.render('charge', {
        layout: 'dash',
        user: req.user,
        success: req.flash('success')
      });
     }
    });

现在,您可以跟踪购买产品的用户,以授予他们访问您网站其他部分的权限。

Stripe.js附带Checkout.js,这使得使用Stripe的服务变得更加容易。

将其复制并粘贴到您的html / jade / handlebars或view文件中。这将显示一个弹出窗体,让用户输入他或她的cc信息。

    <form action="/charge" method="POST">
     <script
      src="https://checkout.stripe.com/checkout.js"
      class="stripe-button"
      data-key="pk_test_bla3hf&kc033"
      data-image="/square-image.png"
      data-name="Demo Site"
      data-description="2 widgets ($20.00)"
      data-amount="2000">
     </script>
    </form>

用户按下您在服务器上抓取的提交后,您将收到一个令牌。从REST API路径内部,您可以向客户收费:

   var token = req.body.stripeToken; // Using Express

   // Create a charge: this will charge the user's card
   var charge = stripe.charges.create({
     amount: 1999, // Amount in cents
     currency: "usd",
     source: token,
     metadata: { 
      user: req.user._id, 
      email: req.user.local.email
     }
     description: "Example charge" //keep track by writing a description or you can use the metadata property Stripe has to offer in the charges object
    },function(err, charge) {
     if (err && err.type === 'StripeCardError') {
     // The card has been declined
     }else {

      res.redirect('/thanks-for-your-order');
      console.log('charge here ' + charge.id); //store the id 
      console.log('charge here ' + charge.invoice); //store the invoice
      console.log('charge here ' + charge.customer); //store the customer id

     }
   });

现在,您可以通过在任何您希望的模型中存储充电对象的属性来跟踪每个订单。