2017-05-15 18 views
2

我是新來的節點和JavaScript,請原諒我。這是我現在所擁有的,只是從條紋文檔中複製出來的。我很困惑我應該如何處理評論的令牌功能。我使用簡單的條紋配置,並使所有的工作都很完美,但我決定允許用戶通過輸入字段設置自定義數量。任何幫助指導我在這個方向將是很棒的。需要指導,嘗試使用節點js設置條帶的可變數量

<script src="https://checkout.stripe.com/checkout.js"></script> 

<button id="customButton">Purchase</button> 

<script> 
var handler = StripeCheckout.configure({ 
    key: 'pk_test_...', 
    image: 'https://stripe.com/img/documentation/checkout/marketplace.png', 
    locale: 'auto', 
    token: function(token) { 
    // You can access the token ID with `token.id`. 
    // Get the token ID to your server-side code for use. 
    } 
}); 

document.getElementById('customButton').addEventListener('click', function(e) { 
    // Open Checkout with further options: 
    handler.open({ 
    name: 'Demo Site', 
    description: '2 widgets', 
    amount: 2000 
    }); 
    e.preventDefault(); 
}); 

// Close Checkout on page navigation: 
window.addEventListener('popstate', function() { 
    handler.close(); 
}); 
</script> 

這是我的服務器端代碼(stripe.js):

var express = require('express'); 
var router = express.Router(); 
var stripe = require('stripe')('sk_test_...'); 

router.post('/charge', function(req, res, next) { 
    var token = req.body.stripeToken; 
    var chargeAmount = req.body.chargeAmount; 
    var charge = stripe.charges.create({ 
     amount: 2000, 
     currency: "usd", 
     source: token 
    }, function(err, charge) { 
     if(err) { 
     return console.log(err); 
     } 
     console.log(req.body); 
     res.redirect('/users/dashboard'); 
    }); 
}); 

module.exports = router; 

回答

1

Checkout量和貨幣不發送到後端服務器 - 它僅使用了amountcurrency參數顯示目的。

這是設計。除了應由付費客戶明確設置金額的情況外(例如,如果您接受捐款),您不能相信客戶瀏覽器發送的金額,因爲修改該金額會非常容易。

但在這種情況下,聽起來好像您希望客戶設定的金額。所以,你需要這樣做:

  1. 在您的客戶端(前端)的代碼,確保量與結帳返回的令牌一起發送。

    下面是客戶設置金額的表格的一個簡單示例:https://jsfiddle.net/ywain/g2ufa8xr/。在此表單中,金額將作爲amount POST參數以及Checkout返回的stripeTokenstripeEmail參數發送。

  2. 在您的服務器端(後端)代碼中,使用charge creation request中的金額。

    這很容易,只檢索參數,並把它作爲amount參數充電創建請求的值:

    var token = req.body.stripeToken; 
    var amount = req.body.amount; 
    var charge = stripe.charges.create({ 
        amount: amount, 
        currency: "usd", 
        source: token 
    }, function(err, charge) { 
        ... 
    } 
    

作爲一個側面說明,請絕不會分享你的祕密API密鑰公開,即使它只是一個測試密鑰。你應該儘快推出一個新的關鍵。您可以通過前往儀表板:https://dashboard.stripe.com/account/apikeys並單擊要替換的密鑰旁邊的「回收」圖標來執行此操作。

相關問題