diff --git a/config.json.example b/config.json.example index da9b3bb238..0e0b3ff2cc 100644 --- a/config.json.example +++ b/config.json.example @@ -18,5 +18,8 @@ "STRIPE_PUB_KEY":"22223333444455556666777788889999", "PAYPAL_MERCHANT":"paypal-merchant@gmail.com", "NEW_RELIC_LICENSE_KEY":"NEW_RELIC_LICENSE_KEY", - "GA_ID": "GA_ID" + "GA_ID": "GA_ID", + "PAYPAL_USERNAME": "PAYPAL_USERNAME", + "PAYPAL_PASSWORD": "PAYPAL_PASSWORD", + "PAYPAL_SIGNATURE": "PAYPAL_SIGNATURE" } diff --git a/public/js/controllers/rootCtrl.js b/public/js/controllers/rootCtrl.js index fb4a0a9823..cf2ad1a40d 100644 --- a/public/js/controllers/rootCtrl.js +++ b/public/js/controllers/rootCtrl.js @@ -100,7 +100,7 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ //debugger var data = { name:env.t('donationDesc'), - //env:window.env.NODE_ENV == 'production' ? '' : 'sandbox', + env:window.env.NODE_ENV == 'production' ? '' : 'sandbox', quantity:1, amount:5, currency:'USD', @@ -114,6 +114,10 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ PAYPAL.apps.ButtonFactory.create(window.env.PAYPAL_MERCHANT, data, 'buynow', document.getElementById('custom-paypal-button')); } + $rootScope.paypalSubscribe = function(){ + $http.get('/paypal/subscribe'); + } + $rootScope.showStripe = function(subscription) { StripeCheckout.open({ key: window.env.STRIPE_PUB_KEY, diff --git a/src/controllers/user.js b/src/controllers/user.js index ba6105b581..1e23aaf8cd 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -17,6 +17,14 @@ var logging = require('./../logging'); var acceptablePUTPaths; var api = module.exports; +var Paypal = require('paypal-recurring'), + paypal = new Paypal({ + username: nconf.get('PAYPAL_USERNAME'), + password: nconf.get('PAYPAL_PASSWORD'), + signature: nconf.get('PAYPAL_SIGNATURE'), + environment: nconf.get("NODE_ENV") === "production" ? "production" : "sandbox" + }); + // api.purchase // Shared.ops api.getContent = function(req, res, next) { @@ -377,6 +385,39 @@ api.cancelSubscription = function(req, res, next) { } +api.paypalSubscribe = function(req,res,next) { + var uuid = req.query.uuid; + if (!uuid) return next("UUID required"); + // Authenticate a future subscription of ~5 USD + paypal.authenticate({ + RETURNURL: nconf.get('BASE_URL') + '/paypal/subscribe/success?uuid=' + uuid, + CANCELURL: nconf.get('BASE_URL') + '/paypal/subscribe/fail?uuid=' + uuid, + PAYMENTREQUEST_0_AMT: 5, + L_BILLINGAGREEMENTDESCRIPTION0: "HabitRPG Subscription" + }, function(err, data, url) { + // Redirect the user if everything went well with + // a HTTP 302 according to PayPal's guidelines + if (err) return next(err); + res.redirect(302, url); + }); +} + +api.paypalSubscribeSuccess = function(req,res,next) { + // Create a subscription of 10 USD every month + var uuid = req.query.uuid; + if (!uuid) return next("UUID required"); + paypal.createSubscription(req.query.token, req.query.PayerId,{ + AMT: 5, + DESC: "HabitRPG Subscription", + BILLINGPERIOD: "Month", + BILLINGFREQUENCY: 1, + }, function(err, data) { + if (err) return res.next(err); + res.send("You are now one of our customers!"); + console.log("New customer with PROFILEID: " + data.PROFILEID) + }); +} + api.buyGemsPaypalIPN = function(req, res, next) { res.send(200); ipn.verify(req.body, function callback(err, msg) { diff --git a/src/routes/pages.js b/src/routes/pages.js index f3823d3976..5a05aeb154 100644 --- a/src/routes/pages.js +++ b/src/routes/pages.js @@ -2,7 +2,9 @@ var nconf = require('nconf'); var express = require('express'); var router = new express.Router(); var _ = require('lodash'); -var middleware = require('../middleware') +var middleware = require('../middleware'); +var user = require('../controllers/user'); +var auth = require('../controllers/auth'); // -------- App -------- router.get('/', middleware.locals, function(req, res) { @@ -55,4 +57,9 @@ router.get('/static/extensions', function(req, res) { res.redirect('http://habitrpg.wikia.com/wiki/App_and_Extension_Integrations'); }); +// --------- PayPal -------- + +router.get('/paypal/subscribe', user.paypalSubscribe); +router.get('/paypal/subscribe/success', user.paypalSubscribeSuccess); + module.exports = router; \ No newline at end of file diff --git a/views/options/settings.jade b/views/options/settings.jade index 254cafccc2..5b81e25bef 100644 --- a/views/options/settings.jade +++ b/views/options/settings.jade @@ -147,6 +147,8 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template') div(ng-include="'partials/options.settings.subscription.perks.html'") .btn.btn-primary(ng-click='showStripe(true)')=env.t('subscribe') //-small.muted PayPal coming soon. + //a.btn.btn-warning(ng-click='paypalSubscribe()') PayPal + a.btn.btn-warning(href='/paypal/subscribe?uuid={{user._id}}') PayPal div(ng-if='user.purchased.plan.customerId') .well