@@ -3,11 +3,11 @@ var util = require('util');
3
3
var BaseGateway = require ( '42-cent-base' ) . BaseGateway ;
4
4
var mapKeys = require ( '42-cent-util' ) . mapKeys ;
5
5
var GatewayError = require ( '42-cent-base' ) . GatewayError ;
6
- var Promise = require ( 'bluebird' ) ;
6
+ var P = require ( 'bluebird' ) ;
7
7
var request = require ( 'request' ) ;
8
- var toJson = Promise . promisify ( require ( 'xml2js' ) . parseString ) ;
8
+ var toJson = P . promisify ( require ( 'xml2js' ) . parseString ) ;
9
9
var xml2js = require ( 'xml2js' ) ;
10
- var post = Promise . promisify ( request . post ) ;
10
+ var post = P . promisify ( request . post ) ;
11
11
var schemas = require ( './schemas.js' ) ;
12
12
13
13
var billToSchema = schemas . billing ;
@@ -50,34 +50,26 @@ function setRequest (service, rootNodeName, requestNode) {
50
50
51
51
requestObject [ rootNodeName ] [ requestNode . key ] = requestNode . value ;
52
52
53
- //var objarray2 = xmlBuilder.buildObject(requestObject);
54
- //objarray(requestObject);
55
-
56
- //objarray2[0][rootNodeName].unshift({
57
- // _attr: {
58
- // "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
59
- // "xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
60
- // "xmlns": "AnetApi/xml/v1/schema/AnetApiSchema.xsd"
61
- // }
62
- //});
63
-
64
53
return requestObject ;
65
54
66
55
}
67
56
68
- function sendXmlifiedRequest ( service , request ) {
69
-
70
- var builder = new xml2js . Builder ( ) ;
71
-
72
- var xmlContent = builder . buildObject ( request ) ;
73
-
74
- return post ( service . endpoint , {
75
- headers : {
76
- 'Content-Type' : 'application/xml' ,
77
- 'Content-Length' : xmlContent . length
78
- } ,
79
- body : xmlContent
80
- } ) ;
57
+ function sendXmlifiedRequest ( service ) {
58
+
59
+ return function ( request ) {
60
+ return P . resolve ( )
61
+ . then ( function ( ) {
62
+ var builder = new xml2js . Builder ( ) ;
63
+ var xmlContent = builder . buildObject ( request ) ;
64
+ return post ( service . endpoint , {
65
+ headers : {
66
+ 'Content-Type' : 'application/xml' ,
67
+ 'Content-Length' : xmlContent . length
68
+ } ,
69
+ body : xmlContent
70
+ } )
71
+ } ) ;
72
+ }
81
73
}
82
74
83
75
function createJsonCallback ( cb ) {
@@ -97,12 +89,17 @@ function createJsonCallback (cb) {
97
89
}
98
90
99
91
AuthorizeNetGateway . prototype . sendTransactionRequest = function setTransactionRequest ( body , transactionCb ) {
100
- var obj = setRequest ( this , 'createTransactionRequest' , {
101
- key : 'transactionRequest' ,
102
- value : body
103
- } ) ;
104
92
105
- return sendXmlifiedRequest ( this , obj )
93
+ var service = this ;
94
+
95
+ return P . resolve ( )
96
+ . then ( function ( ) {
97
+ return setRequest ( service , 'createTransactionRequest' , {
98
+ key : 'transactionRequest' ,
99
+ value : body
100
+ } ) ;
101
+ } )
102
+ . then ( sendXmlifiedRequest ( service ) )
106
103
. spread ( createJsonCallback ( function ( json ) {
107
104
if ( json . createTransactionResponse ) {
108
105
@@ -288,7 +285,7 @@ AuthorizeNetGateway.prototype.refundTransaction = function refundTransaction (tr
288
285
var opt = options || { } ;
289
286
290
287
if ( ! opt . expirationMonth || ! opt . expirationYear ) {
291
- return Promise . reject ( new Error ( 'expirationMonth and expirationYear must be provided in the options object' ) ) ;
288
+ return P . reject ( new Error ( 'expirationMonth and expirationYear must be provided in the options object' ) ) ;
292
289
}
293
290
294
291
//fetch missing info if required
@@ -299,7 +296,7 @@ AuthorizeNetGateway.prototype.refundTransaction = function refundTransaction (tr
299
296
opt . creditCardNumber = opt . creditCardNumber || res . payment [ 0 ] . creditCard [ 0 ] . cardNumber [ 0 ] ;
300
297
return opt ;
301
298
} ) :
302
- Promise . resolve ( opt ) ;
299
+ P . resolve ( opt ) ;
303
300
304
301
305
302
return fullOptions . then ( function ( fullOpt ) {
@@ -333,17 +330,21 @@ AuthorizeNetGateway.prototype.refundTransaction = function refundTransaction (tr
333
330
334
331
AuthorizeNetGateway . prototype . getTransactionList = function getTransactionList ( batchId ) {
335
332
336
- var obj = setRequest ( this , 'getTransactionListRequest' , {
337
- key : 'batchId' ,
338
- value : batchId
339
- } ) ;
333
+ var service = this ;
340
334
341
- return sendXmlifiedRequest ( this , obj )
335
+ return P . resolve ( )
336
+ . then ( function ( ) {
337
+ return setRequest ( service , 'createTransactionRequest' , {
338
+ key : 'batchId' ,
339
+ value : batchId
340
+ } ) ;
341
+ } )
342
+ . then ( sendXmlifiedRequest ( service ) )
342
343
. spread ( createJsonCallback ( function ( json ) {
343
344
var transactions ;
344
345
if ( json . getTransactionListResponse ) {
345
346
346
- if ( json . getTransactionListResponse . messages . resultCode === 'Error' ) {
347
+ if ( json . getTransactionListResponse . messages [ 0 ] . resultCode [ 0 ] === 'Error' ) {
347
348
throw new GatewayError ( 'some error from the gateway' , json . getTransactionListResponse ) ;
348
349
}
349
350
@@ -359,20 +360,25 @@ AuthorizeNetGateway.prototype.getTransactionList = function getTransactionList (
359
360
} ;
360
361
361
362
AuthorizeNetGateway . prototype . getTransactionDetails = function getTransactionDetails ( transId ) {
362
- var obj = setRequest ( this , 'getTransactionDetailsRequest' , {
363
- key : 'transId' ,
364
- value : transId
365
- } ) ;
366
363
367
- return sendXmlifiedRequest ( this , obj )
364
+ var service = this ;
365
+
366
+ return P . resolve ( )
367
+ . then ( function ( ) {
368
+ return setRequest ( service , 'getTransactionDetailsRequest' , {
369
+ key : 'transId' ,
370
+ value : transId
371
+ } ) ;
372
+ } )
373
+ . then ( sendXmlifiedRequest ( service ) )
368
374
. spread ( createJsonCallback ( function ( json ) {
369
375
if ( json . getTransactionDetailsResponse ) {
370
376
371
- if ( json . getTransactionDetailsResponse . messages . resultCode === 'Error' ) {
377
+ if ( json . getTransactionDetailsResponse . messages [ 0 ] . resultCode [ 0 ] === 'Error' ) {
372
378
throw new GatewayError ( 'some error from the gateway' , json . getTransactionDetailsResponse ) ;
373
379
}
374
380
375
- return json . getTransactionDetailsResponse . transaction ;
381
+ return json . getTransactionDetailsResponse . transaction [ 0 ] ;
376
382
377
383
} else {
378
384
throw new Error ( 'Can not parse answer from gateway' ) ;
@@ -401,31 +407,37 @@ AuthorizeNetGateway.prototype.voidTransaction = function voidTransaction (transa
401
407
*/
402
408
AuthorizeNetGateway . prototype . createCustomerProfile = function ( payment , billing , shipping , options ) {
403
409
404
- options = options || { } ;
410
+ var service = this ;
405
411
406
- var body = {
407
- merchantCustomerId : options . merchantCustomerId || '' ,
408
- description : options . description || '' ,
409
- email : billing . billingEmailAddress ,
410
- paymentProfiles : {
411
- payment : {
412
- creditCard : {
413
- cardNumber : payment . creditCardNumber ,
414
- expirationDate : [ payment . expirationYear . toString ( ) , payment . expirationMonth . toString ( ) ] . join ( '-' ) ,
415
- cardCode : payment . cvv2
412
+ return P . resolve ( )
413
+ . then ( function ( ) {
414
+ options = options || { } ;
415
+
416
+ var body = {
417
+ merchantCustomerId : options . merchantCustomerId || '' ,
418
+ description : options . description || '' ,
419
+ email : billing . billingEmailAddress ,
420
+ paymentProfiles : {
421
+ payment : {
422
+ creditCard : {
423
+ cardNumber : payment . creditCardNumber ,
424
+ expirationDate : [ payment . expirationYear . toString ( ) , payment . expirationMonth . toString ( ) ] . join ( '-' ) ,
425
+ cardCode : payment . cvv2
426
+ }
427
+ }
416
428
}
417
- }
418
- }
419
- } ;
429
+ } ;
420
430
421
- var obj = setRequest ( this , 'createCustomerProfileRequest' , {
422
- key : 'profile' ,
423
- value : body
424
- } ) ;
431
+ var obj = setRequest ( service , 'createCustomerProfileRequest' , {
432
+ key : 'profile' ,
433
+ value : body
434
+ } ) ;
425
435
426
- obj . createCustomerProfileRequest . validationMode = this . testMode ? 'testMode' : 'none' ;
436
+ obj . createCustomerProfileRequest . validationMode = this . testMode ? 'testMode' : 'none' ;
427
437
428
- return sendXmlifiedRequest ( this , obj )
438
+ return obj ;
439
+ } )
440
+ . then ( sendXmlifiedRequest ( service ) )
429
441
. spread ( createJsonCallback ( function ( json ) {
430
442
431
443
var errors ;
@@ -499,9 +511,12 @@ AuthorizeNetGateway.prototype.chargeCustomer = function (order, prospect, other)
499
511
*/
500
512
AuthorizeNetGateway . prototype . getCustomerProfile = function getCustomerProfile ( profileId ) {
501
513
502
- var req = setRequest ( this , 'getCustomerProfileRequest' , { key : 'customerProfileId' , value : profileId } ) ;
503
-
504
- return sendXmlifiedRequest ( this , req )
514
+ var service = this ;
515
+ return P . resolve ( )
516
+ . then ( function ( ) {
517
+ return setRequest ( service , 'getCustomerProfileRequest' , { key : 'customerProfileId' , value : profileId } ) ;
518
+ } )
519
+ . then ( sendXmlifiedRequest ( service ) )
505
520
. spread ( createJsonCallback ( function ( json ) {
506
521
if ( json . getCustomerProfileResponse ) {
507
522
@@ -551,38 +566,41 @@ AuthorizeNetGateway.prototype.createSubscription = function createSubscription (
551
566
return yearString + '-' + monthString + '-' + dayString ;
552
567
}
553
568
554
- var expirationYear = cc . expirationYear . toString ( ) . length === 4 ? cc . expirationYear . toString ( ) . substr ( - 2 ) : cc . expirationYear . toString ( ) ;
555
- var expirationMonth = cc . expirationMonth . toString ( ) . length === 2 ? cc . expirationMonth . toString ( ) : '0' + cc . expirationMonth . toString ( ) ;
556
- var startDate = new Date ( subscriptionPlan . startingDate ) ;
557
-
558
- var body = {
559
- paymentSchedule : {
560
- interval : {
561
- length : subscriptionPlan . periodLength || 1 ,
562
- unit : subscriptionPlan . periodUnit || 'months'
563
- } ,
564
- startDate : formatString ( startDate ) ,
565
- totalOccurrences : subscriptionPlan . iterationCount ,
566
- trialOccurrences : subscriptionPlan . trialCount || 0
567
- } ,
568
- amount : subscriptionPlan . amount ,
569
- trialAmount : subscriptionPlan . trialAmount || 0 ,
570
- payment : {
571
- creditCard : {
572
- cardNumber : cc . creditCardNumber ,
573
- expirationDate : expirationMonth + expirationYear ,
574
- cardCode : cc . cvv
575
- }
576
- } ,
577
- billTo : mapKeys ( prospect , billToSchema )
578
- } ;
569
+ var service = this ;
579
570
580
- var obj = setRequest ( this , 'ARBCreateSubscriptionRequest' , {
581
- key : 'subscription' ,
582
- value : body
583
- } ) ;
571
+ return P . resolve ( )
572
+ . then ( function ( ) {
573
+ var expirationYear = cc . expirationYear . toString ( ) . length === 4 ? cc . expirationYear . toString ( ) . substr ( - 2 ) : cc . expirationYear . toString ( ) ;
574
+ var expirationMonth = cc . expirationMonth . toString ( ) . length === 2 ? cc . expirationMonth . toString ( ) : '0' + cc . expirationMonth . toString ( ) ;
575
+ var startDate = new Date ( subscriptionPlan . startingDate ) ;
576
+ var body = {
577
+ paymentSchedule : {
578
+ interval : {
579
+ length : subscriptionPlan . periodLength || 1 ,
580
+ unit : subscriptionPlan . periodUnit || 'months'
581
+ } ,
582
+ startDate : formatString ( startDate ) ,
583
+ totalOccurrences : subscriptionPlan . iterationCount ,
584
+ trialOccurrences : subscriptionPlan . trialCount || 0
585
+ } ,
586
+ amount : subscriptionPlan . amount ,
587
+ trialAmount : subscriptionPlan . trialAmount || 0 ,
588
+ payment : {
589
+ creditCard : {
590
+ cardNumber : cc . creditCardNumber ,
591
+ expirationDate : expirationMonth + expirationYear ,
592
+ cardCode : cc . cvv2
593
+ }
594
+ } ,
595
+ billTo : mapKeys ( prospect , billToSchema )
596
+ } ;
584
597
585
- return sendXmlifiedRequest ( this , obj )
598
+ return setRequest ( service , 'ARBCreateSubscriptionRequest' , {
599
+ key : 'subscription' ,
600
+ value : body
601
+ } ) ;
602
+ } )
603
+ . then ( sendXmlifiedRequest ( service ) )
586
604
. spread ( createJsonCallback ( function ( json ) {
587
605
if ( json . ARBCreateSubscriptionResponse ) {
588
606
@@ -605,8 +623,6 @@ AuthorizeNetGateway.prototype.createSubscription = function createSubscription (
605
623
} else {
606
624
throw new Error ( 'Can not parse the answer from the gateway' ) ;
607
625
}
608
-
609
-
610
626
} ) ) ;
611
627
} ;
612
628
0 commit comments