From c61592ff0a45ce29ee0b4b9ccdd6e1fcce159ba0 Mon Sep 17 00:00:00 2001 From: cristian Date: Tue, 11 Jun 2013 13:25:21 +0300 Subject: [PATCH 1/3] seneca-pay example --- payment-gateway/README.txt | 9 +++ payment-gateway/app.js | 105 ++++++++++++++++++++++++++++ payment-gateway/config.template.js | 20 ++++++ payment-gateway/package.json | 28 ++++++++ payment-gateway/views/buy.ejs | 66 +++++++++++++++++ payment-gateway/views/cancelled.ejs | 4 ++ payment-gateway/views/completed.ejs | 7 ++ payment-gateway/views/layout.ejs | 9 +++ user-accounts/package.json | 1 + 9 files changed, 249 insertions(+) create mode 100644 payment-gateway/README.txt create mode 100644 payment-gateway/app.js create mode 100644 payment-gateway/config.template.js create mode 100644 payment-gateway/package.json create mode 100644 payment-gateway/views/buy.ejs create mode 100644 payment-gateway/views/cancelled.ejs create mode 100644 payment-gateway/views/completed.ejs create mode 100644 payment-gateway/views/layout.ejs diff --git a/payment-gateway/README.txt b/payment-gateway/README.txt new file mode 100644 index 0000000..001045c --- /dev/null +++ b/payment-gateway/README.txt @@ -0,0 +1,9 @@ + +Run with: + +node app.js -p 3000 + +and then visit: +http://localhost:3000/buy + + diff --git a/payment-gateway/app.js b/payment-gateway/app.js new file mode 100644 index 0000000..1bbe991 --- /dev/null +++ b/payment-gateway/app.js @@ -0,0 +1,105 @@ +/* Copyright (c) 2012-2013 Richard Rodger, MIT License */ +"use strict"; + + +var http = require('http') + +var uuid = require('node-uuid'); +var express = require('express'); +var argv = require('optimist').argv; + + +// create a seneca instance +var seneca = require('seneca')({ + log:'print' +}) + +// load configuration for plugins +// top level properties match plugin names +// copy template config.template.js to config.mine.js and customize +seneca.use('config',{file:'./config.mine.js'}) + + +var conf = { + port: argv.p || 3000 +} + +/* +seneca.use('mongo-store',{ + name:'seneca-pay', + host:'127.0.0.1', + port:27017 +}) +*/ + +seneca.use('seneca-pay') +seneca.use('seneca-stripe-pay') + + +// use the express module in the normal way +var app = express() +app.enable('trust proxy') + +app.use(express.cookieParser()) +app.use(express.query()) +app.use(express.bodyParser()) +app.use(express.methodOverride()) +app.use(express.json()) + +app.use(express.session({secret:'seneca'})) + +app.use(express.static(__dirname + '/public')) + + +// add any middleware provided by seneca plugins +app.use( seneca.service() ) + + +// some express views +app.engine('ejs',require('ejs-locals')) +app.set('views', __dirname + '/views') +app.set('view engine','ejs') + +app.get('/buy', function(req, res){ + res.render('buy.ejs',{ + currencyCode: 'USD', + amount: 399, + description: 'One marry Christmas', + refno: new Buffer(uuid.v1(null, [])).toString('hex') + }) +}) + +app.get('/completed', function(req, res){ + var refno = req.query['refno']; + seneca.act({role:'transaction', cmd:'find', q:{'refno':refno}}, function(err, out) { + if (err) { + res.render('completed.ejs', {output:'Transaction not available'}) + } + else { + res.render('completed.ejs', { output:JSON.stringify(out.transaction) }) + } + }) +}) + +app.get('/cancelled', function(req, res){ + res.render('cancelled.ejs',{}) +}) + + +// when rendering the account page, use the req.seneca.user object +// to get user details. This is automatically set up by the auth plugin +app.get('/account', function(req, res){ + res.render('account.ejs',{locals:{user:req.seneca.user}}) +}) + + +// create a HTTP server using the core Node API +// this lets the admin plugin use web sockets +var server = http.createServer(app) +server.listen(conf.port) + + +// visit http://localhost[:port]/admin to see the admin page +// you'll need to logged in as an admin - user 'a1' above +seneca.use('admin',{server:server}) + diff --git a/payment-gateway/config.template.js b/payment-gateway/config.template.js new file mode 100644 index 0000000..fd62e22 --- /dev/null +++ b/payment-gateway/config.template.js @@ -0,0 +1,20 @@ +{ + "pay": { + "paypal": { + "useSandbox": true/false, + "username": "PAYPAL_API_USERNAME", + "password": "PAYPAL_API_PASSWORD", + "signature": "PAYPAL_API_SIGNATURE" + }, + "stripe": { + "secretKey": "STRIPE_SECRET_KEY", + "publishableKey": "STRIPE_PUBLISHABLE_KEY", + "showAddress": true/false + }, + "redirect": { + "hostUrl": "http://localhost:3000", + "success": "/completed", + "fail": "/cancelled" + } + } +} \ No newline at end of file diff --git a/payment-gateway/package.json b/payment-gateway/package.json new file mode 100644 index 0000000..955cf1a --- /dev/null +++ b/payment-gateway/package.json @@ -0,0 +1,28 @@ +{ + "name": "seneca-pay-example", + "version": "0.0.1", + "description": "Seneca payment module example", + "subdomain": "seneca-pay-example", + "main": "app.js", + "scripts": { + "start": "app.js" + }, + "repository": "", + "author": "Cristian iantor", + "license": "MIT", + "dependencies": { + "express": "~3.1.0", + "optimist": "~0.3.5", + "ejs": "~0.8.3", + "ejs-locals": "~1.0.2", + "seneca": "~0.5.x", + "seneca-pay": "~0.0.1", + "seneca-stripe-pay": "~0.0.1" + }, + "files": [ + "app.js" + ], + "engines": { + "node": "0.10.x" + } +} diff --git a/payment-gateway/views/buy.ejs b/payment-gateway/views/buy.ejs new file mode 100644 index 0000000..7c69a80 --- /dev/null +++ b/payment-gateway/views/buy.ejs @@ -0,0 +1,66 @@ +<% layout('layout') -%> + +

