Stripe API:没有ID为X的标记(stripe.charges.create)

时间:2015-03-24 15:33:34

标签: javascript node.js express token stripe-payments

节点/快递相当新,我尝试使用Stripe 3.3.2checkout.js进行简单的虚拟充电。提交结账表单后,令牌会毫无问题地返回后端;但是,使用该令牌创建费用会导致以下结果:没有ID为令牌的令牌tok_xxxxxxxxxxxxxxxxxxxxxxxx

我在这里缺少什么?

/views/premium.mustache

<a id="subscribe" href="#">Pay with Card</a>

<script>
  // Define handler to be called when Stripe returns a card token
  function onReceiveToken(token, args) {
    // Submit token to server so it can charge the card
    $.ajax({
        url: '/premium/charge',
        type: 'POST',
        data: {
             stripeToken: token
        }
       });
   }

  // Configure Checkout
  var checkout = StripeCheckout.configure({
    key: 'xx_xxxx_xxxxxxxxxxxxxxxxxxxx',
    token: onReceiveToken,
    image: '/images/logo/stripe.png',
    name: 'Test App',
    description: 'Premium Sounds',
    amount: 500
  });

  // Open Checkout when the link is clicked
  $('#subscribe').on('click', function() {
    checkout.open();
    return false;
  });
</script>

/routes/stripe/charge.js

var dateUtils = require('date-utils'),
    config = require('../../../config/config.js'),
    stripe = require('stripe')(config.keys.stripe.test.secret_key),
    User = require('../../models/User');

module.exports = function(router, app, passport) {
  router.get('/premium/charge', function(req, res) {
    res.redirect('/premium');
  });

  router.post('/premium/charge', function(req, res) {
    var token = req.body.stripeToken.id,
        card = req.body.stripeToken.card.id;

    stripe.charges.create({
      amount: 500,
      currency: 'USD',
      source: token,
      description: 'Dummy customer'
    }, function(err, charge) {
      if (err) {
        console.log(err);
      } else {
        console.log(charge);
      }
    });
  });
}

req.body

{ 
  stripeToken: { 
    id: 'tok_15jsAF2eZvKYlo2CmvgETnJg',
    livemode: 'false',
    created: '1427204031',
    used: 'false',
    object: 'token',
    type: 'card',
    card: { 
      id: 'card_15jsAF2eZvKYlo2CdXDcaI0h',
      object: 'card',
      last4: '4242',
      brand: 'Visa',
      funding: 'credit',
      exp_month: '9',
      exp_year: '2018',
      country: 'US',
      name: 'sd@smm.com',
      address_line1: '',
      address_line2: '',
      address_city: '',
      address_state: '',
      address_zip: '',
      address_country: '',
      cvc_check: 'pass',
      address_line1_check: '',
      address_zip_check: '',
      dynamic_last4: '' 
    },
    email: 'sd@smm.com',
    verification_allowed: 'true',
    client_ip: '74.110.163.89' 
  } 
}

条纹响应

{ 
  [Error: There is no token with ID tok_xxxxxxxxxxxxxxxxxx.]
  type: 'StripeInvalidRequest',
  stack: 'Error: There is no token with ID (node.js:442:13)',
  rawType: 'invalid_request_error',
  code: undefined,
  param: 'source',
  message: 'There is no token with ID tok_xxxxxxxxxxxxxxxxxx.',
  detail: undefined,
  raw: { 
    type: 'invalid_request_error',
    message: 'There is no token with ID tok_xxxxxxxxxxxxxxxxxx.',
    param: 'source' 
  } 
}

1 个答案:

答案 0 :(得分:9)

条纹支持 awesome 。对于那些将来偶然发现这一点的人来说,这将是正确的答案。

99.9%的时间您看到此错误,因为您没有使用您的公钥创建令牌。检查以确保其正确/设置。