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..f2cf930 --- /dev/null +++ b/payment-gateway/app.js @@ -0,0 +1,98 @@ +/* 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',{}) +}) + + +// 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..c453381 --- /dev/null +++ b/payment-gateway/package.json @@ -0,0 +1,29 @@ +{ + "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", + "node-uuid": "~1.4.0", + "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') -%> + +
+ <%-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"