Commit 6b254f12fa001c0e113aa6962a31007c1b5ec492

Authored by Adhidarma Hadiwinoto
1 parent 49aa80909f
Exists in master

ubah flow

Showing 1 changed file with 11 additions and 12 deletions Inline Diff

1 var url = require('url'); 1 var url = require('url');
2 var math = require('mathjs'); 2 var math = require('mathjs');
3 var request = require('request'); 3 var request = require('request');
4 var xml = require("xml2js").parseString; 4 var xml = require("xml2js").parseString;
5 5
6 var config; 6 var config;
7 var callbackReport; 7 var callbackReport;
8 8
9 var max_retry = 15; 9 var max_retry = 15;
10 var sleep_before_retry = 3000; 10 var sleep_before_retry = 3000;
11 11
12 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 12 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
13 13
14 function parseSN(message, _config) { 14 function parseSN(message, _config) {
15 15
16 if (!_config) { 16 if (!_config) {
17 _config = config; 17 _config = config;
18 } 18 }
19 19
20 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 20 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
21 var sn_match = message.match(sn_regex); 21 var sn_match = message.match(sn_regex);
22 22
23 if (sn_match <= 0) { 23 if (sn_match <= 0) {
24 console.log('SN Not found: ' + message); 24 console.log('SN Not found: ' + message);
25 return ''; 25 return '';
26 } 26 }
27 27
28 var sn = sn_match[0]; 28 var sn = sn_match[0];
29 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 29 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
30 30
31 var count = sn_remove_patterns.length; 31 var count = sn_remove_patterns.length;
32 32
33 for(var i = 0; i < count; i++) { 33 for(var i = 0; i < count; i++) {
34 sn = sn.replace(sn_remove_patterns[i], ''); 34 sn = sn.replace(sn_remove_patterns[i], '');
35 } 35 }
36 36
37 return sn.trim(); 37 return sn.trim();
38 } 38 }
39 39
40 40
41 function topupRequest(task, retry) { 41 function topupRequest(task, retry) {
42 if (config.globals.requests_count == undefined) { 42 if (config.globals.requests_count == undefined) {
43 config.globals.requests_count = 1; 43 config.globals.requests_count = 1;
44 } else { 44 } else {
45 config.globals.requests_count++; 45 config.globals.requests_count++;
46 } 46 }
47 47
48 if (config.globals.active_requests_count == undefined) { 48 if (config.globals.active_requests_count == undefined) {
49 config.globals.active_requests_count = 1; 49 config.globals.active_requests_count = 1;
50 } else { 50 } else {
51 config.globals.active_requests_count++; 51 config.globals.active_requests_count++;
52 } 52 }
53 53
54 if (config.globals.max_active_requests_count == undefined) { 54 if (config.globals.max_active_requests_count == undefined) {
55 config.globals.max_active_requests_count = config.globals.active_requests_count; 55 config.globals.max_active_requests_count = config.globals.active_requests_count;
56 } else { 56 } else {
57 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 57 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
58 } 58 }
59 59
60 60
61 if (retry === undefined) { 61 if (retry === undefined) {
62 retry = max_retry; 62 retry = max_retry;
63 } 63 }
64 64
65 var params = { 65 var params = {
66 userid: config.h2h_out.userid, 66 userid: config.h2h_out.userid,
67 pwd: config.h2h_out.password, 67 pwd: config.h2h_out.password,
68 memberreff: task['requestId'], 68 memberreff: task['requestId'],
69 produk: task['remoteProduct'], 69 produk: task['remoteProduct'],
70 tujuan: task['destination'] 70 tujuan: task['destination']
71 }; 71 };
72 console.log('PARAMS:'); 72 console.log('PARAMS:');
73 console.log(params); 73 console.log(params);
74 74
75 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 75 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
76 76
77 config.globals.active_requests_count--; 77 config.globals.active_requests_count--;
78 78
79 if (err) { 79 if (err) {
80 console.log('HTTP Request Error (' + task['requestId'] + '): '); 80 console.log('HTTP Request Error (' + task['requestId'] + '): ');
81 console.log(err); 81 console.log(err);
82 82
83 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier'); 83 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier');
84 return; 84 return;
85 } 85 }
86 86
87 console.log('Server Response: '); 87 console.log('Server Response: ');
88 console.log(httpResponseBody); 88 console.log(httpResponseBody);
89 89
90 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 90 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
91 callbackReport(task['requestId'], '40', '502 Proxy error'); 91 callbackReport(task['requestId'], '40', '502 Proxy error');
92 return; 92 return;
93 } 93 }
94 94
95 xml(httpResponseBody, function(err, result) { 95 xml(httpResponseBody, function(err, result) {
96 if (err) { 96 if (err) {
97 console.log('Gagal parsing XML respon server'); 97 console.log('Gagal parsing XML respon server');
98 //topupRequest(task, retry - 1); 98 //topupRequest(task, retry - 1);
99 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 99 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
100 return; 100 return;
101 } 101 }
102 102
103 console.log('Response Data:'); 103 console.log('Response Data:');
104 console.log(result); 104 console.log(result);
105 105
106 var response_code = result.respon.rc[0].replace(/^00/, ''); 106 var response_code = result.respon.rc[0].replace(/^00/, '');
107 if (response_code == '54' || response_code == '68') {
108 if (retry) {
109 setTimeout(function() {
110 topupRequest(task, retry - 1);
111 }, 60000);
112
113 } else {
114 callbackReport(task['requestId'], '68', message);
115 }
116 return;
117 }
107 118
108 var token = ''; 119 var token = '';
109 if (result.respon.token) { 120 if (result.respon.token) {
110 token = result.respon.token[0]; 121 token = result.respon.token[0];
111 } 122 }
112 123
113 var data_pelanggan = 'NO-DATA'; 124 var data_pelanggan = 'NO-DATA';
114 if (result.respon.data) { 125 if (result.respon.data) {
115 data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 126 data_pelanggan = result.respon.data[0].replace(/ /g, '-');
116 } 127 }
117 128
118 var message = result.respon.pesan[0].replace(/\n/g, ' '); 129 var message = result.respon.pesan[0].replace(/\n/g, ' ');
119 130
120 if (response_code == '54' || response_code == '68') {
121 if (retry) {
122 setTimeout(function() {
123 topupRequest(task, retry - 1);
124 }, 60000);
125
126 } else {
127 callbackReport(task['requestId'], '68', message);
128 }
129 return;
130 }
131
132 131
133 if (response_code == '00') { 132 if (response_code == '00') {
134 133
135 var sn = ""; 134 var sn = "";
136 135
137 if (config.h2h_out.parse_sn == 'YES') { 136 if (config.h2h_out.parse_sn == 'YES') {
138 sn = parseSN(message); 137 sn = parseSN(message);
139 } else if (token && data_pelanggan) { 138 } else if (token && data_pelanggan) {
140 sn = token + '/' + data_pelanggan; 139 sn = token + '/' + data_pelanggan;
141 } 140 }
142 141
143 message = 'SN=' + sn + '; ' + message; 142 message = 'SN=' + sn + '; ' + message;
144 } 143 }
145 144
146 callbackReport(task['requestId'], response_code, message); 145 callbackReport(task['requestId'], response_code, message);
147 146
148 }); 147 });
149 }); 148 });
150 } 149 }
151 150
152 function start(_config, _callbackReport) { 151 function start(_config, _callbackReport) {
153 config = _config; 152 config = _config;
154 callbackReport = _callbackReport 153 callbackReport = _callbackReport
155 } 154 }
156 155
157 function parseResult(message) { 156 function parseResult(message) {
158 var data; 157 var data;