2017-05-15 54 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并单击要替换的密钥旁边的“回收”图标来执行此操作。

相关问题