Commit db6161cd716b92fd97765cca8e9a79617dcb60fb

Authored by Adhidarma Hadiwinoto
1 parent 364e6b5d75
Exists in master

cek saldo

Showing 4 changed files with 183 additions and 5 deletions Side-by-side Diff

... ... @@ -4,5 +4,9 @@
4 4 "password": "change-me",
5 5 "warming_up_ms": 60000,
6 6 "core_url": "http://localhost:32972/apikey/PLEASE-CHANGE-WITH-VALID-APIKEY",
7   - "listen_port": 14232
  7 + "listen_port": 14232,
  8 + "commands": {
  9 + "balance": ["S", "SAL", "SALDO", "BAL", "BALANCE", "CEKSALDO"],
  10 + "price": ["H", "HP", "CH", "HARGA", "CEKHARGA", "PRICE"]
  11 + }
8 12 }
... ... @@ -0,0 +1,113 @@
  1 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:52:50"}
  2 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:52:50"}
  3 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:52:51"}
  4 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:52:52"}
  5 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:52:52"}
  6 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:53:06"}
  7 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:53:06"}
  8 +{"qs":{"request_id":"S_1234_20170822","terminal_name":"adhisimon@host2host.id","product_name":"S","destination":"1234","origin":"XMPP0","report_port":14232,"msg":"s.1234"},"level":"verbose","message":"Request buy a prepaid product to CORE","timestamp":"2017-08-22 12:53:06"}
  9 +{"body":"{\"request_id\":\"S_1234_20170822\",\"terminal_name\":\"adhisimon@host2host.id\",\"product_name\":\"S\",\"destination\":\"1234\",\"rc\":\"03\",\"message\":\"Pembelian S ke 1234 GAGAL. Kesalahan validitas store / terminal / password.\",\"origin\":\"XMPP0\",\"origin_report_ip\":\"::ffff:127.0.0.1\",\"origin_report_port\":\"14232\"}","level":"verbose","message":"Got direct response from CORE","timestamp":"2017-08-22 12:53:06"}
  10 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"Pembelian S ke 1234 GAGAL. Kesalahan validitas store / terminal / password.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 12:53:06"}
  11 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:53:46"}
  12 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:53:46"}
  13 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:53:47"}
  14 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:53:48"}
  15 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:53:48"}
  16 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:53:50"}
  17 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:53:50"}
  18 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:54:03"}
  19 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:54:03"}
  20 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:54:26"}
  21 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:54:26"}
  22 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:54:33"}
  23 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:54:33"}
  24 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:55:13"}
  25 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:55:13"}
  26 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:55:13"}
  27 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:55:15"}
  28 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:55:15"}
  29 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:55:15"}
  30 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:55:16"}
  31 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:55:16"}
  32 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:55:20"}
  33 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:55:20"}
  34 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"1234"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 12:55:20"}
  35 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:57:38"}
  36 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:57:38"}
  37 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:57:38"}
  38 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:57:39"}
  39 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:57:39"}
  40 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:57:46"}
  41 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:57:46"}
  42 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:57:46"}
  43 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:57:47"}
  44 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:57:47"}
  45 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 12:59:09"}
  46 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 12:59:09"}
  47 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 12:59:09"}
  48 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 12:59:10"}
  49 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 12:59:10"}
  50 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 12:59:13"}
  51 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 12:59:13"}
  52 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"1234"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 12:59:13"}
  53 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"MASTER, saldo anda saat ini Rp. 532.200.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 12:59:13"}
  54 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"sal.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:03"}
  55 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:03"}
  56 +{"qs":{"request_id":"SAL_1234_20170822","terminal_name":"adhisimon@host2host.id","product_name":"SAL","destination":"1234","origin":"XMPP0","report_port":14232,"msg":"sal.1234"},"level":"verbose","message":"Request buy a prepaid product to CORE","timestamp":"2017-08-22 13:01:03"}
  57 +{"body":"{\"request_id\":\"SAL_1234_20170822\",\"terminal_name\":\"adhisimon@host2host.id\",\"product_name\":\"SAL\",\"destination\":\"1234\",\"rc\":\"03\",\"message\":\"Pembelian SAL ke 1234 GAGAL. Kesalahan validitas store / terminal / password.\",\"origin\":\"XMPP0\",\"origin_report_ip\":\"::ffff:127.0.0.1\",\"origin_report_port\":\"14232\"}","level":"verbose","message":"Got direct response from CORE","timestamp":"2017-08-22 13:01:03"}
  58 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"Pembelian SAL ke 1234 GAGAL. Kesalahan validitas store / terminal / password.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:03"}
  59 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:01:32"}
  60 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:01:32"}
  61 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:01:32"}
  62 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:01:33"}
  63 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:01:33"}
  64 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"s.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:35"}
  65 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:35"}
  66 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"1234"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 13:01:35"}
  67 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"MASTER, saldo anda saat ini Rp. 532.200.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:35"}
  68 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"sal.123","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:38"}
  69 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:38"}
  70 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"123"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 13:01:38"}
  71 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"Kesalahan autentikasi dalam pengecekan saldo","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:38"}
  72 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"sal.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:40"}
  73 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:40"}
  74 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"1234"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 13:01:40"}
  75 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"MASTER, saldo anda saat ini Rp. 532.200.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:40"}
  76 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"saldo.1234","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:43"}
  77 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:43"}
  78 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id","password":"1234"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 13:01:43"}
  79 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"MASTER, saldo anda saat ini Rp. 532.200.","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:43"}
  80 +{"me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"saldo","level":"info","message":"Incoming message via XMPP transport","timestamp":"2017-08-22 13:01:44"}
  81 +{"level":"verbose","message":"Reporting message to CORE","timestamp":"2017-08-22 13:01:44"}
  82 +{"url":"http://localhost:32972/apikey/c47ed08df360a15f9c60e8cfb3020f7d083b3f89/services/balance","qs":{"terminal_name":"adhisimon@host2host.id"},"level":"verbose","message":"Requesting balance service to CORE","timestamp":"2017-08-22 13:01:44"}
  83 +{"transport":"xmpp","me":"komodo_trx0@host2host.id","partner":"adhisimon@host2host.id","msg":"Kesalahan autentikasi dalam pengecekan saldo","level":"verbose","message":"Sending message via XMPP transport","timestamp":"2017-08-22 13:01:44"}
  84 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:02:09"}
  85 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:02:09"}
  86 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:02:09"}
  87 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:02:10"}
  88 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:02:10"}
  89 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:05:08"}
  90 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:05:08"}
  91 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:05:08"}
  92 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:05:09"}
  93 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:05:09"}
  94 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:05:29"}
  95 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:05:29"}
  96 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:05:29"}
  97 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:05:30"}
  98 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:05:30"}
  99 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:05:59"}
  100 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:05:59"}
  101 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:05:59"}
  102 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:06:00"}
  103 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:06:00"}
  104 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:06:08"}
  105 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:06:08"}
  106 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:06:08"}
  107 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:06:09"}
  108 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:06:09"}
  109 +{"level":"verbose","message":"/home/adhisimon/Projects/komodo-center-xmpp/node_modules/komodo-sdk/logger.js: initialized","timestamp":"2017-08-22 13:06:29"}
  110 +{"level":"info","message":"HTTP Reverse/Report server listen on port 14232","timestamp":"2017-08-22 13:06:29"}
  111 +{"level":"info","message":"XMPP transport connected, JID: komodo_trx0","timestamp":"2017-08-22 13:06:30"}
  112 +{"level":"verbose","message":"Transport is ready","timestamp":"2017-08-22 13:06:31"}
  113 +{"level":"info","message":"CENTER is ONLINE, ready to communicate","timestamp":"2017-08-22 13:06:31"}
... ... @@ -29,6 +29,10 @@ bot.on('online', function(data) {
29 29 });
30 30  
31 31 bot.on('chat', function(partner, msg) {
  32 + if (!msg || !msg.trim()) {
  33 + return;
  34 + }
  35 +
32 36 if (!_isReady) {
33 37 logger.warn('Warming up is not finished yet, ignoring message', {me: config.username, partner: partner, msg: msg});
34 38 return;
... ... @@ -40,7 +44,7 @@ bot.on('chat', function(partner, msg) {
40 44 _callback.onIncomingMessage({
41 45 me: config.username,
42 46 partner: partner,
43   - msg: msg
  47 + msg: msg.trim()
44 48 })
45 49 }
46 50 })
1 1 "use strict";
2 2  
  3 +const path = require('path');
3 4 const request = require('request');
4 5 const strftime = require('strftime');
5 6 const config = require('komodo-sdk/config');
6 7 const logger = require('komodo-sdk/logger');
7 8  
  9 +const module_name = path.basename(__filename);
  10 +
8 11 let transport;
9 12  
10 13 function onOnline(params) {
... ... @@ -14,15 +17,69 @@ function onOnline(params) {
14 17  
15 18 function onIncomingMessage(paramsFromTransport) {
16 19 logger.verbose('Reporting message to CORE')
17   - prepaidBuy(paramsFromTransport);
  20 +
  21 + const command = paramsFromTransport.msg.split(/[\., ]+/)[0].toUpperCase();
  22 +
  23 + if (config.commands.balance.indexOf(command) >= 0) {
  24 + executeBalanceCheck(paramsFromTransport);
  25 + }
  26 + else {
  27 + executePrepaidBuy(paramsFromTransport);
  28 + }
  29 +}
  30 +
  31 +function executeBalanceCheck(paramsFromTransport) {
  32 + const terminal_name = paramsFromTransport.partner.toLowerCase();
  33 + const password = paramsFromTransport.msg.trim().split(/[\., ]+/)[1];
  34 +
  35 + const core_url = config.core_url + '/services/balance';
  36 + const qs = {
  37 + terminal_name: terminal_name,
  38 + password: password
  39 + }
  40 +
  41 + logger.verbose('Requesting balance service to CORE', {url: core_url, qs: qs});
  42 +
  43 + request({url: core_url, qs: qs}, function(err, res, body) {
  44 + if (err || res.statusCode != 200) {
  45 + logger.warn('Error requesting to CORE', {module_name: module_name, method_name: 'executePrepaidBuy', err: err});
  46 + transport.send(terminal_name, 'INTERNAL ERROR');
  47 + return;
  48 + }
  49 +
  50 + let result = parseBalanceResponse(body);
  51 + if (!result || !result.message) {
  52 + transport.send(terminal_name, 'INTERNAL ERROR');
  53 + return;
  54 + }
  55 +
  56 + transport.send(terminal_name, result.message);
  57 + })
  58 +}
  59 +
  60 +function executePriceCheck(paramsFromTransport) {
  61 + transport.send(params.partner, 'Layanan belum tersedia.');
  62 +}
  63 +
  64 +function parseBalanceResponse(body) {
  65 + let result;
  66 +
  67 + try {
  68 + result = JSON.parse(body);
  69 + }
  70 + catch(e) {
  71 + logger.warn('Error JSON parsing', {module_name: module_name, method_name: 'parseBalanceResponse', body: body})
  72 + result = null;
  73 + }
  74 + return result;
18 75 }
19 76  
20 77 function generateRequestId(req) {
21 78 return req.product_name + '_' + req.destination + '_' + strftime('%Y%m%d');
22 79 }
23 80  
24   -function prepaidBuy(paramsFromTransport) {
25   - let tokens = paramsFromTransport.msg.trim().split('.');
  81 +function executePrepaidBuy(paramsFromTransport) {
  82 + let tokens = paramsFromTransport.msg.trim().split(/[\., ]+/);
26 83  
27 84 let qs = {
28 85 request_id: paramsFromTransport.request_id,