Blame view

lib/hit/prepaid.js 3.87 KB
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
1
2
3
4
5
6
7
8
9
10
11
12
  const MODULE_NAME = 'HIT.PREPAID';
  
  const axios = require('axios').default;
  const urljoin = require('url-join');
  const uniqid = require('uniqid');
  
  const config = require('komodo-sdk/config');
  const logger = require('komodo-sdk/logger');
  
  const report = require('../report/prepaid');
  const translateRc = require('../translate-rc');
  const composeCallbackUrl = require('./compose-callback-url');
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
13
  const dumpReqRes = require('./dump-req-res');
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
14
15
16
  
  module.exports = async (task, isAdvice) => {
      const xid = uniqid();
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
17
18
19
20
21
      logger.verbose(`${MODULE_NAME} 2272F01F: Processing task`, {
          xid,
          isAdvice,
          task,
      });
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
22
23
24
25
26
27
28
29
30
31
32
33
      const params = {
          request_id: task.trx_id,
          terminal_name: config.partner.terminal_name,
          password: config.partner.password,
          destination: task.destination,
          product_name: task.remote_product,
          reverse_url: composeCallbackUrl(xid, false),
      };
  
      const endpointUrl = isAdvice
          ? urljoin(config.partner.url, '/trx-status')
          : urljoin(config.partner.url, '/topup');
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
34
      let lastResponse = null;
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
35
36
37
      try {
          logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, {
              xid,
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
              endpointUrl,
              params,
          });
  
          const response = await axios.get(endpointUrl, {
              headers: {
                  'User-Agent': 'KOMODO-GW-HTTPGETX',
              },
              timeout: config.partner.hit_timeout_ms || 60 * 1000,
              params,
          });
  
          if (!response) {
              const e = new Error(`${MODULE_NAME} 8CF4E04D: Empty response`);
              e.rc = '68';
              e.response = response;
              throw e;
          }
  
          if (!response.data) {
              const e = new Error(`${MODULE_NAME} E72B5A53: Empty response data`);
              e.rc = '68';
              e.response = response;
              throw e;
          }
  
          if (typeof response.data !== 'object') {
              const e = new Error(`${MODULE_NAME} 507680AB: Response data is not a JSON`);
              e.rc = '68';
              e.response = response;
              throw e;
          }
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
70
          lastResponse = response;
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
71
72
73
74
75
76
77
78
79
80
          logger.verbose(`${MODULE_NAME} E51AFBBA: Got a direct response`, {
              xid,
              responseBody: response.data,
          });
  
          report(xid, {
              trx_id: task.trx_id,
              rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc
                  : '68',
              sn: response.data.sn || null,
1e63f3741   Adhidarma Hadiwinoto   Number on amount ...
81
82
              amount: Number(response.data.amount) || undefined,
              balance: Number(response.data.ending_balance) || undefined,
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
83
84
85
86
87
88
89
90
              message: {
                  xid,
                  'DIRECT-RESPONSE': response.data,
                  'IS-ADVICE': !!isAdvice,
              },
          });
      } catch (e) {
          const rc = e.rc || '68';
8391f7809   Adhidarma Hadiwinoto   Logging on hit ex...
91
92
93
94
95
96
97
98
99
100
          logger.warn(`${MODULE_NAME} 8E8E49F5: Exception`, {
              xid,
              eCode: e.code,
              eMessage: e.message,
              eRc: e.rc,
              rc,
              isAdvice,
              responseHttpStatus: e.response && e.response.status,
              responseBody: e.response && e.response.data,
          });
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
101
          lastResponse = e.response;
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
102
103
104
105
106
107
108
109
110
111
112
113
114
115
          report(xid, {
              trx_id: task.trx_id,
              rc,
              message: {
                  xid,
                  'KOMODO-GW-ERROR': {
                      eCode: e.code,
                      eMessage: e.message,
                      responseHttpStatus: e.response && e.response.status,
                      responseBody: e.response && e.response.data,
                  },
                  'IS-ADVICE': !!isAdvice,
              },
          });
385d8ff59   Adhidarma Hadiwinoto   PREPAID topup tested
116
117
118
119
120
121
122
123
124
125
126
      } finally {
          dumpReqRes(
              xid,
              task,
              'GET',
              endpointUrl,
              params,
              lastResponse && lastResponse.data,
              lastResponse && lastResponse.status,
              lastResponse,
          );
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
127
128
      }
  };