diff --git a/README.md b/README.md index a5f83f6e43..0d1f0ceb5b 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,13 @@ app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRe
+ +- [Sign up](http://stripe.com) or log into your your [dashboard](https://manage.stripe.com) +- Click on your profile and click on Account Settings +- Then click on [API Keys](https://manage.stripe.com/account/apikeys) +- Copy the **Secret Key**. and add this into `config/secrets.js` +
+ - Visit [PayPal Developer](https://developer.paypal.com/) - Log in to your PayPal account @@ -316,6 +323,7 @@ List of Packages | passport-linkedin-oauth2 | Sign-in with LinkedIn plugin. | | passport-oauth | Allows you to set up your own OAuth 1.0a and OAuth 2.0 strategies. | | request | Simplified HTTP request library. | +| stripe | Offical Stripe API library. | | tumblr.js | Tumblr API library. | | underscore | Handy JavaScript utlities library. | | uglify-js | Dependency for connect-assets library. | diff --git a/app.js b/app.js index 941a3dd689..701912e82d 100755 --- a/app.js +++ b/app.js @@ -131,6 +131,11 @@ app.get('/api/paypal', apiController.getPayPal); app.get('/api/paypal/success', apiController.getPayPalSuccess); app.get('/api/paypal/cancel', apiController.getPayPalCancel); app.get('/api/steam', apiController.getSteam); +app.get('/api/stripe', apiController.getStripe); +app.get('/api/stripe/onetime', apiController.getStripeOnetime); +app.post('/api/stripe/onetime', apiController.postStripeOnetime); +app.get('/api/stripe/newsubscriber', apiController.getStripeNewSubscriber); +app.post('/api/stripe/newsubscriber', apiController.postStripeNewSubscriber); app.get('/api/scraping', apiController.getScraping); app.get('/api/twilio', apiController.getTwilio); app.post('/api/twilio', apiController.postTwilio); diff --git a/controllers/api.js b/controllers/api.js index 2374c88e7c..a92d655a96 100644 --- a/controllers/api.js +++ b/controllers/api.js @@ -13,6 +13,7 @@ var foursquare = require('node-foursquare')({ secrets: secrets.foursquare }); var Github = require('github-api'); var Twit = require('twit'); var paypal = require('paypal-rest-sdk'); +var stripe = require('stripe')(secrets.stripe.apiKey); var twilio = require('twilio')(secrets.twilio.sid, secrets.twilio.token); var Linkedin = require('node-linkedin')(secrets.linkedin.clientID, secrets.linkedin.clientSecret, secrets.linkedin.callbackURL); var clockwork = require('clockwork')({key: secrets.clockwork.apiKey}); @@ -385,6 +386,154 @@ exports.getSteam = function(req, res, next) { }); }; +/** + * GET /api/stripe + * Stripe API example. + */ + +exports.getStripe = function(req, res, next) { + //Create a token for the CC + res.render('api/stripe/index', { + title: 'Stripe API' + }); +}; + +/** + * GET /api/onetime + * Stripe One Time Charge API example. + */ +exports.getStripeOnetime = function(req, res, next) { + //Create a token for the CC + res.render('api/stripe/onetime', { + title: 'Stripe API' + }); +}; + +/** + * POST /api/stripe/onetime + * @param ccNumber + * @param expMonth + * @param expYear + * @param ccNumber + * @param expMonth + * @param expYear + * @param customerName + * @param email + * @param chargeAmount + */ +exports.postStripeOnetime = function(req, res, next) { + stripe.tokens.create({ + card: { + "number": req.body.ccNumber, + "exp_month": req.body.expMonth, + "exp_year": req.body.expYear, + "cvc": req.body.cvc + } + }, function(err, token) { + if (err) { + req.flash('errors', { msg: err.message }); + return res.redirect('/api/stripe/onetime'); + } + //Create a new customer + stripe.customers.create({ + card: token.id, + description: req.body.customerName, + email: req.body.email + }).then(function(customer) { + //charge the customer + stripe.charges.create({ + amount: req.body.chargeAmount * 100, // amount in cents + currency: "usd", + customer: customer.id + }, function(err, charge) { + if (err) { + req.flash('errors', { msg: err.message }); + return res.redirect('/api/stripe/onetime'); + }else{ + req.flash('success', { msg: 'Charged Successfully'}); + res.render('api/stripe/onetime', { + title: 'Stipe API', + customer: customer, + charge: charge + }); + } + }); + }); + }); +}; + +/** + * GET /api/newsubscriber + * Stripe Subscription API example. + */ +exports.getStripeNewSubscriber = function(req, res, next) { + stripe.plans.list(function(err, plans) { + res.render('api/stripe/newsubscriber', { + title: 'Stripe API', + plans: _.pluck(plans.data, 'name') + }); + }); +}; + +/** + * POST /api/stripe/newsubscriber + * @param ccNumber + * @param expMonth + * @param expYear + * @param ccNumber + * @param expMonth + * @param expYear + * @param customerName + * @param email + * @param plantype + */ +exports.postStripeNewSubscriber = function(req, res, next) { + console.log(req.body.plantype); + + stripe.tokens.create({ + card: { + "number": req.body.ccNumber, + "exp_month": req.body.expMonth, + "exp_year": req.body.expYear, + "cvc": req.body.cvc + } + }, function(err, token) { + if (err) { + req.flash('errors', { msg: err.message }); + return res.redirect('/api/stripe/newsubscriber'); + } + //Create a new customer + stripe.customers.create({ + card: token.id, + description: req.body.customerName, + email: req.body.email + }).then(function(customer) { + //charge the customer + stripe.customers.createSubscription( + customer.id, + {plan: req.body.plantype}, + function(err, subscription) { + if (err) { + req.flash('errors', { msg: err.message }); + return res.redirect('/api/stripe/newsubscriber'); + }else{ + stripe.plans.list(function(err, plans) { + req.flash('success', { msg: 'Subscribed Successfully'}); + res.render('api/stripe/newsubscriber', { + title: 'Stipe API', + customer: customer, + subscription: subscription, + plans: _.pluck(plans.data, 'name') + }); + }); + } + } + ); + }); + }); +}; + + /** * GET /api/twilio * Twilio API example. @@ -410,7 +559,7 @@ exports.postTwilio = function(req, res, next) { }; twilio.sendMessage(message, function(err, responseData) { if (err) return next(err.message); - req.flash('success', { msg: 'Text sent to ' + responseData.to + '.'}) + req.flash('success', { msg: 'Text sent to ' + responseData.to + '.'}); res.redirect('/api/twilio'); }); }; diff --git a/views/api/index.jade b/views/api/index.jade index d6a9020423..68dd8a2879 100644 --- a/views/api/index.jade +++ b/views/api/index.jade @@ -4,6 +4,7 @@ block content h2 API Examples hr +<<<<<<< HEAD .row.api-examples .col-sm-4 .panel.panel-default @@ -55,6 +56,11 @@ block content .panel-body img(src='http://th08.deviantart.net/fs4/200H/i/2004/242/4/7/Steam_Icon.png', height=40) a(href='/api/steam') Steam + .col-sm-4 + .panel.panel-default + .panel-body + img(src='https://stripe.com/img/open-graph/logo.png', height=40) + a(href='/api/stripe') Stripe .col-sm-4 .panel.panel-default .panel-body @@ -79,4 +85,4 @@ block content .panel.panel-default .panel-body img(src='http://www.mevvy.com/wp-content/uploads/2013/09/Venmo-Logo-on-Mevvy.com_.png', height=40) - a(href='/api/venmo') Venmo + a(href='/api/venmo') Venmo \ No newline at end of file diff --git a/views/api/stripe.jade b/views/api/stripe.jade new file mode 100644 index 0000000000..3bdfbdf298 --- /dev/null +++ b/views/api/stripe.jade @@ -0,0 +1,10 @@ +extends ../layout + +block content + h2 Stripe API + + ol + li + a(href='/api/stripe/onetime') One Time Charges + li + a(href='/api/stripe/newsubscriber') New Subscriber