partner-datacell.js
3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var http = require('http');
var url = require('url');
var math = require('mathjs');
var xml = require('xml');
var strftime = require('strftime');
var xor = require('base64-xor');
var request = require('request');
var config;
var callbackReport;
var max_retry = 2;
var sleep_before_retry = 2000;
function calculateSignature(userid, password, msisdn, timestamp) {
var a = msisdn.substr(msisdn.length - 4) + timestamp;
console.log(a);
var b = userid.substr(0, 4) + password;
console.log(b);
return xor.encode(a,b);
}
function createPayload(task) {
var timestamp = strftime('%H%M%S');
var payload = {
datacell: [
{ perintah: 'charge'},
{oprcode: task['remoteProduct']},
{userid: config.h2h_out.userid},
{time: timestamp},
{msisdn: task['destination']},
{ref_trxid: task['requestId']},
{sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp)}
]
};
console.log(payload);
return "<?xml version=\"1.0\" ?>\n" + xml(payload);
}
function topupRequest(task, retry) {
if (config.globals.requests_count == undefined) {
config.globals.requests_count = 1;
} else {
config.globals.requests_count++;
}
if (config.globals.active_requests_count == undefined) {
config.globals.active_requests_count = 1;
} else {
config.globals.active_requests_count++;
}
if (config.globals.max_active_requests_count == undefined) {
config.globals.max_active_requests_count = config.globals.active_requests_count;
} else {
config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
}
if (retry === undefined) {
retry = max_retry;
}
var payload_xml = createPayload(task);
console.log(payload_xml);
var postRequest = {
host: "202.152.62.2",
path: "/RELOAD97.php",
port: 7713,
method: "POST",
headers: {
'Content-Type': 'text/xml',
'Content-Length': Buffer.byteLength(payload_xml)
}
};
var buffer = "";
var req = http.request( postRequest, function( res ) {
console.log('Status code: ' + res.statusCode );
var buffer = "";
res.on( "data", function( data ) { buffer = buffer + data; } );
res.on( "end", function( data ) { console.log( data ); } );
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.write( payload_xml );
req.end();
}
function createServer() {
var httpServer = http.createServer(function(req, res) {
console.log('Got request from partner, url: ' + req.url);
console.log('REQ:');
console.log(req);
res.end('OK');
});
httpServer.listen(config.h2h_out.listen_port, function() {
console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
});
}
function start(_config, _callbackReport) {
config = _config;
callbackReport = _callbackReport
createServer();
}
exports.start = start;
exports.topupRequest = topupRequest;