Commit 4252c28180225e8c13285d5a2b9e7dfbf0f61253

Authored by Adhidarma Hadiwinoto
1 parent a45d167eba
Exists in master

penanganan rc

Showing 1 changed file with 124 additions and 59 deletions Side-by-side Diff

partner-kospinjasa.js
... ... @@ -83,7 +83,15 @@ function topupRequestSoap(task, params, retry) {
83 83 logger.info('Requesting to service', {url: config.h2h_out.partner, params: _params});
84 84  
85 85 soapClient.apih2h.apih2hPort.billpayment({ inputCheck: _params }, function(err, result) {
86   - logger.info('Got response', {lastRequest: soapClient.lastRequest, lastMessage: soapClient.lastMessage, lastEndpoint: soapClient.lastEndpoint});
  86 + logger.verbose(
  87 + 'Got response',
  88 + {
  89 + lastEndpoint: soapClient.lastEndpoint,
  90 + lastRequest: soapClient.lastRequest,
  91 + lastMessage: soapClient.lastMessage,
  92 + lastResponse: soapClient.lastResponse,
  93 + }
  94 + );
87 95  
88 96 if (err) {
89 97 logger.warn('Error requesting service', {err: err});
... ... @@ -91,62 +99,128 @@ function topupRequestSoap(task, params, retry) {
91 99 return;
92 100 }
93 101  
94   - var responseMessageToST24 = result.outputParameter.resultCode.$value + ' - ' + result.outputParameter.resultDesc.$value;
95   -
96   - logger.info('Got result: ' + responseMessageToST24, {result: result});
97   -
98   - callbackReport(task.requestId, '68', responseMessageToST24);
  102 + topupResponseHandler(task, result);
99 103 });
100 104 });
101 105 }
102 106  
103   -function topupRequestSoapDIY(task, params, retry) {
104   - var message = whiskers.render(soapTemplate, params);
105   - logger.verbose("Generating SOAP message", {message: message});
106   -
107   - var partnerUrl = url.parse(config.h2h_out.partner_endpoint);
108   - var postRequest = {
109   - host: partnerUrl.hostname,
110   - path: partnerUrl.path,
111   - port: partnerUrl.port,
112   - method: "POST",
113   - headers: {
114   - 'Content-Type': 'text/xml',
115   - 'Content-Length': Buffer.byteLength(message),
116   - //'SOAPAction': "urn:apih2h#billpayment"
117   - }
118   - };
119   -
120   - logger.info('POST to partner', {postRequest: postRequest});
121   - var req = http.request(postRequest, function( res ) {
122   -
123   - logger.verbose('Request status code: ' + res.statusCode );
124   - var buffer = "";
125   -
126   - res.on( "data", function( data ) {
127   - buffer = buffer + data;
128   - });
129   -
130   - res.on( "end", function( data ) {
131   - topupResponseHandler(buffer, task);
132   - });
  107 +function topupResponseHandler(task, response) {
  108 + var st24rc = '68';
  109 + var st24message = response.outputParameter.resultDesc.$value;
133 110  
134   - });
135   -
136   - req.on('error', function(e) {
137   - logger.warn('problem with request: ' + e.message);
138   - callbackReport(task.requestId, '68', e.message);
  111 + if ( response.outputParameter.resultCode.$value == '001' ) {
  112 + // product disabled
  113 + st24rc = '13';
  114 + }
  115 + else if ( response.outputParameter.resultCode.$value == '002' ) {
  116 + // prodcode disable
  117 + st24rc = '13';
  118 + }
  119 + else if ( response.outputParameter.resultCode.$value == '003' ) {
  120 + // duplicate reff
  121 + st24rc = '55';
  122 + }
  123 + else if ( response.outputParameter.resultCode.$value == '004' ) {
  124 + // not enough balance
  125 + st24rc = '40';
  126 + }
  127 + else if ( response.outputParameter.resultCode.$value == '005' ) {
  128 + // username blocked
  129 + st24rc = '40';
  130 + }
  131 + else if ( response.outputParameter.resultCode.$value == '006' ) {
  132 + // not exists username
  133 + st24rc = '40';
  134 + }
  135 + else if ( response.outputParameter.resultCode.$value == '011' ) {
  136 + // invalid request
  137 + st24rc = '40'
  138 + }
  139 + else if ( response.outputParameter.resultCode.$value == '012' ) {
  140 + // no route to host
  141 + st24rc = '40'
  142 + }
  143 + else if ( response.outputParameter.resultCode.$value == '013' ) {
  144 + // invalid signature
  145 + st24rc = '40'
  146 + }
  147 + else if ( response.outputParameter.bit39.$value == '06' ) {
  148 + st24rc = '40';
  149 + st24message = 'Error Transaksi ditolak karena terjadi error di H2H dengan response code diluar daftar ini. Silahkan hubungi H2H';
  150 + }
  151 + else if ( response.outputParameter.bit39.$value == '12' ) {
  152 + st24rc = '40';
  153 + st24message = 'Invalid Transaction Transaksi ditolak karena flow transaksi tidak valid';
  154 + }
  155 + else if ( response.outputParameter.bit39.$value == '13' ) {
  156 + st24rc = '13';
  157 + st24message = 'Invalid voucher nominal';
  158 + }
  159 + else if ( response.outputParameter.bit39.$value == '14' ) {
  160 + st24rc = '14';
  161 + st24message = 'MSISDN tidak ditemukan';
  162 + }
  163 + else if ( response.outputParameter.bit39.$value == '30' ) {
  164 + st24rc = '40';
  165 + st24message = 'Format Error';
  166 + }
  167 + else if ( response.outputParameter.bit39.$value == '31' ) {
  168 + st24rc = '40';
  169 + st24message = 'Kode bank tidak terdaftar';
  170 + }
  171 + else if ( response.outputParameter.bit39.$value == '63' ) {
  172 + st24rc = '40';
  173 + st24message = 'Reversal denied';
  174 + }
  175 + else if ( response.outputParameter.bit39.$value == '68' ) {
  176 + st24rc = '68';
  177 + st24message = 'Transaksi sedang dalam proses';
  178 + }
  179 + else if ( response.outputParameter.bit39.$value == '69' ) {
  180 + st24rc = '68';
  181 + st24message = 'Respon Ok lebih dari 24 detik';
  182 + }
  183 + else if ( response.outputParameter.bit39.$value == '70' ) {
  184 + st24rc = '13';
  185 + st24message = 'Voucher out of stock';
  186 + }
  187 + else if ( response.outputParameter.bit39.$value == '79' ) {
  188 + st24rc = '14';
  189 + st24message = 'Phone number is blocked by Telkomsel';
  190 + }
  191 + else if ( response.outputParameter.bit39.$value == '81' ) {
  192 + st24rc = '14';
  193 + st24message = 'Phone number is expired';
  194 + }
  195 + else if ( response.outputParameter.bit39.$value == '89' ) {
  196 + st24rc = '40';
  197 + st24message = 'Link to billing provider is down';
  198 + }
  199 + else if ( response.outputParameter.bit39.$value == '91' ) {
  200 + st24rc = '40';
  201 + st24message = 'Database problem';
  202 + }
  203 + else if ( response.outputParameter.bit39.$value == '92' ) {
  204 + st24rc = '40';
  205 + st24message = 'Unable to route transaction';
  206 + }
  207 + else if ( response.outputParameter.bit39.$value == '94' ) {
  208 + st24rc = '40';
  209 + st24message = 'Duplicate reversal request';
  210 + }
139 211  
140   - topupRequestRetry(task);
141   - });
  212 + var message =
  213 + response.outputParameter.resultCode.$value
  214 + + " " + response.outputParameter.resultDesc.$value
  215 + + "; " + response.outputParameter.bit39.$value
  216 + ;
142 217  
143   - req.write(message);
144   - req.end();
145   -}
  218 + if (response.outputParameter.resultDesc.$value != st24message) {
  219 + var message = message + " " + st24message;
  220 + }
146 221  
147   -function topupResponseHandler(response, task) {
148   - logger.verbose('Got response', {response: response, task: task});
149   - callbackReport(task.requestId, '68', 'Got response');
  222 + logger.info('Got result: ' + message, {result: result});
  223 + callbackReport(task.requestId, st24rc, st24message);
150 224 }
151 225  
152 226 function topupRequestRetry(task) {
... ... @@ -162,11 +236,8 @@ function topupRequestRetry(task) {
162 236 }
163 237  
164 238  
165   -
166   -
167 239 function createSignature(params, password) {
168 240 var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
169   -
170 241 var plain =
171 242 params.userName
172 243 + passwordHash
... ... @@ -178,13 +249,7 @@ function createSignature(params, password) {
178 249 + params.reff
179 250 + params.timeStamp;
180 251  
181   - var result = crypto.createHash('sha1').update(plain).digest().toString('hex');
182   -
183   - if (logger) {
184   - logger.verbose('Calculating signature', {plain: plain, result: result, params: params, password: password});
185   - }
186   -
187   - return result;
  252 + return crypto.createHash('sha1').update(plain).digest().toString('hex');
188 253 }
189 254  
190 255 function createBillNumber(destination) {