Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stripe API: There is no token with ID X (stripe.charges.create)

Fairly new to node/express, and I'm trying to get a simple dummy charge working with Stripe 3.3.2 and checkout.js. Once the checkout form is submitted, the token makes its way back to the backend without issue; using that token to create a charge, however, results in the following: There is no token with ID tok_xxxxxxxxxxxxxxxxxxxxxxxx

What am I missing here?

/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: '[email protected]',
      address_line1: '',
      address_line2: '',
      address_city: '',
      address_state: '',
      address_zip: '',
      address_country: '',
      cvc_check: 'pass',
      address_line1_check: '',
      address_zip_check: '',
      dynamic_last4: '' 
    },
    email: '[email protected]',
    verification_allowed: 'true',
    client_ip: '74.110.163.89' 
  } 
}

Stripe response

{ 
  [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' 
  } 
}
like image 940
Jay Figaro Avatar asked Jan 09 '23 16:01

Jay Figaro


1 Answers

Stripe support is awesome. Will mark this as the correct answer for those of you who stumble onto this in the future.

99.9% of the time you see this error it's because you aren't creating the token with your public key. Check to make sure it's correct/set.

like image 184
Jay Figaro Avatar answered Jan 11 '23 20:01

Jay Figaro