Commit bb3e05947bedeefec5551c0fd0141af35b9f3097
1 parent
cd12c75614
Exists in
master
siap dicoba
Showing 3 changed files with 179 additions and 0 deletions Side-by-side Diff
logs/empty
package.json
... | ... | @@ -0,0 +1,31 @@ |
1 | +{ | |
2 | + "name": "sate24-to-irs", | |
3 | + "version": "1.0.0", | |
4 | + "description": "ST25 to IRS", | |
5 | + "main": "index.js", | |
6 | + "scripts": { | |
7 | + "test": "mocha" | |
8 | + }, | |
9 | + "repository": { | |
10 | + "type": "git", | |
11 | + "url": "git@gitlab.kodesumber.com:reload97/sate24-to-irs.git" | |
12 | + }, | |
13 | + "keywords": [ | |
14 | + "st24", | |
15 | + "ppob", | |
16 | + "irs", | |
17 | + "reload97", | |
18 | + "r97" | |
19 | + ], | |
20 | + "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", | |
21 | + "license": "ISC", | |
22 | + "dependencies": { | |
23 | + "ini": "^1.3.4", | |
24 | + "request": "^2.72.0", | |
25 | + "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", | |
26 | + "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", | |
27 | + "url": "^0.11.0", | |
28 | + "winston": "^2.2.0", | |
29 | + "xmlrpc": "^1.3.1" | |
30 | + } | |
31 | +} |
partner-irs.js
... | ... | @@ -0,0 +1,148 @@ |
1 | +var winston = require('winston'); | |
2 | +var request = require('request'); | |
3 | +var xmlrpc = require('xmlrpc'); | |
4 | +var url = require('url'); | |
5 | + | |
6 | +var max_retry = 3; | |
7 | +var sleep_before_retry = 2000; | |
8 | + | |
9 | +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; | |
10 | + | |
11 | +var config; | |
12 | +var callbackReport; | |
13 | +var aaa; | |
14 | +var logger; | |
15 | +var options; | |
16 | + | |
17 | +function start(_config, _callbackReport, options) { | |
18 | + config = _config; | |
19 | + callbackReport = _callbackReport | |
20 | + | |
21 | + if (options && options.aaa) { | |
22 | + aaa = options.aaa; | |
23 | + } | |
24 | + | |
25 | + if (options && options.logger) { | |
26 | + logger = options.logger; | |
27 | + } else { | |
28 | + logger = new winston.Logger({ | |
29 | + transports: [ | |
30 | + new (winston.transports.Console)() | |
31 | + ] | |
32 | + }); | |
33 | + } | |
34 | + | |
35 | + createHttpReportServer(); | |
36 | +} | |
37 | + | |
38 | +function createHttpReportServer() { | |
39 | + var httpServer = http.createServer(function(request, response) { | |
40 | + var qs = url.parse(request.url, true).query; | |
41 | + var path = url.parse(request.url).pathname; | |
42 | + | |
43 | + logger.info('Got reverse report from partner', {path: path, qs: qs}); | |
44 | + response.end('OK'); | |
45 | + | |
46 | + /* | |
47 | + var trxid; | |
48 | + try { | |
49 | + trxid = qs.transid; | |
50 | + } | |
51 | + catch(err) { | |
52 | + } | |
53 | + | |
54 | + if (trxid) { | |
55 | + logger.info('Requesting advice from webreport', {trxid: trxid}) | |
56 | + cekstatus.advice({trxid: trxid}, callbackFromWebReport); | |
57 | + } | |
58 | + */ | |
59 | + | |
60 | + }); | |
61 | + | |
62 | + httpServer.listen(config.h2h_out.listen_port, function() { | |
63 | + logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); | |
64 | + }); | |
65 | +} | |
66 | + | |
67 | +function topupRequestHttpGet(task, retry) { | |
68 | + | |
69 | + var options = { | |
70 | + method: 'GET', | |
71 | + url: config.h2h_out.partner, | |
72 | + qs: { | |
73 | + id: config.h2h_out.userid, | |
74 | + pin: config.h2h_out.pin, | |
75 | + user: config.h2h_out.user, | |
76 | + pass: config.h2h_put.password, | |
77 | + kodeproduk: task.remoteProduct, | |
78 | + tujuan: task.destination, | |
79 | + idtrx: task.requestId | |
80 | + } | |
81 | + } | |
82 | + | |
83 | + request(options, function(err, res, body) { | |
84 | + }); | |
85 | +} | |
86 | + | |
87 | +function topupRequestXMLRPC(task, retry) { | |
88 | + var partnerUrl = url.parse(config.h2h_out.partner); | |
89 | + var clientOptions = { | |
90 | + host: partnerUrl.hostname | |
91 | + , port: partnerUrl.port | |
92 | + , path: partnerUrl.pathname | |
93 | + }; | |
94 | + logger.info('Preparing XMLRPC client options', {options: clientOptions}); | |
95 | + | |
96 | + var client; | |
97 | + if (partnerUrl.protocol == 'https:') { | |
98 | + client = xmlrpc.createSecureClient(clientOptions); | |
99 | + } else { | |
100 | + client = xmlrpc.createClient(clientOptions); | |
101 | + } | |
102 | + | |
103 | + var params = { | |
104 | + MSISDN: config.h2h_out.userid, | |
105 | + REQUESTID: task.requestId, | |
106 | + PIN: config.h2h_out.password, | |
107 | + NOHP: task.destination, | |
108 | + NOM: task.remoteProduct | |
109 | + }; | |
110 | + | |
111 | + var methodName = 'topUpRequest'; | |
112 | + logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params}); | |
113 | + | |
114 | + client.methodCall(methodName, [ params ], function (error, value) { | |
115 | + // Results of the method response | |
116 | + if (error) { | |
117 | + | |
118 | + logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error}); | |
119 | + | |
120 | + if (retry) { | |
121 | + | |
122 | + logger.info('Retrying topUpRequest (' + retry + ')'); | |
123 | + setTimeout(function() { | |
124 | + topupRequest(task, retry - 1); | |
125 | + }, sleep_before_retry); | |
126 | + | |
127 | + } else { | |
128 | + callbackReport(task['requestId'], '91', 'Gangguan koneksi ke suplier: ' + error); | |
129 | + } | |
130 | + return; | |
131 | + } | |
132 | + | |
133 | + logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value}); | |
134 | + | |
135 | + if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { | |
136 | + value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; | |
137 | + } | |
138 | + | |
139 | + callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); | |
140 | + }); | |
141 | +} | |
142 | + | |
143 | +function topupRequest(task, retry) { | |
144 | + topupRequestXMLRPC(task, retry); | |
145 | +} | |
146 | + | |
147 | +exports.start = start; | |
148 | +exports.topupRequest = topupRequest; |