2016-09-12 73 views
1

我目前正在試圖找出一種方法來讓我的MEAN堆棧應用程序跟蹤哪些用戶已付款以授予他們訪問我的網頁的某個部分的權限。我已經考慮了幾個選項:Stripe客戶ID,MongoDB記錄和我可以更新的HTML屬性。如何跟蹤用戶製作條紋支付

我的平均堆棧通過JWT跟蹤用戶,並且它出現條帶會將它們自己的客戶ID分配給他們,這是不理想的。它可以與智威湯遜完成,而不是他們的強制合夥人ID嗎?

MongoDB記錄。我認爲這是最好的選擇。當一個新用戶被創建時,我會給它一個hasPaid = no的屬性。然後在提交付款時更新該客戶的記錄。那麼我想運行一個腳本讓每個人都回到沒有報酬的日子?

HTML元素/屬性。我不知道這是否可能;但在收到付款後創建在HTML會話期間攜帶的密鑰將會很酷。如果該人關閉瀏覽器,那麼會話將被關閉?

我正在尋找關於我的3個選項的指導,以確定它們是否是最佳解決方案。此外,如果有人對替代品有任何建議,我全都是耳朵!

在此先感謝。

回答

0

一般來說,最常用的方法是第二種:在數據模型中使用一個屬性,指示用戶是否支付/應該被授予訪問權限。當費用成功創建[0]時,更新模型以指示如此,然後根據此屬性過濾訪問權限。

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

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或視圖文件中。這將顯示一個彈出窗體讓用戶輸入他或她的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 

    } 
    }); 

您現在可以通過存儲在你希望的任何型號的充電對象的屬性跟蹤每個訂單。