Commit bb9e3f505699b4bfc0807be48bfb3eeb7efac240
1 parent
73c4fa0434
Exists in
master
coba salah
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
partner-kospinjasa.js
1 | var winston = require('winston'); | 1 | var winston = require('winston'); |
2 | var soap = require('soap'); | 2 | var soap = require('soap'); |
3 | var crypto = require('crypto'); | 3 | var crypto = require('crypto'); |
4 | var strftime = require('strftime'); | 4 | var strftime = require('strftime'); |
5 | 5 | ||
6 | var max_retry = 10; | 6 | var max_retry = 10; |
7 | var sleep_before_retry = 5000; | 7 | var sleep_before_retry = 5000; |
8 | 8 | ||
9 | var config; | 9 | var config; |
10 | var callbackReport; | 10 | var callbackReport; |
11 | var aaa; | 11 | var aaa; |
12 | var logger; | 12 | var logger; |
13 | var options; | 13 | var options; |
14 | 14 | ||
15 | function start(_config, _callbackReport, options) { | 15 | function start(_config, _callbackReport, options) { |
16 | config = _config; | 16 | config = _config; |
17 | callbackReport = _callbackReport | 17 | callbackReport = _callbackReport |
18 | 18 | ||
19 | if (options && options.aaa) { | 19 | if (options && options.aaa) { |
20 | aaa = options.aaa; | 20 | aaa = options.aaa; |
21 | } | 21 | } |
22 | 22 | ||
23 | if (options && options.logger) { | 23 | if (options && options.logger) { |
24 | logger = options.logger; | 24 | logger = options.logger; |
25 | } else { | 25 | } else { |
26 | logger = new winston.Logger({ | 26 | logger = new winston.Logger({ |
27 | transports: [ | 27 | transports: [ |
28 | new (winston.transports.Console)() | 28 | new (winston.transports.Console)() |
29 | ] | 29 | ] |
30 | }); | 30 | }); |
31 | } | 31 | } |
32 | } | 32 | } |
33 | 33 | ||
34 | function topupRequest(task, retry) { | 34 | function topupRequest(task, retry) { |
35 | if (retry === undefined) { | 35 | if (retry === undefined) { |
36 | retry = max_retry; | 36 | retry = max_retry; |
37 | } | 37 | } |
38 | 38 | ||
39 | var remoteProduct = task.remoteProduct.split(','); | 39 | var remoteProduct = task.remoteProduct.split(','); |
40 | 40 | ||
41 | soap.createClient(config.h2h_out.partner, function(err, client) { | 41 | soap.createClient(config.h2h_out.partner, function(err, client) { |
42 | var args = { | 42 | var args = { |
43 | userName: config.h2h_out.userid, | 43 | userNam: config.h2h_out.userid, |
44 | productCode: remoteProduct[0] , | 44 | productCode: remoteProduct[0] , |
45 | terminal: 'terminal0', | 45 | terminal: 'terminal0', |
46 | transactionType: '50', | 46 | transactionType: '50', |
47 | billNumber: createBillNumber(task.destination), | 47 | billNumber: createBillNumber(task.destination), |
48 | amount: remoteProduct[1], | 48 | amount: remoteProduct[1], |
49 | bit61: createBillNumber(task.destination), | 49 | bit61: createBillNumber(task.destination), |
50 | reff: task.requestId, | 50 | reff: task.requestId, |
51 | timeStamp: strftime('%d-%m-%Y %H:%M:%S', new Date()), | 51 | timeStamp: strftime('%d-%m-%Y %H:%M:%S', new Date()), |
52 | } | 52 | } |
53 | 53 | ||
54 | var signature = createSignature(args, config.h2h_out.password); | 54 | var signature = createSignature(args, config.h2h_out.password); |
55 | args.signature = signature; | 55 | args.signature = signature; |
56 | 56 | ||
57 | logger.info('Requesting to service', {url: config.h2h_out.partner, args: args}); | 57 | logger.info('Requesting to service', {url: config.h2h_out.partner, args: args}); |
58 | 58 | ||
59 | client.apih2h.apih2hPort.billpayment(args, function(err, result) { | 59 | client.apih2h.apih2hPort.billpayment(args, function(err, result) { |
60 | if (err) { | 60 | if (err) { |
61 | logger.warn('Error requesting service', {err: err}); | 61 | logger.warn('Error requesting service', {err: err}); |
62 | callbackReport(task.requestId, '68', 'something wrong'); | 62 | callbackReport(task.requestId, '68', 'something wrong'); |
63 | return; | 63 | return; |
64 | } | 64 | } |
65 | 65 | ||
66 | var responseMessageToST24 = result.outputParameter.resultCode.$value + ' - ' + result.outputParameter.resultDesc.$value; | 66 | var responseMessageToST24 = result.outputParameter.resultCode.$value + ' - ' + result.outputParameter.resultDesc.$value; |
67 | 67 | ||
68 | logger.info('Got result: ' + responseMessageToST24, {result: result}); | 68 | logger.info('Got result: ' + responseMessageToST24, {result: result}); |
69 | 69 | ||
70 | callbackReport(task.requestId, '68', responseMessageToST24); | 70 | callbackReport(task.requestId, '68', responseMessageToST24); |
71 | }); | 71 | }); |
72 | }); | 72 | }); |
73 | } | 73 | } |
74 | 74 | ||
75 | function createSignature(args, password) { | 75 | function createSignature(args, password) { |
76 | var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); | 76 | var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); |
77 | 77 | ||
78 | var plain = | 78 | var plain = |
79 | args.userName | 79 | args.userName |
80 | + passwordHash | 80 | + passwordHash |
81 | + args.productCode | 81 | + args.productCode |
82 | + args.terminal | 82 | + args.terminal |
83 | + args.transactionType | 83 | + args.transactionType |
84 | + args.billNumber | 84 | + args.billNumber |
85 | + args.amount | 85 | + args.amount |
86 | + args.reff | 86 | + args.reff |
87 | + args.timeStamp; | 87 | + args.timeStamp; |
88 | 88 | ||
89 | var result = crypto.createHash('sha1').update(plain).digest().toString('hex'); | 89 | var result = crypto.createHash('sha1').update(plain).digest().toString('hex'); |
90 | 90 | ||
91 | if (logger) { | 91 | if (logger) { |
92 | logger.verbose('Calculating signature', {plain: plain, result: result, args: args, password: password}); | 92 | logger.verbose('Calculating signature', {plain: plain, result: result, args: args, password: password}); |
93 | } | 93 | } |
94 | 94 | ||
95 | return result; | 95 | return result; |
96 | } | 96 | } |
97 | 97 | ||
98 | function createBillNumber(destination) { | 98 | function createBillNumber(destination) { |
99 | return ("0000000000000" + destination).slice(-13); | 99 | return ("0000000000000" + destination).slice(-13); |
100 | } | 100 | } |
101 | 101 | ||
102 | exports.start = start; | 102 | exports.start = start; |
103 | exports.topupRequest = topupRequest; | 103 | exports.topupRequest = topupRequest; |
104 | exports.createSignature = createSignature; | 104 | exports.createSignature = createSignature; |
105 | exports.createBillNumber = createBillNumber; | 105 | exports.createBillNumber = createBillNumber; |
106 | 106 |