Buy some

+
+ +

+
+ +

+ + + + + + + +

+ + + +

+ + + + + + +
+ diff --git a/payment-gateway/views/cancelled.ejs b/payment-gateway/views/cancelled.ejs new file mode 100644 index 0000000..c87d590 --- /dev/null +++ b/payment-gateway/views/cancelled.ejs @@ -0,0 +1,4 @@ +<% layout('layout') -%> + +

No game

+ diff --git a/payment-gateway/views/completed.ejs b/payment-gateway/views/completed.ejs new file mode 100644 index 0000000..fc464dd --- /dev/null +++ b/payment-gateway/views/completed.ejs @@ -0,0 +1,7 @@ +<% layout('layout') -%> + +

You just bought some

+ +

+ <%-output%> +

\ No newline at end of file diff --git a/payment-gateway/views/layout.ejs b/payment-gateway/views/layout.ejs new file mode 100644 index 0000000..36f6495 --- /dev/null +++ b/payment-gateway/views/layout.ejs @@ -0,0 +1,9 @@ + + + + + +<%- body %> + + + diff --git a/user-accounts/package.json b/user-accounts/package.json index 866ede5..c5b4aee 100644 --- a/user-accounts/package.json +++ b/user-accounts/package.json @@ -15,6 +15,7 @@ "optimist": "~0.3.5", "ejs": "~0.8.3", "ejs-locals": "~1.0.2", + "node-uuid": "~1.4.0", "seneca": "~0.5.x", "seneca-user": "~0.2.1", "seneca-auth": "~0.2.4" From 855e97c19aeb82f4a83d63cbb422a79cc588850d Mon Sep 17 00:00:00 2001 From: cristian Date: Wed, 12 Jun 2013 17:37:19 +0300 Subject: [PATCH 2/3] remove account endpoint from seneca-pay example --- payment-gateway/app.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/payment-gateway/app.js b/payment-gateway/app.js index 1bbe991..f2cf930 100644 --- a/payment-gateway/app.js +++ b/payment-gateway/app.js @@ -86,13 +86,6 @@ app.get('/cancelled', function(req, res){ }) -// when rendering the account page, use the req.seneca.user object -// to get user details. This is automatically set up by the auth plugin -app.get('/account', function(req, res){ - res.render('account.ejs',{locals:{user:req.seneca.user}}) -}) - - // create a HTTP server using the core Node API // this lets the admin plugin use web sockets var server = http.createServer(app) From 2d7e619308bd283bfe039cf34807e292381a1420 Mon Sep 17 00:00:00 2001 From: cristian Date: Wed, 3 Jul 2013 13:33:05 +0300 Subject: [PATCH 3/3] payment-gateway add node-uuid dependency --- payment-gateway/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/payment-gateway/package.json b/payment-gateway/package.json index 955cf1a..c453381 100644 --- a/payment-gateway/package.json +++ b/payment-gateway/package.json @@ -13,6 +13,7 @@ "dependencies": { "express": "~3.1.0", "optimist": "~0.3.5", + "node-uuid": "~1.4.0", "ejs": "~0.8.3", "ejs-locals": "~1.0.2", "seneca": "~0.5.x",