feat(amazon-payments): finalize one time purchases

This commit is contained in:
Matteo Pagliazzi
2015-06-25 18:37:28 +02:00
parent 78cca423f0
commit 271245f1e6
4 changed files with 54 additions and 17 deletions
+38 -14
View File
@@ -1,11 +1,13 @@
var amazonPayments = require('amazon-payments');
var nconf = require('nconf');
var async = require('async');
var User = require('mongoose').model('User');
var shared = require('../../../../common');
var payments = require('./index');
var isProd = nconf.get("NODE_ENV") === 'production';
var payment = amazonPayments.connect({
environment: amazonPayments.Environment.Sandbox,
var amzPayment = amazonPayments.connect({
environment: amazonPayments.Environment[isProd ? 'Production' : 'Sandbox'],
sellerId: nconf.get('AMAZON_PAYMENTS:SELLER_ID'),
mwsAccessKey: nconf.get('AMAZON_PAYMENTS:MWS_KEY'),
mwsSecretKey: nconf.get('AMAZON_PAYMENTS:MWS_SECRET'),
@@ -17,8 +19,8 @@ exports.verifyAccessToken = function(req, res, next){
return res.json(400, {err: 'Access token not supplied.'});
}
payment.api.getTokenInfo(req.body['access_token'], function(err, tokenInfo){
if(err) return next(err);
amzPayment.api.getTokenInfo(req.body['access_token'], function(err, tokenInfo){
if(err) return res.json(400, {err:err});
res.send(200);
});
@@ -29,17 +31,18 @@ exports.checkout = function(req, res, next){
return res.json(400, {err: 'Order Reference Id not supplied.'});
}
var gift = req.body.gift;
var user = res.locals.user;
var orderReferenceId = req.body.orderReferenceId;
async.series({
setOrderReferenceDetails: function(cb){
console.log('setOrderReferenceDetails')
payment.offAmazonPayments.setOrderReferenceDetails({
amzPayment.offAmazonPayments.setOrderReferenceDetails({
AmazonOrderReferenceId: orderReferenceId,
OrderReferenceAttributes: {
OrderTotal: {
CurrencyCode: 'USD',
Amount: 5
Amount: gift ? (gift.gems.amount/4) : 5
},
SellerNote: 'HabitRPG Gems',
SellerOrderAttributes: {
@@ -51,20 +54,18 @@ exports.checkout = function(req, res, next){
},
confirmOrderReference: function(cb){
console.log('confirmOrderReference')
payment.offAmazonPayments.confirmOrderReference({
amzPayment.offAmazonPayments.confirmOrderReference({
AmazonOrderReferenceId: orderReferenceId
}, cb);
},
authorize: function(cb){
console.log('authorize')
payment.offAmazonPayments.authorize({
amzPayment.offAmazonPayments.authorize({
AmazonOrderReferenceId: orderReferenceId,
AuthorizationReferenceId: shared.uuid().substring(0, 32),
AuthorizationAmount: {
CurrencyCode: 'USD',
Amount: 5
Amount: gift ? (gift.gems.amount/4) : 5
},
SellerAuthorizationNote: 'HabitRPG Donation',
TransactionTimeout: 0,
@@ -73,10 +74,27 @@ exports.checkout = function(req, res, next){
},
closeOrderReference: function(cb){
console.log('closeOrderReference')
payment.offAmazonPayments.closeOrderReference({
amzPayment.offAmazonPayments.closeOrderReference({
AmazonOrderReferenceId: orderReferenceId
}, cb);
},
executePayment: function(cb){
async.waterfall([
function(cb2){ User.findById(gift ? gift.uuid : undefined, cb2) },
function(member, cb2){
var data = {user:user, paymentMethod:'Amazon Payments'};
var method = 'buyGems';
if (gift){
gift.member = member;
data.gift = gift;
data.paymentMethod = 'Gift';
}
payments.buyGems(data, cb2);
}
], cb);
}
}, function(err, results){
if(err) return next(err);
@@ -84,4 +102,10 @@ exports.checkout = function(req, res, next){
res.send(200);
});
};
exports.setupSubscription = function(req, res, next){
if(!req.body || !req.body['orderReferenceId']){
return res.json(400, {err: 'Billing Agreement Id not supplied.'});
}
};