Search code examples
javascriptmeteorstripe-paymentsmeteor-blazemeteor-helper

Meteorjs: Stripe Checkout error


I keep getting error from server for the transaction in Stripe checkout, I follow this tutorial (http://www.wsvincent.com/meteor-stripe-checkout/)

Even though I keep getting exception, but the transaction is registered in Stripe, which shows that it is okay, but I just want to know what is this error is about?

Template.bookingPost2.events({
  "click #accept": function(event, template){
    event.preventDefault();

    StripeCheckout.open({
      key: 'public_key',
      amount: 5000, // this is equivalent to $50
      name: 'Meteor Tutorial',
      description: 'On how to use Stripe ($50.00)',
      panelLabel: 'Pay Now',
      token: function(res) {
        stripeToken = res.id;
        console.info(res);
        Meteor.call('chargeCard', stripeToken);
      }
    });

  }
});

Server side

Meteor.methods({
    'chargeCard': function(stripeToken) {
      check(stripeToken, String);
      var Stripe = StripeAPI('secret_key');

      Stripe.charges.create({
        source: stripeToken,
        amount: 5000, // this is equivalent to $50
        currency: 'usd'
      }, function(err, charge) {
        console.log(err, charge);
      });
    }
  });

Error msg

Exception while simulating the effect of invoking 'chargeCard' ReferenceError: StripeAPI is not defined
    at Meteor.methods.chargeCard (http://localhost:3000/lib/collections/stripeStuff.js?c2bc7ea1ef220be9a0448871dc837fcc30c64138:4:20)
    at http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4269:25
    at _.extend.withValue (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:955:17)
    at _.extend.apply (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4260:54)
    at _.extend.call (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4138:17)
    at TokenCallback.StripeCheckout.open.token [as fn] (http://localhost:3000/client/helper/booking2.js?49ebf774558be893cec6b35973bdb33ebfc76887:22:16)
    at TokenCallback.trigger (https://checkout.stripe.com/checkout.js:2:13749)
    at TokenCallback.__bind [as trigger] (https://checkout.stripe.com/checkout.js:2:13081)
    at IframeView.onToken (https://checkout.stripe.com/checkout.js:2:11783)
    at IframeView.closed (https://checkout.stripe.com/checkout.js:2:18825) ReferenceError: StripeAPI is not defined
    at Meteor.methods.chargeCard (http://localhost:3000/lib/collections/stripeStuff.js?c2bc7ea1ef220be9a0448871dc837fcc30c64138:4:20)
    at http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4269:25
    at _.extend.withValue (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:955:17)
    at _.extend.apply (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4260:54)
    at _.extend.call (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4138:17)
    at TokenCallback.StripeCheckout.open.token [as fn] (http://localhost:3000/client/helper/booking2.js?49ebf774558be893cec6b35973bdb33ebfc76887:22:16)
    at TokenCallback.trigger (https://checkout.stripe.com/checkout.js:2:13749)
    at TokenCallback.__bind [as trigger] (https://checkout.stripe.com/checkout.js:2:13081)
    at IframeView.onToken (https://checkout.stripe.com/checkout.js:2:11783)
    at IframeView.closed (https://checkout.stripe.com/checkout.js:2:18825)

Solution

  • It looks like your server side method is in a shared (client + server) directory. Make sure it is in a server folder or wrapped in an if (Meteor.isServer){} block. See if that does the trick.

    (And note that your Stripe secret key should not be exposed on the client side).