Compare View

switch
from
...
to
 
Commits (2)

Changes

Showing 3 changed files Side-by-side Diff

center/messaging/README.md
... ... @@ -0,0 +1 @@
  1 +Pustaka untuk center transaksi bertipe messaging (eg: sms, xmpp, telegram)
center/messaging/trx-center.js
... ... @@ -0,0 +1,147 @@
  1 +"use strict";
  2 +
  3 +const path = require('path');
  4 +const request = require('request');
  5 +const strftime = require('strftime');
  6 +const config = require('../../config');
  7 +const logger = require('../../logger');
  8 +
  9 +const module_name = path.basename(__filename);
  10 +
  11 +let transport;
  12 +
  13 +function onOnline(params) {
  14 + logger.info('CENTER is ONLINE, ready to communicate');
  15 +
  16 +}
  17 +
  18 +function onIncomingMessage(paramsFromTransport) {
  19 + logger.verbose('Reporting message to CORE')
  20 +
  21 + const command = paramsFromTransport.msg.split(/[\., ]+/)[0].toUpperCase();
  22 +
  23 + if (config.commands.balance.indexOf(command) >= 0) {
  24 + executeBalanceCheck(paramsFromTransport);
  25 + }
  26 + else if (config.commands.price.indexOf(command) >= 0) {
  27 + executePriceCheck(paramsFromTransport);
  28 + }
  29 + else {
  30 + executePrepaidBuy(paramsFromTransport);
  31 + }
  32 +}
  33 +
  34 +function executeBalanceCheck(paramsFromTransport) {
  35 + const terminal_name = paramsFromTransport.partner.toLowerCase();
  36 + const password = paramsFromTransport.msg.trim().split(/[\., ]+/)[1];
  37 +
  38 + const requestOptions = {
  39 + url: config.core_url + '/services/balance',
  40 + qs: {
  41 + terminal_name: terminal_name,
  42 + password: password
  43 + }
  44 + }
  45 +
  46 + requestToCore(requestOptions);
  47 +}
  48 +
  49 +function executePriceCheck(paramsFromTransport) {
  50 + const requestOptions = {
  51 + url: config.core_url + '/services/pricelist',
  52 + qs: {
  53 + terminal_name: paramsFromTransport.partner.toLowerCase(),
  54 + keyword: paramsFromTransport.msg.trim().split(/[\., ]+/)[1]
  55 + }
  56 + }
  57 +
  58 + requestToCore(requestOptions);
  59 +}
  60 +
  61 +function parseBalanceResponse(body) {
  62 + let result;
  63 +
  64 + try {
  65 + result = JSON.parse(body);
  66 + }
  67 + catch(e) {
  68 + logger.warn('Error JSON parsing', {module_name: module_name, method_name: 'parseBalanceResponse', body: body})
  69 + result = null;
  70 + }
  71 + return result;
  72 +}
  73 +
  74 +function generateRequestId(req) {
  75 + return 'AUTO_' + req.product_name + '_' + req.destination + '_' + strftime('%Y%m%d');
  76 +}
  77 +
  78 +function executePrepaidBuy(paramsFromTransport) {
  79 + let tokens = paramsFromTransport.msg.trim().split(/[\., ]+/);
  80 +
  81 + let qs = {
  82 + request_id: null,
  83 + terminal_name: paramsFromTransport.partner.toLowerCase(),
  84 + product_name: tokens[0].toUpperCase(),
  85 + destination: tokens[1].toUpperCase(),
  86 + password: tokens[2],
  87 + origin: config.origin || config.username,
  88 + report_port: config.listen_port || '80',
  89 + msg: paramsFromTransport.msg
  90 + }
  91 +
  92 + qs.request_id = generateRequestId(qs);
  93 + if (tokens[3]) {
  94 + qs.request_id += '_' + tokens[3];
  95 + }
  96 +
  97 + let requestOptions = {
  98 + url: config.core_url + '/prepaid/buy',
  99 + qs: qs
  100 + }
  101 +
  102 + requestToCore(requestOptions);
  103 +}
  104 +
  105 +function requestToCore(requestOptions, partner) {
  106 + logger.verbose('Requesting service to CORE', requestOptions);
  107 +
  108 + request(requestOptions, function(err, res, body) {
  109 + if (err || res.statusCode != 200) {
  110 + logger.warn('Error requesting to CORE', {module_name: module_name, method_name: 'requestToCore', requestOptions: requestOptions, err: err});
  111 + transport.send(requestOptions.qs.terminal_name, 'INTERNAL ERROR');
  112 + return;
  113 + }
  114 +
  115 + let result = parseBalanceResponse(body);
  116 + if (!result || !result.message) {
  117 + transport.send(requestOptions.qs.terminal_name, 'INTERNAL ERROR');
  118 + return;
  119 + }
  120 +
  121 + transport.send(requestOptions.qs.terminal_name, result.message);
  122 + })
  123 +}
  124 +
  125 +function parseCoreMessage(body) {
  126 + let coreRes;
  127 + try {
  128 + coreRes = JSON.parse(body)
  129 + }
  130 + catch(err) {
  131 + logger.warn('Exception on parsing CORE response as JSON', {body: body, err: err});
  132 + coreRes = null;
  133 + }
  134 + return coreRes;
  135 +}
  136 +
  137 +const callback = {
  138 + onOnline: onOnline,
  139 + onIncomingMessage: onIncomingMessage
  140 +}
  141 +
  142 +function setTransport(_transport) {
  143 + transport = _transport;
  144 +}
  145 +
  146 +exports.callback = callback;
  147 +exports.setTransport = setTransport;
1 1 {
2 2 "name": "komodo-sdk",
3   - "version": "1.1.1",
  3 + "version": "1.2.0",
4 4 "description": "SDK for Komodo",
5 5 "main": "index.js",
6 6 "scripts": {