我正在尝试设置数据条以从HTML表单获取动态付款金额。此表单位于如下所示的checkout.html页面上:

<html>
    <header>
        <title>checkout</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <script src="https://checkout.stripe.com/checkout.js"></script>
    </header>

    <body>

        <form id="myForm" action="/charge" method="post">
            <input type="hidden" id="stripeToken" name="stripeToken" />
            <input type="hidden" id="stripeEmail" name="stripeEmail" />

            <input type="text" id="item1price" value="253">
            <input type="text" id="item2price" value="167">

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

            <script>

                  //change secret key later!
                  var handler = StripeCheckout.configure({
                  key: 'pk_test',
                  image: 'img/stripe.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.
                    $("#stripeToken").val(token.id);
                    $("#stripeEmail").val(token.email);

                    $("#myForm").submit();
                  }
                });

            document.getElementById('customButton').addEventListener('click', function(e) {

                //add up each price in array to get total cost
                var total = 100;
                // ...

                //insert total variable into hidden html text field
                function insertText(){
                    document.getElementById('chargeAmount').value = total;
                }
                insertText();

              // Open Checkout with further options:
              handler.open({
                name: 'test company',
                description: "test desc",
                amount: total * 100
              });
              e.preventDefault();
            });

            // Close Checkout on page navigation:
            window.addEventListener('popstate', function() {
              handler.close();
            });
            </script>
            <input type="hidden" id="chargeAmount" name="chargeAmount" />
        </form>
    </body>
</html>


我的server.js中也有以下代码:

app.get('/pay', function (req, res) {
  res.sendFile( __dirname + "/checkout.html" );
});

app.get('/paysuccess', function (req, res) {
  res.sendFile( __dirname + "/paySuccess.html" );
});

app.post('/charge', function (req, res) {
  var token = req.body.stripeToken;
  console.log(token);
  var chargeAmount = req.body.chargeAmount;
  console.log(chargeAmount);
  var charge = stripe.charges.create({
      amount: chargeAmount,
      currency: "usd",
      source: token
  }, function(err, charge){
      if(err & err.type ==="StripeCardError"){
          console.log("your card was declined.");
      }
  });
    res.redirect('/paysuccess');
})


当我浏览到localhost / pay时,出现checkout.html。我在价格框中输入信息,我有代码将在表中输入的价格加起来并返回总数,在测试付款卡中输入信息,然后将我带到/ paysuccess页面。但是控制台说chargeAmount和stripeToken都未定义。我让他们登录了/ charge函数。我拿出一些我认为不相关的专有代码,但是当我使用req.body.stripeTokenreq.body.chargeAmount调用stripeToken和chargeAmount时,为什么有人定义我的代码,有人能看到我的问题吗?谢谢。

编辑-我取消隐藏所有的html表单以查看它们的值。在页面加载时,stripeToken和stripeEmail值为空,但是在完成使用测试卡的测试付款后,将填充它们。我相信我的错误就在于它获取html表单的值。我看到了这篇文章:https://stackoverflow.com/questions/41712850/stripe-js-resolve-cannot-read-property-stripetoken-of-undefined?rq=1并将该答案添加到了我的代码中。它似乎有效,但是现在我遇到一个错误,说err为null。

if(err & err.type ==="StripeCardError"){
                  ^

TypeError: Cannot read property 'type' of null


问题所在的行在我的server.js的/ charge函数中。

最佳答案

stripe.charges.create是异步的,因此您要先获取res.redirect,然后再获得chargeToken值。您也不会在响应中将其传递回去,因此我不确定您希望从何处获取它。

关于node.js - 在结帐页面中未定义stripeToken和chargeAmount,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44619874/

10-10 00:32