我目前正试图找出一种方法为我的MEAN堆栈应用程序跟踪哪些用户已经支付授予他们访问我的网页的某一部分。我考虑了几个选项:条纹客户ID, MongoDB记录,和HTML属性我可以更新。
我的mean stack通过JWT跟踪用户,并且似乎stripe为他们分配了自己的客户ID,这并不理想。可以通过智威汤逊而不是他们强制的客户ID来实现吗?
MongoDB记录。我觉得这可能是最好的选择。当创建了一个新用户,我将给它一个hasPaid = no的属性。然后在提交付款时更新该客户的记录。那就写个脚本让大家每天都拿不到钱?
HTML元素/属性。我不知道这是否可能;但是如果在收到付款后创建一个在HTML会话期间携带的密钥,那就很酷了。如果这个人关闭了浏览器,那么会话就会被关闭?
我正在寻找关于我的三个选择的指导,以确定它们是否是最佳解决方案。另外,如果有人有任何替代方案的建议,我洗耳恭听!
提前感谢。
一般来说,最常见的方法是第二种:在数据模型中使用一个属性来指示用户是否已经付费/应该被授予访问权限。当一个收费[0]被成功创建时,更新模型以表示成功,然后根据该属性筛选访问。
[0] https://stripe.com/docs/api/node create_charge
在用户模型中使用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或视图文件。这将显示一个弹出式表单,让用户输入他或她的抄送信息。
<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
}
});
您现在可以通过在任何您希望的模型中存储charge对象的属性来跟踪每个订单。