Blame view

lib/hit/prepaid.js 2.96 KB
d4661aa84   Adhidarma Hadiwinoto   Ready to test pre...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  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');
  
  module.exports = async (task, isAdvice) => {
      const xid = uniqid();
  
      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');
  
      try {
          logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, {
              xid,
              isAdvice,
              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;
          }
  
          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,
              amount: 0,
              balance: 0,
              message: {
                  xid,
                  'DIRECT-RESPONSE': response.data,
                  'IS-ADVICE': !!isAdvice,
              },
          });
      } catch (e) {
          const rc = e.rc || '68';
  
          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,
              },
          });
      }
  };