【问题标题】:Stripe.js - Cannot read property 'stripeToken' of undefinedStripe.js - 无法读取未定义的属性“stripeToken”
【发布时间】:2016-08-16 07:15:04
【问题描述】:

我正在尝试将 stripe.js 集成到我正在开发的 Web 应用程序中,但是我遇到了以下错误:

Cannot read property 'stripeToken' of undefined

客户端正在设置令牌的隐藏输入,但由于某种原因,服务器无法拉取它:

var stripeToken = request.body.stripeToken;

关于为什么会这样的任何想法?

客户端 JS

jQuery(function($) {
  $('#payment-form').submit(function(event) {
    var $form = $(this);

    // Disable the submit button to prevent repeated clicks
    $form.find('button').prop('disabled', true);

    Stripe.card.createToken({
      number: $('.card-number').val(),
      cvc: $('.card-cvc').val(),
      exp_month: $('.card-expiry-month').val(),
      exp_year: $('.card-expiry-year').val()
    }, stripeResponseHandler);

    // Prevent the form from submitting with the default action
    return false;
  });
});

function stripeResponseHandler(status, response) {
  // Grab the form:
  var $form = $('#payment-form');
  if (response.error) { // Problem!

    // Show the errors on the form:
    $form.find('.payment-errors').text(response.error.message);
    $form.find('.submit').prop('disabled', false); // Re-enable submission

  } else { // Token was created!

    // Get the token ID:
    var token = response.id;

    // Insert the token ID into the form so it gets submitted to the server:
    $form.append($('<input type="hidden" name="stripeToken">').val(token));

    // Submit the form:
    $form.get(0).submit();
  }
};

jQuery(function($) {
  $('[data-numeric]').payment('restrictNumeric');
  $('.cc-number').payment('formatCardNumber');
  $('.cc-exp').payment('formatCardExpiry');
  $('.cc-cvc').payment('formatCardCVC');
  $.fn.toggleInputError = function(erred) {
    this.parent('.form-group').toggleClass('has-error', erred);
    return this;
  };
  $('form').submit(function(e) {
    e.preventDefault();
    var cardType = $.payment.cardType($('.cc-number').val());
    $('.cc-number').toggleInputError(!$.payment.validateCardNumber($('.cc-number').val()));
    $('.cc-exp').toggleInputError(!$.payment.validateCardExpiry($('.cc-exp').payment('cardExpiryVal')));
    $('.cc-cvc').toggleInputError(!$.payment.validateCardCVC($('.cc-cvc').val(), cardType));
    $('.cc-brand').text(cardType);
    $('.validation').removeClass('text-danger text-success');
    $('.validation').addClass($('.has-error').length ? 'text-danger' : 'text-success');
  });
});

服务器端 JS

app.post('/', function(req, res) {
  var stripeToken = request.body.stripeToken;

  var charge = stripe.charges.create({
    amount: 1000, // amount in cents, again
    currency: "usd",
    source: stripeToken,
    description: "Example charge"
  }, function(err, charge) {
    if (err && err.type === 'StripeCardError') {
      // The card has been declined
    }
  });
});

形(玉)

 form(novalidate='', autocomplete='on', method='POST' id="payment-form")
  .form-group
    label.control-label(for='cc-number')
      | Card number formatting 
      small.text-muted
        | [
        span.cc-brand
        | ]
    input#cc-number.input-lg.form-control.cc-number(type='tel', autocomplete='cc-number', placeholder='•••• •••• •••• ••••', required='')
  .form-group
    label.control-label(for='cc-exp') Card expiry formatting
    input#cc-exp.input-lg.form-control.cc-exp(type='tel', autocomplete='cc-exp', placeholder='•• / ••', required='')
  .form-group
    label.control-label(for='cc-cvc') Card CVC formatting
    input#cc-cvc.input-lg.form-control.cc-cvc(type='tel', autocomplete='off', placeholder='•••', required='')
  button.btn.btn-lg.btn-primary(type='submit' class='submit') Submit
  h2.validation

【问题讨论】:

  • 您发帖到/,但没有输出? console.log 在你的app.post 帖子中使其被击中并输出一些东西......尝试确定是否是那个调用导致它出错。此外,您还需要在输出页面之前进行异步并等待条带响应。
  • 我表单中的类和 createToken 函数不匹配,这就是它失败的原因。现在我正在为Cannot read property 'stripeToken' of undefined 服务。迎接下一个挑战!
  • 你的请求在变量req而不是request
  • 这个var stripeToken = request.body.stripeToken;应该是var stripeToken = req.body.stripeToken;
  • *手掌。谢谢你。如果您将其添加为答案,我会将其标记为正确。

标签: javascript node.js express stripe-payments


【解决方案1】:

我们的请求在变量req而不是request

这个var stripeToken = request.body.stripeToken; 应该是var stripeToken = req.body.stripeToken;

【讨论】:

    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 2020-04-06
    • 2020-10-30
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多