From d8a582c05d87ba3877e9deca2c2069fbbcb8d5d1 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 11:21:38 -0700 Subject: [PATCH 1/6] Show users any errors in Stripe token creation --- tasks/build_event.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tasks/build_event.js b/tasks/build_event.js index cc8ca12..a0c44ef 100644 --- a/tasks/build_event.js +++ b/tasks/build_event.js @@ -14,6 +14,9 @@ module.exports = function(grunt) { "exp_year": 2017, "cvc": "123" },function(err, token){ + if (err) { + grunt.log.writeln(err); + } fs.writeFile("event.json", JSON.stringify({ "source" : token, "amount" : 2000, From ed041720a3bfdfa9ee7265b5f9e496f40388b87e Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 15:20:53 -0700 Subject: [PATCH 2/6] update to work with POST --- index.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 2ecca53..5641420 100644 --- a/index.js +++ b/index.js @@ -1,15 +1,18 @@ require('dotenv').load(); +var qs = require('qs'); var stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); exports.handler = function(event, context) { - + console.log("event: \n" + JSON.stringify(event, null, 4)); + var data = qs.parse(event.body); + console.log("body: \n" + JSON.stringify(data, null, 4)); stripe.charges.create({ - amount: event.amount, - source: event.source, - currency: event.currency || 'usd', - description: event.description || 'Stripe payment '+event.order_id, - receipt_email: event.receipt_email || null + amount: data.amount, + source: data.source, + currency: data.currency || 'usd', + description: data.description || 'Stripe payment '+data.order_id, + receipt_email: data.receipt_email || null }, function(err, charge) { if (err && err.type === 'card_error') { context.fail(new Error(err.message)); From a929938d9819671235b6ad6b51e5095e17c33d01 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 15:35:48 -0700 Subject: [PATCH 3/6] customer creation and subscription --- index.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 5641420..28101ac 100644 --- a/index.js +++ b/index.js @@ -7,12 +7,11 @@ exports.handler = function(event, context) { console.log("event: \n" + JSON.stringify(event, null, 4)); var data = qs.parse(event.body); console.log("body: \n" + JSON.stringify(data, null, 4)); - stripe.charges.create({ - amount: data.amount, - source: data.source, - currency: data.currency || 'usd', - description: data.description || 'Stripe payment '+data.order_id, - receipt_email: data.receipt_email || null + var customer = stripe.customers.create({ + source: data.stripeToken, + email: data.stripeEmail, + description: "Customer for " + data.stripeEmail, + plan: 'littleFriendIG500' }, function(err, charge) { if (err && err.type === 'card_error') { context.fail(new Error(err.message)); From 86f651429c1fc355dc3509b97504645a7476e181 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 15:57:46 -0700 Subject: [PATCH 4/6] require qs for POST arg parsing --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 742590e..39b188a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "dotenv": "^1.2.0", "load-grunt-tasks": "^3.4.1", + "qs": "^6.5.1", "stripe": "^4.0.0" }, "scripts": { From 6b3683f6aa3ed254b4a47a6387a1e130e0c810ee Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 15:58:30 -0700 Subject: [PATCH 5/6] forward to a success page --- index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 28101ac..fc93c95 100644 --- a/index.js +++ b/index.js @@ -3,10 +3,11 @@ var qs = require('qs'); var stripe = require('stripe')(process.env.STRIPE_SECRET_KEY); -exports.handler = function(event, context) { +exports.handler = function(event, context, callback) { console.log("event: \n" + JSON.stringify(event, null, 4)); var data = qs.parse(event.body); console.log("body: \n" + JSON.stringify(data, null, 4)); + var customer = stripe.customers.create({ source: data.stripeToken, email: data.stripeEmail, @@ -21,4 +22,12 @@ exports.handler = function(event, context) { context.succeed({ status: charge.status, success : true }); } }); + var response = { + statusCode: 301, + headers: { + "Location" : "http://littlefriend.co/success" + }, + body: null + }; + callback(null, response); }; From 367171eb5580d426e15ae1db01adc64410d327e1 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 4 Nov 2017 17:59:05 -0700 Subject: [PATCH 6/6] handle success and failure --- index.js | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/index.js b/index.js index fc93c95..1f8d4a9 100644 --- a/index.js +++ b/index.js @@ -14,20 +14,26 @@ exports.handler = function(event, context, callback) { description: "Customer for " + data.stripeEmail, plan: 'littleFriendIG500' }, function(err, charge) { - if (err && err.type === 'card_error') { - context.fail(new Error(err.message)); - } else if(err){ - context.fail(err); + if (err) { + console.log(err.type + ": " + err.message + ". (code: " + err.code + ")"); + context.succeed({ + "statusCode": 302, + "headers": { "Location" : "http://littlefriend.co/error?type=" + err.type }, + "body": "" + }); } else { - context.succeed({ status: charge.status, success : true }); + context.succeed({ + "statusCode": 302, + "headers": { "Location" : "http://littlefriend.co/success" }, + "body": "" + }); } + //if (err && err.type === 'card_error') { + // context.fail(new Error(err.message)); + //} else if(err){ + // context.fail(err); + //} else { + // context.succeed({ status: charge.status, success : true }); + //} }); - var response = { - statusCode: 301, - headers: { - "Location" : "http://littlefriend.co/success" - }, - body: null - }; - callback(null, response); };