summaryrefslogtreecommitdiff
path: root/server/lib/webhook
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2015-01-23 14:46:44 -0500
committerJules Laplace <jules@okfoc.us>2015-01-23 14:46:44 -0500
commit74fb7a313b4d9ad3517e97133febff9cada96fe0 (patch)
tree3328866297c8c6087ea2cec962a9600510ff42a0 /server/lib/webhook
parente0debd761bc24cd42f4140d2b6cc32a4271fe975 (diff)
handle subscribe and payment events with webhook
Diffstat (limited to 'server/lib/webhook')
-rw-r--r--server/lib/webhook/index.js4
-rw-r--r--server/lib/webhook/webhook.js108
2 files changed, 67 insertions, 45 deletions
diff --git a/server/lib/webhook/index.js b/server/lib/webhook/index.js
index 7dd68e6..11419c2 100644
--- a/server/lib/webhook/index.js
+++ b/server/lib/webhook/index.js
@@ -13,6 +13,8 @@ var http = require('http'),
path = require('path'),
mongoose = require('mongoose');
+var webhook = require('./webhook');
+
var app = express()
var server
var DATABASE_URI = process.env.MONGOLAB_URI || ('mongodb://' + config.databaseHost + '/vvalls')
@@ -36,7 +38,7 @@ site.ready = function(){
});
app.get('/', function(req,res){ res.send('HI THERE') })
- app.get('/subscribe/webhook', require('./webhook').webhook);
+ webhook.route(app)
}
site.init()
diff --git a/server/lib/webhook/webhook.js b/server/lib/webhook/webhook.js
index 067af30..2e5e627 100644
--- a/server/lib/webhook/webhook.js
+++ b/server/lib/webhook/webhook.js
@@ -24,7 +24,7 @@ var User = require('../schemas/User'),
var parser = new xml2js.Parser();
-var subscription = module.exports = {
+var subscribe = module.exports = {
plan_level: {
free: 0,
basic: 1,
@@ -32,87 +32,107 @@ var subscription = module.exports = {
},
callbacks: {
+/*
// accounts
- new_account_notification: function(data){
+ new_account_notification: function(data, user){
// fires on successful signup
- // use the account_code to find the user,
},
- canceled_account_notification: function(data){
+ canceled_account_notification: function(data, user){
},
- billing_info_updated_notification: function(data){
+ billing_info_updated_notification: function(data, user){
},
- reactivated_account_notification: function(data){
+ reactivated_account_notification: function(data, user){
},
// invoices
- new_invoice_notification: function(data){
+ new_invoice_notification: function(data, user){
},
- closed_invoice_notification: function(data){
+ closed_invoice_notification: function(data, user){
},
- past_due_invoice_notification: function(data){
+ past_due_invoice_notification: function(data, user){
},
-
+*/
+
// subscriptions
- new_subscription_notification: function(data){
+ new_subscription_notification: function(data, user){
var account = data.account
- User.findOne({ _id: account.account_code }, function(err, user){
- if (err) return;
- var subscription = data.subscription
-
- var plan = subscription.plan.plan_code.split("_")
+ Subscription.findOne({ "uuid": data.subscription.uuid }, function(err, subscription){
+ if (err || subscription) return;
+
+ var plan = data.subscription.plan.plan_code.split("-")
var plan_type = plan[0]
var plan_period = plan[1]
user.plan_type = plan_type
- user.plan_level = subscription.plan_level[plan_type]
-
- // subscription.uuid
- // subscription.subscription_add_ons[]
- // subscription.subscription_add_ons[0].quantity
- user.save(function(){
- })
+ user.plan_period = plan_period
+ user.plan_level = subscribe.plan_level[plan_type]
+ var subscriber = new Subscription ()
+ subscriber.user_id = user._id
+ subscriber.uuid = data.subscription.uuid
+ subscriber.add_ons = subscription.add_ons.map(function(add_on){
+ return {
+ name: add_on.plan,
+ quantity: add_on.quantity,
+ }
+ })
+ subscriber.save(function(err, data){
+ if (err) return;
+ user.save(function(err){
+ // saved!
+ })
+ })
})
},
- updated_subscription_notification: function(data){
+
+/*
+ updated_subscription_notification: function(data, user){
},
- canceled_subscription_notification: function(data){
+ canceled_subscription_notification: function(data, user){
},
- expired_subscription_notification: function(data){
+ expired_subscription_notification: function(data, user){
},
- renewed_subscription_notification: function(data){
+ renewed_subscription_notification: function(data, user){
},
-
+*/
// payments
- successful_payment_notification: function(data){
+ successful_payment_notification: function(data, user){
var account = data.account
- User.findOne({ _id: account.account_code }, function(err, user){
- if (err) return;
- user.last_charged = new Date(data.transaction.date)
- user.save(function(){
- })
- })
+ user.last_charged = new Date(data.transaction.date)
+ user.save(function(){
+ })
},
- failed_payment_notification: function(data){
+/*
+ failed_payment_notification: function(data, user){
},
- successful_refund_notification: function(data){
+ successful_refund_notification: function(data, user){
},
- void_payment_notification: function(data){
+ void_payment_notification: function(data, user){
},
-
+*/
},
- // need a route for the webhook,
+ execute: function(action, data){
+ User.findOne({ _id: data.account.account_code }, function(err, user){
+ if (err) { return }
+ subscribe.callbacks[action](data, user)
+ })
+ },
+
// then calls to get appropriate info from the recurly api
- webhook: function(req, res){
+ handle: function(req, res){
res.status(200).end()
parser.parseString(data, function (err, result) {
console.log(inspect(result, { colors: true, depth: Infinity }));
- for (var i in data) {
- if (subscription.callbacks[i]) {
- subscription.callbacks[i](data[i])
+ for (var action in result) {
+ if (subscribe.callbacks[action]) {
+ subscribe.execute(action, result[action]);
}
}
});
},
+
+ route: function(app){
+ app.post('/subscribe/webhook', subscribe.handle);
+ },
}