Commit 1caba187c264b39c9c96890ec1f84f44636c5dd8
1 parent
6fc0cd5de0
Exists in
master
mongodb
Showing 2 changed files with 105 additions and 8 deletions Side-by-side Diff
package.json
... | ... | @@ -22,6 +22,7 @@ |
22 | 22 | "dependencies": { |
23 | 23 | "easysoap": "^1.0.5", |
24 | 24 | "ini": "^1.3.4", |
25 | + "moment": "^2.13.0", | |
25 | 26 | "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", |
26 | 27 | "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", |
27 | 28 | "soap": "^0.15.0", |
partner-kospinjasa.js
... | ... | @@ -6,6 +6,8 @@ var fs = require("fs"); |
6 | 6 | var whiskers = require("whiskers"); |
7 | 7 | var http = require("http"); |
8 | 8 | var url = require("url"); |
9 | +var mongoClient = require('mongodb').MongoClient; | |
10 | +var moment = require('moment'); | |
9 | 11 | |
10 | 12 | process.chdir(__dirname); |
11 | 13 | var soapTemplate = fs.readFileSync("message.xml"); |
... | ... | @@ -18,6 +20,7 @@ var callbackReport; |
18 | 20 | var aaa; |
19 | 21 | var logger; |
20 | 22 | var options; |
23 | +var mongodb; | |
21 | 24 | |
22 | 25 | function start(_config, _callbackReport, options) { |
23 | 26 | config = _config; |
... | ... | @@ -36,9 +39,89 @@ function start(_config, _callbackReport, options) { |
36 | 39 | ] |
37 | 40 | }); |
38 | 41 | } |
42 | + | |
43 | + initMongoClient(); | |
44 | +} | |
45 | + | |
46 | +function initMongoClient() { | |
47 | + if (!config || !config.mongodb || !config.mongodb.url) { | |
48 | + return; | |
49 | + } | |
50 | + | |
51 | + try { | |
52 | + var url = config.mongodb.url; | |
53 | + | |
54 | + mongoClient.connect(url, function(err, db) { | |
55 | + if (err) { | |
56 | + logger.warn('Failed to connect to mongodb', {err: err}); | |
57 | + return; | |
58 | + } | |
59 | + mongodb = db; | |
60 | + logger.info('MongoDB connected'); | |
61 | + }); | |
62 | + } | |
63 | + catch(err) { | |
64 | + logger.warn('Exception when connecting to mongodb', {err: err, url: url}); | |
65 | + } | |
66 | +} | |
67 | + | |
68 | +function insertTaskToMongoDb(task) { | |
69 | + if (!isMongoReady()) { return; } | |
70 | + | |
71 | + task.supplier = config.globals.gateway_name; | |
72 | + task.rc = '68'; | |
73 | + | |
74 | + try { | |
75 | + mongodb.collection(config.mongodb.collection).insertOne(task); | |
76 | + } | |
77 | + catch(err) { | |
78 | + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task}); | |
79 | + } | |
80 | +} | |
81 | + | |
82 | +function pushResponseToMongoDb(task, response, rc) { | |
83 | + if (!isMongoReady()) { return; } | |
84 | + | |
85 | + try { | |
86 | + mongodb.collection(config.mongodb.collection).updateOne( | |
87 | + {requestId: task.requestId}, | |
88 | + { | |
89 | + $set: { | |
90 | + lastResponse: response, | |
91 | + supplier: config.globals.gateway_name, | |
92 | + rc: rc | |
93 | + }, | |
94 | + $push: { | |
95 | + responses: response | |
96 | + } | |
97 | + }, | |
98 | + function(err, result) { | |
99 | + if (err) { | |
100 | + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response}); | |
101 | + return; | |
102 | + } | |
103 | + } | |
104 | + ); | |
105 | + } | |
106 | + catch(err) { | |
107 | + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response}); | |
108 | + } | |
109 | +} | |
110 | + | |
111 | +function isMongoReady() { | |
112 | + if (!config.mongodb) { return; } | |
113 | + if (!config.mongodb.collection) { return; } | |
114 | + if (!mongodb) { return; } | |
115 | + | |
116 | + return true; | |
39 | 117 | } |
40 | 118 | |
41 | 119 | function topupRequest(task, retry) { |
120 | + task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss'); | |
121 | + task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD'); | |
122 | + | |
123 | + insertTaskToMongoDb(task); | |
124 | + | |
42 | 125 | saldoCheck(billpayment, task); |
43 | 126 | } |
44 | 127 | |
... | ... | @@ -58,8 +141,13 @@ function saldoCheck(callback, task) { |
58 | 141 | soap.createClient(config.h2h_out.partner, function(err, soapClient) { |
59 | 142 | |
60 | 143 | if (err) { |
61 | - logger.warn('Error creating soap client for saldoCheck', {err: err}); | |
62 | - callbackReport(task.requestId, '40', 'Error creating soap client for saldoCheck: ' + err); | |
144 | + | |
145 | + var errorMessage = 'Error creating soap client for saldoCheck: ' + err; | |
146 | + | |
147 | + logger.warn(errorMessage, {err: err}); | |
148 | + callbackReport(task.requestId, '40', errorMessage); | |
149 | + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40'); | |
150 | + | |
63 | 151 | return; |
64 | 152 | } |
65 | 153 | |
... | ... | @@ -77,8 +165,11 @@ function saldoCheck(callback, task) { |
77 | 165 | ); |
78 | 166 | |
79 | 167 | if (err) { |
80 | - logger.warn('Error requesting saldoCheck', {err: err}); | |
81 | - callbackReport(task.requestId, '40', 'Gagal check saldo'); | |
168 | + var errorMessage = 'Error requesting saldoCheck: ' + err; | |
169 | + | |
170 | + logger.warn(errorMessage, {err: err}); | |
171 | + callbackReport(task.requestId, '40', errorMessage); | |
172 | + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40'); | |
82 | 173 | } |
83 | 174 | |
84 | 175 | var balance; |
... | ... | @@ -147,17 +238,21 @@ function billpayment(task, balance) { |
147 | 238 | ); |
148 | 239 | |
149 | 240 | if (err) { |
150 | - logger.warn('Error requesting service', {err: err}); | |
151 | - callbackReport(task.requestId, '68', 'something wrong'); | |
241 | + var errorMessage = 'Error requesting service: ' + err; | |
242 | + | |
243 | + logger.warn(errorMessage, {err: err}); | |
244 | + callbackReport(task.requestId, '68', errorMessage); | |
245 | + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: soapClient.lastResponse, parsed: result}, '68'); | |
246 | + | |
152 | 247 | return; |
153 | 248 | } |
154 | 249 | |
155 | - topupResponseHandler(task, result, balance); | |
250 | + topupResponseHandler(task, result, balance, soapClient.lastResponse); | |
156 | 251 | }); |
157 | 252 | }); |
158 | 253 | } |
159 | 254 | |
160 | -function topupResponseHandler(task, response, balance) { | |
255 | +function topupResponseHandler(task, response, balance, rawResponse) { | |
161 | 256 | var st24rc = '68'; |
162 | 257 | var st24message = response.outputParameter.resultDesc.$value; |
163 | 258 | |
... | ... | @@ -293,6 +388,7 @@ function topupResponseHandler(task, response, balance) { |
293 | 388 | |
294 | 389 | logger.info('Got result: ' + message, {response: response}); |
295 | 390 | callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance); |
391 | + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: rawResponse, parsed: response}, st24rc); | |
296 | 392 | } |
297 | 393 | |
298 | 394 | function createSignature(params, password) { |