Skip to content

Commit

Permalink
Merge pull request #1 from andersonba/master
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelverger committed Mar 24, 2014
2 parents 9badb46 + 5e6b029 commit 2b9600a
Show file tree
Hide file tree
Showing 7 changed files with 184 additions and 51 deletions.
79 changes: 52 additions & 27 deletions lib/maxipago.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ var restify = require('restify'),
util = require('util');

// Create a gateway to MaxiPago service
exports.Gateway = (function(){
exports.Gateway = (function() {

// maxipago constants
var MP_API_VERSION = '3.1.1.15',
Expand All @@ -16,50 +16,50 @@ exports.Gateway = (function(){

var xmlBuilder = new xml2js.Builder(XML_OPTIONS);

var reqHandler = function(callback){
return function(err, req, res, xml_response){
var reqHandler = function(callback) {
return function(err, req, res, xml_response) {
if (err) return callback(err);
xml2js.parseString(xml_response, XML_OPTIONS, function(err, obj){
xml2js.parseString(xml_response, XML_OPTIONS, function(err, obj) {
if (err) return callback(err);
return callback(undefined, !!obj.errorMessage, obj);
});
}
};
};

var STRICT_CLIENT = {
customerIdExt:'',
firstName:'',
lastName:'',
address1:'',
address2:'',
city:'',
state:'',
zip:'',
country:'',
phone:'',
email:'',
dob:'',
sex:''
customerIdExt: '',
firstName: '',
lastName: '',
address1: '',
address2: '',
city: '',
state: '',
zip: '',
country: '',
phone: '',
email: '',
dob: '',
sex: ''
};
var sanitizeClient = function(client){
var sanitizeClient = function(client) {
var sanitized = {};
Object.keys(STRICT_CLIENT).forEach(function(key){
if ( client.hasOwnProperty(key) && client[key] ) {
Object.keys(STRICT_CLIENT).forEach(function(key) {
if (client.hasOwnProperty(key) && client[key]) {
sanitized[key] = client[key];
}
});
return sanitized;
}
};

var buildAddCostumerXML = function(client){
var buildAddCostumerXML = function(client) {
var data = {};
data.verification = MP_AUTH;
data.command = 'add-consumer';
data.request = sanitizeClient(client);
return xmlBuilder.buildObject({'api-request': data});
};

var buildSaleXML = function(sale){
var buildSaleXML = function(sale) {
var data = {};
data.version = MP_API_VERSION;
data.verification = MP_AUTH;
Expand All @@ -70,7 +70,23 @@ exports.Gateway = (function(){
return xmlBuilder.buildObject({'transaction-request': data});
};

function Gateway(merchantId, merchantKey, test){
var buildAddCardXML = function(card) {
var data = {};
data.verification = MP_AUTH;
data.command = 'add-card-onfile';
data.request = card;
return xmlBuilder.buildObject({'api-request': data});
};

var buildDeleteCardXML = function(card) {
var data = {};
data.verification = MP_AUTH;
data.command = 'delete-card-onfile';
data.request = card;
return xmlBuilder.buildObject({'api-request': data});
};

function Gateway(merchantId, merchantKey, test) {
this.test = test || false;
MP_AUTH = {
merchantId: merchantId,
Expand All @@ -79,9 +95,8 @@ exports.Gateway = (function(){

this.client = restify.createStringClient({
url: 'https://' + (this.test ? 'test' : '') + 'api.maxipago.net',
contentType: 'text/xml; charset=utf-8',
contentType: 'text/xml; charset=utf-8'
});

}

Gateway.prototype.pay = function(sale, callback) {
Expand All @@ -94,5 +109,15 @@ exports.Gateway = (function(){
this.client.post(MP_POST_API, clientXML, reqHandler(callback));
};

Gateway.prototype.addCard = function(card, callback) {
var cardXML = buildAddCardXML(card);
this.client.post(MP_POST_API, cardXML, reqHandler(callback));
};

Gateway.prototype.deleteCard = function(card, callback) {
var cardXML = buildDeleteCardXML(card);
this.client.post(MP_POST_API, cardXML, reqHandler(callback));
};

return Gateway;
})();
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "maxipago",
"version": "0.3.0",
"version": "0.4.0",
"description": "A NodeJS lib for MaxiPago Gateway",
"author": {
"name": "Rafael Verger",
Expand Down
57 changes: 57 additions & 0 deletions test/integration/gateway-addcard-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
var util = require('./index'),
mpGateway = util.buildGateway();

exports.testAddCard = function(test) {
test.expect(7);

var client = util.basicClient();
mpGateway.saveClient(client, function(err, mp_err, data) {
var cId = data.result.customerId,
card = util.basicAddCard(cId);

mpGateway.addCard(
card,
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

test.equal(data.errorCode, '0');
test.equal(data.errorMessage, '');
test.equal(data.command, 'add-card-onfile');

test.ok(data.hasOwnProperty('result'));
test.ok(data.result.hasOwnProperty('token'));

test.done();
}
);
});
};

exports.testAddExistingCard = function(test) {
test.expect(4);

var client = util.basicClient();
mpGateway.saveClient(client, function(err, mp_err, data) {
var cId = data.result.customerId,
card = util.basicAddCard(cId);

mpGateway.addCard(
card,
function() {
mpGateway.addCard(
card,
function(err, mp_err, data) {
test.ok(!err);
test.ok(mp_err);

test.equal(data.errorCode, '1');
test.equal(data.errorMessage, 'Card already exists on file.');

test.done();
}
);
}
);
});
};
34 changes: 34 additions & 0 deletions test/integration/gateway-deletecard-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
var util = require('./index'),
mpGateway = util.buildGateway();

exports.testDeleteCard = function(test) {
test.expect(5);

var client = util.basicClient();
mpGateway.saveClient(client, function(err, mp_err, data) {
var cId = data.result.customerId,
card = util.basicAddCard(cId);

mpGateway.addCard(
card,
function(err, mp_err, data) {
var token = data.result.token,
card = util.basicDeleteCard(cId, token);

mpGateway.deleteCard(
card,
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

test.equal(data.errorCode, '0');
test.equal(data.errorMessage, '');
test.equal(data.command, 'delete-card-onfile');

test.done();
}
);
}
);
});
};
12 changes: 6 additions & 6 deletions test/integration/gateway-pay-test.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
var util = require('./index'),
mpGateway = util.buildGateway();

exports.testPaySuccess = function(test){
exports.testPaySuccess = function(test) {
test.expect(16);

var client = util.basicClient();
mpGateway.saveClient(client, function(err, mp_err, data){
mpGateway.saveClient(client, function(err, mp_err, data) {
var cId = data.result.customerId,
sale = util.basicSale(cId, true);

mpGateway.pay(
sale,
function(err, mp_err, data){
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

Expand All @@ -38,17 +38,17 @@ exports.testPaySuccess = function(test){
});
};

exports.testPayFailed = function(test){
exports.testPayFailed = function(test) {
test.expect(16);

var client = util.basicClient();
mpGateway.saveClient(client, function(err, mp_err, data){
mpGateway.saveClient(client, function(err, mp_err, data) {
var cId = data.result.customerId,
sale = util.basicSale(cId, false);

mpGateway.pay(
sale,
function(err, mp_err, data){
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

Expand Down
14 changes: 7 additions & 7 deletions test/integration/gateway-saveclient-test.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
var util = require('./index'),
mpGateway = util.buildGateway();

exports.testSaveBasicClient = function(test){
exports.testSaveBasicClient = function(test) {
var client = util.basicClient();

test.expect(7);

mpGateway.saveClient(
client,
function(err, mp_err, data){
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

Expand All @@ -24,14 +24,14 @@ exports.testSaveBasicClient = function(test){
);
};

exports.testSaveFullClient = function(test){
exports.testSaveFullClient = function(test) {
var client = util.fullClient();

test.expect(7);

mpGateway.saveClient(
client,
function(err, mp_err, data){
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

Expand All @@ -47,19 +47,19 @@ exports.testSaveFullClient = function(test){
);
};

exports.testSaveUnorderedClient = function(test){
exports.testSaveUnorderedClient = function(test) {
var client = util.fullClient(),
unordered_client = {};

Object.keys(client).reverse().forEach(function(key){
Object.keys(client).reverse().forEach(function(key) {
unordered_client[key] = client[key];
});

test.expect(7);

mpGateway.saveClient(
unordered_client,
function(err, mp_err, data){
function(err, mp_err, data) {
test.ok(!err);
test.ok(!mp_err);

Expand Down
Loading

0 comments on commit 2b9600a

Please sign in to comment.