Commit e99d1526944cfa767cc2f646f4098bb4a0746e0c

Authored by Adhidarma Hadiwinoto
1 parent 1173f582ad
Exists in master

coba reverse

Showing 1 changed file with 0 additions and 2 deletions Inline Diff

1 var winston = require('winston'); 1 var winston = require('winston');
2 var request = require('request'); 2 var request = require('request');
3 var xmlrpc = require('xmlrpc'); 3 var xmlrpc = require('xmlrpc');
4 var url = require('url'); 4 var url = require('url');
5 var http = require('http'); 5 var http = require('http');
6 6
7 var max_retry = 3; 7 var max_retry = 3;
8 var sleep_before_retry = 2000; 8 var sleep_before_retry = 2000;
9 9
10 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 10 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
11 11
12 var config; 12 var config;
13 var callbackReport; 13 var callbackReport;
14 var aaa; 14 var aaa;
15 var logger; 15 var logger;
16 var options; 16 var options;
17 17
18 function start(_config, _callbackReport, options) { 18 function start(_config, _callbackReport, options) {
19 config = _config; 19 config = _config;
20 callbackReport = _callbackReport 20 callbackReport = _callbackReport
21 21
22 if (options && options.aaa) { 22 if (options && options.aaa) {
23 aaa = options.aaa; 23 aaa = options.aaa;
24 } 24 }
25 25
26 if (options && options.logger) { 26 if (options && options.logger) {
27 logger = options.logger; 27 logger = options.logger;
28 } else { 28 } else {
29 logger = new winston.Logger({ 29 logger = new winston.Logger({
30 transports: [ 30 transports: [
31 new (winston.transports.Console)() 31 new (winston.transports.Console)()
32 ] 32 ]
33 }); 33 });
34 } 34 }
35 35
36 createHttpReportServer(); 36 createHttpReportServer();
37 } 37 }
38 38
39 function createHttpReportServer() { 39 function createHttpReportServer() {
40 var httpServer = http.createServer(function(request, response) { 40 var httpServer = http.createServer(function(request, response) {
41 var qs = url.parse(request.url, true).query; 41 var qs = url.parse(request.url, true).query;
42 var path = url.parse(request.url).pathname; 42 var path = url.parse(request.url).pathname;
43 43
44 logger.info('Got reverse report from partner', {path: path, qs: qs}); 44 logger.info('Got reverse report from partner', {path: path, qs: qs});
45 response.end('OK'); 45 response.end('OK');
46 46
47 /*
48 var trxid; 47 var trxid;
49 try { 48 try {
50 trxid = qs.transid; 49 trxid = qs.transid;
51 } 50 }
52 catch(err) { 51 catch(err) {
53 } 52 }
54 53
55 if (trxid) { 54 if (trxid) {
56 logger.info('Requesting advice from webreport', {trxid: trxid}) 55 logger.info('Requesting advice from webreport', {trxid: trxid})
57 cekstatus.advice({trxid: trxid}, callbackFromWebReport); 56 cekstatus.advice({trxid: trxid}, callbackFromWebReport);
58 } 57 }
59 */
60 58
61 }); 59 });
62 60
63 httpServer.listen(config.h2h_out.listen_port, function() { 61 httpServer.listen(config.h2h_out.listen_port, function() {
64 logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); 62 logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
65 }); 63 });
66 } 64 }
67 65
68 function topupRequestHttpGet(task, retry) { 66 function topupRequestHttpGet(task, retry) {
69 67
70 var options = { 68 var options = {
71 method: 'GET', 69 method: 'GET',
72 url: config.h2h_out.partner, 70 url: config.h2h_out.partner,
73 qs: { 71 qs: {
74 id: config.h2h_out.userid, 72 id: config.h2h_out.userid,
75 pin: config.h2h_out.pin, 73 pin: config.h2h_out.pin,
76 user: config.h2h_out.user, 74 user: config.h2h_out.user,
77 pass: config.h2h_put.password, 75 pass: config.h2h_put.password,
78 kodeproduk: task.remoteProduct, 76 kodeproduk: task.remoteProduct,
79 tujuan: task.destination, 77 tujuan: task.destination,
80 idtrx: task.requestId 78 idtrx: task.requestId
81 } 79 }
82 } 80 }
83 81
84 request(options, function(err, res, body) { 82 request(options, function(err, res, body) {
85 }); 83 });
86 } 84 }
87 85
88 function topupRequestXMLRPC(task, retry) { 86 function topupRequestXMLRPC(task, retry) {
89 var partnerUrl = url.parse(config.h2h_out.partner); 87 var partnerUrl = url.parse(config.h2h_out.partner);
90 var clientOptions = { 88 var clientOptions = {
91 host: partnerUrl.hostname 89 host: partnerUrl.hostname
92 , port: partnerUrl.port 90 , port: partnerUrl.port
93 , path: partnerUrl.pathname 91 , path: partnerUrl.pathname
94 }; 92 };
95 logger.info('Preparing XMLRPC client options', {options: clientOptions}); 93 logger.info('Preparing XMLRPC client options', {options: clientOptions});
96 94
97 var client; 95 var client;
98 if (partnerUrl.protocol == 'https:') { 96 if (partnerUrl.protocol == 'https:') {
99 client = xmlrpc.createSecureClient(clientOptions); 97 client = xmlrpc.createSecureClient(clientOptions);
100 } else { 98 } else {
101 client = xmlrpc.createClient(clientOptions); 99 client = xmlrpc.createClient(clientOptions);
102 } 100 }
103 101
104 var params = { 102 var params = {
105 MSISDN: config.h2h_out.userid, 103 MSISDN: config.h2h_out.userid,
106 REQUESTID: task.requestId, 104 REQUESTID: task.requestId,
107 PIN: config.h2h_out.password, 105 PIN: config.h2h_out.password,
108 NOHP: task.destination, 106 NOHP: task.destination,
109 NOM: task.remoteProduct 107 NOM: task.remoteProduct
110 }; 108 };
111 109
112 var methodName = 'topUpRequest'; 110 var methodName = 'topUpRequest';
113 logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params}); 111 logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params});
114 112
115 client.methodCall(methodName, [ params ], function (error, value) { 113 client.methodCall(methodName, [ params ], function (error, value) {
116 // Results of the method response 114 // Results of the method response
117 if (error) { 115 if (error) {
118 116
119 logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error}); 117 logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error});
120 118
121 if (retry) { 119 if (retry) {
122 120
123 logger.info('Retrying topUpRequest (' + retry + ')'); 121 logger.info('Retrying topUpRequest (' + retry + ')');
124 setTimeout(function() { 122 setTimeout(function() {
125 topupRequest(task, retry - 1); 123 topupRequest(task, retry - 1);
126 }, sleep_before_retry); 124 }, sleep_before_retry);
127 125
128 } else { 126 } else {
129 callbackReport(task['requestId'], '68', 'Silahkan resend. Gangguan koneksi ke suplier: ' + error); 127 callbackReport(task['requestId'], '68', 'Silahkan resend. Gangguan koneksi ke suplier: ' + error);
130 } 128 }
131 return; 129 return;
132 } 130 }
133 131
134 logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value}); 132 logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value});
135 133
136 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { 134 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
137 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; 135 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
138 } 136 }
139 137
140 if (value['RESPONSECODE'] != '00') { 138 if (value['RESPONSECODE'] != '00') {
141 value['RESPONSECODE'] = '40'; 139 value['RESPONSECODE'] = '40';
142 } 140 }
143 141
144 callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); 142 callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
145 }); 143 });
146 } 144 }
147 145
148 function topupRequest(task, retry) { 146 function topupRequest(task, retry) {
149 topupRequestXMLRPC(task, retry); 147 topupRequestXMLRPC(task, retry);
150 } 148 }
151 149
152 exports.start = start; 150 exports.start = start;
153 exports.topupRequest = topupRequest; 151 exports.topupRequest = topupRequest;
154 152