Commit d1e31938627159a2a6c88a291b8a3eb74ffff58f

Authored by Adhidarma Hadiwinoto
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;