Commit d1e31938627159a2a6c88a291b8a3eb74ffff58f
1 parent
4c30a767ad
Exists in
master
penanganan trx duplicat
Showing 1 changed file with 42 additions and 27 deletions Side-by-side Diff
partner-trustlink.js
... | ... | @@ -82,7 +82,7 @@ function createXmlPayload(task, userid, password) { |
82 | 82 | return "<?xml version=\"1.0\" ?>\n" + xml(payload); |
83 | 83 | } |
84 | 84 | |
85 | -function topupRequest(task, retry) { | |
85 | +function topupRequestHit(task, retry) { | |
86 | 86 | if (retry === undefined) { |
87 | 87 | retry = max_retry; |
88 | 88 | } |
... | ... | @@ -136,7 +136,7 @@ function directResponseHandler(body, task) { |
136 | 136 | xml2js(body, function (err, result) { |
137 | 137 | if (err) { |
138 | 138 | logger.warn('Error parsing xml', {body: body}); |
139 | - callbackReport(request_id, '68', buffer); | |
139 | + callbackReport(task.requestId, '68', buffer); | |
140 | 140 | return; |
141 | 141 | } |
142 | 142 | |
... | ... | @@ -148,34 +148,18 @@ function directResponseHandler(body, task) { |
148 | 148 | var status = result.evoucher.result[0].trim(); |
149 | 149 | var message = result.evoucher.value[0].string[0].trim(); |
150 | 150 | |
151 | - if (status == '0') { | |
152 | - if (message.indexOf('SUKSES') >= 0) { | |
153 | - /* | |
154 | - var sn = getSNFromMessage(message); | |
155 | - message = 'SN=' + sn + '; ' + message; | |
156 | - */ | |
157 | - | |
158 | - response_code = '68'; | |
159 | - } | |
160 | - else if (message.indexOf('GAGAL') >= 0) { | |
161 | - response_code = '40'; | |
162 | - } | |
163 | - else { | |
164 | - response_code = '68'; | |
165 | - } | |
166 | - | |
167 | - } | |
168 | - else if (status == "-1") { | |
169 | - response_code = '40'; | |
170 | - | |
151 | + if (message.indexOf('SUKSES') >= 0) { | |
171 | 152 | /* |
172 | - var new_response_code = responseCodeFromMessage(message); | |
173 | - if (new_response_code) { | |
174 | - response_code = new_response_code; | |
175 | - } | |
153 | + var sn = getSNFromMessage(message); | |
154 | + message = 'SN=' + sn + '; ' + message; | |
176 | 155 | */ |
177 | 156 | |
178 | - } else { | |
157 | + response_code = '68'; | |
158 | + } | |
159 | + else if (message.indexOf('GAGAL') >= 0) { | |
160 | + response_code = '40'; | |
161 | + } | |
162 | + else { | |
179 | 163 | response_code = '68'; |
180 | 164 | } |
181 | 165 | |
... | ... | @@ -193,6 +177,37 @@ function getSNFromMessage(message) { |
193 | 177 | } |
194 | 178 | } |
195 | 179 | |
180 | +function topupRequest(task, retry) { | |
181 | + var key = 'DUPCHECK.gw:' + config.globals.gateway_name + '.prod:' + task.remoteProduct + '.dest:' + task.destination + '.date:' + strftime('%Y%m%d', new Date); | |
182 | + redisClient.get(key, function(err, data) { | |
183 | + if (err) { | |
184 | + callbackReport(task.requestId, '40', 'Gagal cek anti transaksi duplikat (redis error)'); | |
185 | + return; | |
186 | + } | |
187 | + | |
188 | + if (!data) { | |
189 | + | |
190 | + redisClient.set(key, JSON.stringify(task)); | |
191 | + redisClient.expire(key, 3600 * 24 * 2); | |
192 | + | |
193 | + } else { | |
194 | + | |
195 | + try { | |
196 | + var taskOnRedis = JSON.parse(data); | |
197 | + if (task.requestId == taskOnRedis.requestId) { | |
198 | + topupRequestHit(task, retry); | |
199 | + } else { | |
200 | + callbackReport(task.requestId, '55', 'Transaksi duplikat') | |
201 | + } | |
202 | + } | |
203 | + catch(errJSONParse) { | |
204 | + callbackReport(task.requestId, '68', "error parsing json"); | |
205 | + } | |
206 | + } | |
207 | + | |
208 | + }); | |
209 | +} | |
210 | + | |
196 | 211 | exports.start = start; |
197 | 212 | exports.topupRequest = topupRequest; |
198 | 213 | exports.calculateSignature = calculateSignature; |