Advertisement
Guest User

tigogestion

a guest
May 21st, 2018
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*
  3. Dirección del servicio:
  4. login
  5. http://tigogestion.tigo.com.co:9020/webservice/Auth.php/?method=login
  6.  
  7. saldo
  8. http://tigogestion.tigo.com.co:9020/webservice/Bridge.php?method=getBalance
  9.  
  10. recarga
  11. http://tigogestion.tigo.com.co:9020/webservice/Bridge.php?method=eRechargeSeller
  12.  
  13. paquete
  14. http://tigogestion.tigo.com.co:9020/webservice/Bridge.php?method=eSellProductSeller
  15.  
  16. El POST lo encuentra en cada función
  17. */
  18.  
  19. var qs = require('querystring');
  20. process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
  21.  
  22. var config = {
  23.     server: 'tigogestion.tigo.com.co',
  24.     port: 9020,
  25.     cookie: '',
  26.     conn_mode: 'https',
  27.     name: 'Movilbox'
  28. };
  29.  
  30. module.exports = Movilbox;
  31.  
  32. function Movilbox(account) {
  33.     this.account = account;
  34.     this.connected = false;
  35.     this.name = account.conn_name;
  36.     this.enabled = true;
  37.     this.last_balance_value = 0;
  38.     this.txt_state = 'Desconectado';
  39.     var self = this;
  40.  
  41.     this.last_balance = function last_balance() {
  42.         return this.last_balance_value;
  43.     };
  44.  
  45.     this.last_balance_label = function last_balance_label() {
  46.         return this.last_balance_value;
  47.     };
  48.  
  49.     this.login = function login(cb) {
  50.         try {
  51.             var sha1 = require('sha1');
  52.             g('/webservice/Auth.php/?method=login', {
  53.                 method: 'POST',
  54.                 post: {
  55.                     usr: self.account.prov_user,
  56.                     pwd: sha1(self.account.prov_pass),
  57.                     ipadress: '0.0.0.0',
  58.                     latitude: 'undefined',
  59.                     longitude: 'undefined',
  60.                     '?callback': '?'
  61.                 }
  62.             }, function (res_data, response, error) {
  63.                 try {
  64.                     if (error) {
  65.                         console.error(error);
  66.                         cb(false);
  67.                         return;
  68.                     }
  69.                     var buf = new Buffer(res_data, 'base64');
  70.                     var token = '';
  71.                     token += buf;
  72.                     var re = /({.*})/;
  73.                     var m;
  74.  
  75.                     if ((m = re.exec(token)) !== null) {
  76.                         if (m.index === re.lastIndex) {
  77.                             re.lastIndex++;
  78.                         }
  79.                         self.token_auth = JSON.parse(m[1]);
  80.                     }
  81.                     if (self.token_auth.responseCode === "E") {
  82.                         self.print("No se pudo iniciar sesion: %s", self.token_auth.errorMessage);
  83.                         self.txt_state = self.token_auth.errorMessage;
  84.                         cb(false);
  85.                         return;
  86.                     } else {
  87.                         self.token = res_data;
  88.                         self.connected = true;
  89.                         self.txt_state = 'Conectado';
  90.                         cb(true);
  91.                         return;
  92.                     }
  93.                 } catch (err) {
  94.                     console.error(err.stack);
  95.                     cb(false);
  96.                     return;
  97.                 }
  98.             });
  99.         } catch (err) {
  100.             console.error(err.stack);
  101.             cb(false);
  102.             return;
  103.         }
  104.     };
  105.  
  106.     this.get_balance = function get_balance(callback, args) {
  107.         try {
  108.             if (self.connected === false) {
  109.                 callback(0, args);
  110.                 return;
  111.             }
  112.             g('/webservice/Bridge.php?method=getBalance', {
  113.                 method: 'POST',
  114.                 content_type: 'application/json',
  115.                 post: {
  116.                     msisdn: self.token_auth.msisdn,
  117.                     dealer: self.token_auth.dealer
  118.                 }, headers: {
  119.                     'Referer': 'https://tigogestion.tigo.com.co:9020/app/components/pdv/pdvView.html',
  120.                     'token': self.token
  121.                 }
  122.             }, function (res_data, response, error) {
  123.                 if (error) {
  124.                     callback(-1, args);
  125.                     return;
  126.                 }
  127.                 try {
  128.                     var json_res = JSON.parse(res_data);
  129.                     if (json_res.responseCode === "S") {
  130.                         self.last_balance_value = json_res.balancePartition39;
  131.                         callback(json_res.balancePartition39, args);
  132.                     } else {
  133.                         self.print("No se pudo consultar el saldo: %s", json_res.errorMessage);
  134.                         callback(-1, args);
  135.                     }
  136.                     return;
  137.                 } catch (err) {
  138.                     self.print("NO se pudo consultar el saldo por exception: respuesta: %s", res_data);
  139.                     callback(-1, args);
  140.                     return;
  141.                 }
  142.             });
  143.         } catch (e) {
  144.             console.error(e.stack);
  145.         }
  146.     };
  147.  
  148.     this.recharge = function (number, operator, amount, callback, payload) {
  149.         try {
  150.             self.print("Solicitud de recarga [%s][%s]", number, amount);
  151.             if (self.connected === false) {
  152.                 callback({
  153.                     result: 'error',
  154.                     error: 99,
  155.                     error_description: 'la plataforma no está conectada con movilbox',
  156.                     number: number,
  157.                     operator: operator,
  158.                     amount: amount
  159.                 }, payload);
  160.                 return;
  161.             }
  162.  
  163.             if (operator !== 'tigo') {
  164.                 callback({
  165.                     result: 'error',
  166.                     error: 98,
  167.                     error_description: 'el operador no es TIGO',
  168.                     number: number,
  169.                     operator: operator,
  170.                     amount: amount
  171.                 }, payload);
  172.                 return;
  173.             }
  174.  
  175.             g('/webservice/Bridge.php?method=eRechargeSeller', {
  176.                 method: 'POST',
  177.                 content_type: 'application/json',
  178.                 post: {
  179.                     msisdn: number,
  180.                     amount: amount
  181.                 }, headers: {
  182.                     'Referer': 'https://tigogestion.tigo.com.co:9020/app/components/pdv/pdvView.html',
  183.                     'token': self.token
  184.                 }
  185.             }, function (res_data, response, error) {
  186.                 if (error) {
  187.                     callback({
  188.                         result: 'error',
  189.                         error: error.message,
  190.                         error_description: error.message,
  191.                         number: number,
  192.                         operator: operator,
  193.                         amount: amount
  194.                     }, payload);
  195.                     return;
  196.                 }
  197.                 try {
  198.                     var json_res = JSON.parse(res_data);
  199.                     if (json_res.responseCode === "S") {
  200.                         self.print("la recarga se ha realizado con éxito: [%s][%s][%s]",
  201.                             number, amount, json_res.transactionID);
  202.                         callback({
  203.                             result: 'success',
  204.                             recharge_id: json_res.transactionID,
  205.                             number: number,
  206.                             operator: operator,
  207.                             amount: amount
  208.                         }, payload);
  209.                         return;
  210.                     } else {
  211.  
  212.                         self.print("ocurrió un error enviando la recarga: [%s][%s][%s]",
  213.                             number, operator, json_res.errorMessage);
  214.                         callback({
  215.                             result: 'error',
  216.                             error: json_res.messageCode,
  217.                             error_description: json_res.errorMessage,
  218.                             number: number,
  219.                             operator: operator,
  220.                             amount: amount
  221.                         }, payload);
  222.                         return;
  223.                     }
  224.                 } catch (err) {
  225.                     console.error(err.stack);
  226.                     callback({
  227.                         result: 'error',
  228.                         error: '006',
  229.                         error_description: error.message,
  230.                         number: number,
  231.                         operator: operator,
  232.                         amount: amount
  233.                     }, payload);
  234.                     return;
  235.                 }
  236.             });
  237.         } catch (e) {
  238.             console.log("Got error: " + e.stack);
  239.             callback({
  240.                 result: 'error',
  241.                 error: '007',
  242.                 error_description: e.message,
  243.                 number: number,
  244.                 operator: operator,
  245.                 amount: amount
  246.             }, payload);
  247.             return;
  248.         }
  249.     };
  250.  
  251.     this.recharge_package = function (number, operator, package_obj, callback, payload) {
  252.         try {
  253.             self.print("Solicitud de recarga paquete: [%s][%s]", number, package_obj.id);
  254.             if (self.connected === false) {
  255.                 callback({
  256.                     result: 'error',
  257.                     error: '000',
  258.                     error_description: 'la plataforma no está conectada con movilbox',
  259.                     number: number,
  260.                     operator: operator,
  261.                     amount: package_obj.valor_venta,
  262.                     package: package_obj
  263.                 }, payload);
  264.                 return;
  265.             }
  266.  
  267.             if (operator !== 'tigo') {
  268.                 callback({
  269.                     result: 'error',
  270.                     error: '001',
  271.                     error_description: 'el operador no es tigo',
  272.                     number: number,
  273.                     operator: operator,
  274.                     amount: package_obj.valor_venta,
  275.                     package: package_obj
  276.                 }, payload);
  277.                 return;
  278.             }
  279.             g('/webservice/Bridge.php?method=eSellProductSeller', {
  280.                 method: 'POST',
  281.                 content_type: 'application/json',
  282.                 post: {
  283.                     msisdn: number,
  284.                     resourceId: package_obj.id
  285.                 }, headers: {
  286.                     'Referer': 'https://tigogestion.tigo.com.co:9020/app/components/pdv/pdvView.html',
  287.                     'token': self.token
  288.                 }
  289.             }, function (res_data, response, error) {
  290.                 if (error) {
  291.                     callback({
  292.                         result: 'error',
  293.                         error: '002',
  294.                         error_description: error.message,
  295.                         number: number,
  296.                         operator: operator,
  297.                         amount: package_obj.valor_venta,
  298.                         package: package_obj
  299.                     }, payload);
  300.                     return;
  301.                 }
  302.                 try {
  303.                     var json_res = JSON.parse(res_data);
  304.                     if (json_res.responseCode === "S") {
  305.                         self.print("la recarga se ha realizado con éxito: [%s][%s][%s]",
  306.                             number, package_obj.id, json_res.transactionID);
  307.                         callback({
  308.                             result: 'success',
  309.                             recharge_id: json_res.transactionID,
  310.                             number: number,
  311.                             operator: operator,
  312.                             amount: package_obj.valor_venta,
  313.                             package: package_obj
  314.                         }, payload);
  315.                         return;
  316.                     } else {
  317.                         self.print("ocurrió un error enviando la recarga: [%s][%s][%s]",
  318.                             number, package_obj.id, json_res.errorMessage);
  319.                         callback({
  320.                             result: 'error',
  321.                             error: json_res.messageCode,
  322.                             error_description: json_res.errorMessage,
  323.                             number: number,
  324.                             operator: operator,
  325.                             amount: package_obj.valor_venta,
  326.                             package: package_obj
  327.                         }, payload);
  328.                         return;
  329.                     }
  330.                 } catch (err) {
  331.                     console.log("datos recibidos: " + res_data);
  332.                     console.error(err.stack);
  333.                     callback({
  334.                         result: 'success',
  335.                         recharge_id: $.create_id(),
  336.                         number: number,
  337.                         operator: operator,
  338.                         amount: package_obj.valor_venta,
  339.                         package: package_obj
  340.                     }, payload);
  341.                     return;
  342.                 }
  343.             });
  344.         } catch (e) {
  345.             console.log("Got error: " + e.stack);
  346.             callback({
  347.                 result: 'error',
  348.                 error: '004',
  349.                 error_description: e.message,
  350.                 number: number,
  351.                 operator: operator,
  352.                 amount: package_obj.valor_venta,
  353.                 package: package_obj
  354.             }, payload);
  355.             return;
  356.         }
  357.     };
  358.  
  359.     this.start = function start(callback) {
  360.         self.print("iniciando conexión: [%s][%s]", account.prov_user, account.prov_pass);
  361.         self.login(function (login) {
  362.             if (login) {
  363.                 self.get_balance(function (balance) {
  364.                     self.print("Se ha reiniciado la conexión. user: [%s] pass: [%s] saldo: [%s]",
  365.                         account.prov_user, account.prov_pass, balance);
  366.                     if (callback) {
  367.                         callback();
  368.                     }
  369.                 });
  370.             } else {
  371.                 self.print("No se pudo iniciar la conexión: user: [%s] pass: [%s]",
  372.                     account.prov_user, account.prov_pass);
  373.             }
  374.         });
  375.     };
  376.  
  377.     this.print = function print() {
  378.         try {
  379.             var argumentsArray = Array.prototype.slice.apply(arguments);
  380.             var message = argumentsArray[0];
  381.             argumentsArray.splice(0, 1);
  382.             for (var index in argumentsArray) {
  383.                 message = message.replace('%s', argumentsArray[index])
  384.             }
  385.             console.log("[%s][%s] %s", config.name, account.conn_name, message)
  386.         } catch (e) {
  387.         }
  388.     };
  389.  
  390.     function g(path, options, callback) {
  391.         try {
  392.             var http = require(config.conn_mode);
  393.  
  394.             var opts = {
  395.                 host: config.server,
  396.                 method: (typeof options.method === 'undefined' ? 'GET' : options.method),
  397.                 port: config.port,
  398.                 path: path,
  399.                 timeout: 10000,
  400.                 headers: {
  401.                     'Connection': 'close',
  402.                     'Host': config.server
  403.                 }
  404.             };
  405.             if (self.token) {
  406.                 opts.headers.token = self.token;
  407.             }
  408.  
  409.             var post = '';
  410.             if (opts.method === 'POST') {
  411.                 opts.headers['Content-Type'] = 'text/html;charset=UTF-8';
  412.                 opts.headers['Content-Length'] = 0;
  413.                 if (typeof options.post !== 'undefined') {
  414.                     if (typeof options.content_type === 'undefined' || options.content_type.indexOf('json') === -1) {
  415.                         opts.headers['Content-Type'] = 'application/x-www-form-urlencoded';
  416.                         post = qs.stringify(options.post);
  417.                     } else if (options.content_type.indexOf('json') >= 0) {
  418.                         opts.headers['Content-Type'] = 'application/json;charset=UTF-8';
  419.                         post = JSON.stringify(options.post);
  420.                     }
  421.  
  422.                     opts.headers['Content-Length'] = Buffer.byteLength(post);
  423.                 }
  424.             }
  425.  
  426.             if (typeof options.headers !== 'undefined') {
  427.                 for (var key in options.headers) {
  428.                     opts.headers[key] = options.headers[key];
  429.                 }
  430.             }
  431.  
  432.             var res_data = '';
  433.             var req = http.request(opts, function (response) {
  434.                 response.setEncoding('utf8');
  435.                 response.on('data', function (chunk) {
  436.                     res_data += chunk;
  437.                 });
  438.                 response.on('end', function () {
  439.                     callback(res_data, response, false);
  440.                 });
  441.             });
  442.  
  443.             req.on('error', function (e) {
  444.                 self.print("[g] " + path + "  Got error on connection: " + e.message);
  445.                 callback(false, false, e);
  446.             });
  447.             if (opts.method !== 'GET') {
  448.                 req.write(post);
  449.             }
  450.             req.setTimeout(120000);
  451.             req.end();
  452.         } catch (e) {
  453.             self.print("[g] " + path + "  Got error on application: " + e.message);
  454.             callback(false, false, e);
  455.         }
  456.     }
  457.  
  458.     this.start(function () {
  459.     });
  460.  
  461.     this.interval = setInterval(function () {
  462.         self.login(function (data) {
  463.             self.print("se ha reiniciado la conexión. conectado: [%s]", data ? 'SI' : 'NO');
  464.         });
  465.  
  466.     }, 600000);
  467.  
  468.     this.end = function end() {
  469.         clearInterval(self.interval);
  470.     };
  471. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement