Javascript 条纹&x2B;webtask.io不';升级到节点8后无法工作

Javascript 条纹&x2B;webtask.io不';升级到节点8后无法工作,javascript,node.js,stripe-payments,Javascript,Node.js,Stripe Payments,我正在使用webtask.io根据Thomasz`示例创建条带费用,但在他们从节点4升级到节点8后,这不再有效。你知道如何让它再次发挥作用吗 var stripe = require('stripe'); module.exports = function (ctx, req, res) { stripe(ctx.secrets.stripeSecretKey).charges.create({ amount: ctx.body.amount * 100,

我正在使用webtask.io根据Thomasz`示例创建条带费用,但在他们从节点4升级到节点8后,这不再有效。你知道如何让它再次发挥作用吗

var stripe = require('stripe');

module.exports = function (ctx, req, res) {
    stripe(ctx.secrets.stripeSecretKey).charges.create({
        amount: ctx.body.amount * 100,
        currency: 'gbp',
        source: ctx.body.stripeToken,
        description: 'Test Payment',
    }, function (error, charge) {
        var status = error ? 400 : 200;
        var message = error ? error.message : '<script>window.location.replace("' + ctx.body.redirectUrl + '");</script>'; 
        res.writeHead(status, { 'Content-Type': 'text/html' });
        return res.end('<h1>' + message + '</h1>');
    });
};

问题在于,条带签出发送到webtask的请求正文中没有
amount
属性。这是出于设计-数据量
属性只影响显示给用户的量。原因是您不应该使用前端的值来决定费用的金额。打开我的浏览器devtools并更改金额对我来说是微不足道的,现在我支付的不是9.99美元购买您的产品,而是1美元:)

要解决此问题,您有两个选项:

  • stripe.charges.create
    中的
    amount
    参数直接设置为值。如果您试图向客户收取特定金额的费用,这是推荐的方法
  • 在表单上使用隐藏输入,如下所示。注意,这有我上面描述的问题,用户可以更改值。这在“捐赠”用例中不一定是问题(如您链接到的示例),因为您希望用户选择金额(在这种情况下,只需使用普通的、非隐藏的输入)
隐藏输入:

<form action="your-server-side-code" method="POST">
  <input type="hidden" name="amount" id="amount" value="999">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="API_KEY"
    data-amount="999"
    data-name="Test"
    data-description="Widget"
    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
    data-locale="auto"
    data-currency="usd">
  </script>
</form>

已解决

如果您使用的是
Full HTTP control
(context,req,res),则请求主体将不被使用,除非webtask令牌的
pb
声明设置为1

为此,您需要使用以下方法创建脚本:

wt create my-script.js --secret stripeSecretKey={stripe_api_key} --parse-body --dependency stripe@3.3.4 --ignore-package-json

嘿,谢谢你的回复!我应该提到,
金额
也是通过表单发送的(有解决方法),因为我使用它允许用户支付用户可配置的金额。。。我尝试为amount设置一个固定值,但随后我得到了相同的错误,但对于
ctx.body.stripeToken
。LE:
amount
是用户定义的,并通过表单发送。通过Webtask的控制台安装parse body,我很难解决此问题。“stripeToken”仍然没有定义。你能给点建议吗?我通过“var token=req.body.stripeToken”定义stripeToken;“谢谢!
wt create my-script.js --secret stripeSecretKey={stripe_api_key} --parse-body --dependency stripe@3.3.4 --ignore-package-json