Commit d2933ca99f95120a772106e07813bebdde80a48c

Authored by Adhidarma Hadiwinoto
1 parent 52308438de
Exists in master

require http

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

1 var http = require('http');
1 var url = require('url'); 2 var url = require('url');
2 var math = require('mathjs'); 3 var math = require('mathjs');
3 var xml = require('xml'); 4 var xml = require('xml');
4 var strftime = require('strftime'); 5 var strftime = require('strftime');
5 var xor = require('base64-xor'); 6 var xor = require('base64-xor');
6 var request = require('request'); 7 var request = require('request');
7 8
8 var config; 9 var config;
9 var callbackReport; 10 var callbackReport;
10 11
11 var max_retry = 2; 12 var max_retry = 2;
12 var sleep_before_retry = 2000; 13 var sleep_before_retry = 2000;
13 14
14 function calculateSignature(userid, password, msisdn, timestamp) { 15 function calculateSignature(userid, password, msisdn, timestamp) {
15 var a = msisdn.substr(msisdn.length - 4) + timestamp; 16 var a = msisdn.substr(msisdn.length - 4) + timestamp;
16 var b = userid.substr(0, 4) + password; 17 var b = userid.substr(0, 4) + password;
17 18
18 return xor.encode(a,b); 19 return xor.encode(a,b);
19 } 20 }
20 21
21 function createPayload(task) { 22 function createPayload(task) {
22 var timestamp = strftime('%H%M%S'); 23 var timestamp = strftime('%H%M%S');
23 24
24 var payload = { 25 var payload = {
25 datacell: { 26 datacell: {
26 perintah: 'charge', 27 perintah: 'charge',
27 oprcode: task['remoteProduct'], 28 oprcode: task['remoteProduct'],
28 userid: config.h2h_out.userid, 29 userid: config.h2h_out.userid,
29 time: timestamp, 30 time: timestamp,
30 msisdn: task['destination'], 31 msisdn: task['destination'],
31 ref_trxid: task['requestId'], 32 ref_trxid: task['requestId'],
32 sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp) 33 sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp)
33 } 34 }
34 }; 35 };
35 36
36 console.log(payload); 37 console.log(payload);
37 return xml(payload); 38 return xml(payload);
38 } 39 }
39 40
40 function topupRequest(task, retry) { 41 function topupRequest(task, retry) {
41 if (config.globals.requests_count == undefined) { 42 if (config.globals.requests_count == undefined) {
42 config.globals.requests_count = 1; 43 config.globals.requests_count = 1;
43 } else { 44 } else {
44 config.globals.requests_count++; 45 config.globals.requests_count++;
45 } 46 }
46 47
47 if (config.globals.active_requests_count == undefined) { 48 if (config.globals.active_requests_count == undefined) {
48 config.globals.active_requests_count = 1; 49 config.globals.active_requests_count = 1;
49 } else { 50 } else {
50 config.globals.active_requests_count++; 51 config.globals.active_requests_count++;
51 } 52 }
52 53
53 if (config.globals.max_active_requests_count == undefined) { 54 if (config.globals.max_active_requests_count == undefined) {
54 config.globals.max_active_requests_count = config.globals.active_requests_count; 55 config.globals.max_active_requests_count = config.globals.active_requests_count;
55 } else { 56 } else {
56 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);
57 } 58 }
58 59
59 60
60 if (retry === undefined) { 61 if (retry === undefined) {
61 retry = max_retry; 62 retry = max_retry;
62 } 63 }
63 64
64 var payload_xml = createPayload(task); 65 var payload_xml = createPayload(task);
65 66
66 request.post(config.h2h_out.partner, {message: payload_xml}, function(error, response, body) { 67 request.post(config.h2h_out.partner, {message: payload_xml}, function(error, response, body) {
67 if (error) { 68 if (error) {
68 var error_mesasge = 'Error requesting to partner: ' + error; 69 var error_mesasge = 'Error requesting to partner: ' + error;
69 console.log(error_message); 70 console.log(error_message);
70 callbackReport(task['requestId'], '40', error_message); 71 callbackReport(task['requestId'], '40', error_message);
71 return; 72 return;
72 } 73 }
73 74
74 if (response.statusCode != 200) { 75 if (response.statusCode != 200) {
75 var error_mesasge = 'HTTP status code = ' + response.statusCode; 76 var error_mesasge = 'HTTP status code = ' + response.statusCode;
76 console.log(error_message); 77 console.log(error_message);
77 callbackReport(task['requestId'], '40', error_message); 78 callbackReport(task['requestId'], '40', error_message);
78 return; 79 return;
79 } 80 }
80 81
81 console.log('Direct response from partner:'); 82 console.log('Direct response from partner:');
82 console.log(body); 83 console.log(body);
83 callbackReport(task['requestId'], '68', 'cek'); 84 callbackReport(task['requestId'], '68', 'cek');
84 85
85 });; 86 });;
86 } 87 }
87 88
88 function createServer() { 89 function createServer() {
89 var httpServer = http.createServer(function(req, res) { 90 var httpServer = http.createServer(function(req, res) {
90 console.log('Got request from partner: ' + req.url); 91 console.log('Got request from partner: ' + req.url);
91 res.end('OK'); 92 res.end('OK');
92 }); 93 });
93 94
94 httpServer.listen(config.h2h_out.listen_port, function() { 95 httpServer.listen(config.h2h_out.listen_port, function() {
95 console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); 96 console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
96 }); 97 });
97 } 98 }
98 99
99 100
100 function start(_config, _callbackReport) { 101 function start(_config, _callbackReport) {
101 config = _config; 102 config = _config;
102 callbackReport = _callbackReport 103 callbackReport = _callbackReport
103 104
104 createServer(); 105 createServer();
105 } 106 }
106 107
107 exports.start = start; 108 exports.start = start;
108 exports.topupRequest = topupRequest; 109 exports.topupRequest = topupRequest;
109 110