public (string result, int status) Reverses(List <cCampo> campos)
        {
            foreach (var campo in campos)
            {
                if (campo.sCampo == "SKU")
                {
                    SKU = campo.sValor.ToString();
                }
                if (campo.sCampo == "REFERENCIA")
                {
                    Reference = campo.sValor.ToString();
                }
                if (campo.sCampo == "AUTORIZACION")
                {
                    NoAuto = (int)campo.sValor;
                }
                break;
            }

            PxUniversalSoapClient wservice = new PxUniversalSoapClient(PxUniversalSoapClient.EndpointConfiguration.PxUniversalSoap);

            cCampo[] requestReversa = new cCampo[12];

            string response = "";

            try
            {
                requestReversa[0]        = new cCampo();
                requestReversa[0].iTipo  = eTipo.NE;
                requestReversa[0].sCampo = "IDGRUPO";
                requestReversa[0].sValor = 7;

                requestReversa[1]        = new cCampo();
                requestReversa[1].iTipo  = eTipo.NE;
                requestReversa[1].sCampo = "IDCADENA";
                requestReversa[1].sValor = 1;

                requestReversa[2]        = new cCampo();
                requestReversa[2].iTipo  = eTipo.NE;
                requestReversa[2].sCampo = "IDTIENDA";
                requestReversa[2].sValor = 1;

                requestReversa[3]        = new cCampo();
                requestReversa[3].iTipo  = eTipo.NE;
                requestReversa[3].sCampo = "IDPOS";
                requestReversa[3].sValor = 1;

                requestReversa[4]        = new cCampo();
                requestReversa[4].iTipo  = eTipo.NE;
                requestReversa[4].sCampo = "IDCAJERO";
                requestReversa[4].sValor = 1;

                requestReversa[5]        = new cCampo();
                requestReversa[5].iTipo  = eTipo.FD;
                requestReversa[5].sCampo = "FECHALOCAL";
                requestReversa[5].sValor = DateTime.Now.ToString("dd/MM/yyyy");

                requestReversa[6]        = new cCampo();
                requestReversa[6].iTipo  = eTipo.HR;
                requestReversa[6].sCampo = "HORALOCAL";
                requestReversa[6].sValor = DateTime.Now.ToString("HH:mm:ss");

                requestReversa[7]        = new cCampo();
                requestReversa[7].iTipo  = eTipo.NE;
                requestReversa[7].sCampo = "TRANSACCION";
                requestReversa[7].sValor = Transaction;

                requestReversa[8]        = new cCampo();
                requestReversa[8].iTipo  = eTipo.AN;
                requestReversa[8].sCampo = "SKU";
                requestReversa[8].sValor = SKU;

                requestReversa[9]        = new cCampo();
                requestReversa[9].sCampo = "FECHACONTABLE";
                requestReversa[9].sValor = DateTime.Now.ToString("dd/MM/yyyy");

                requestReversa[10]        = new cCampo();
                requestReversa[10].sCampo = "AUTORIZACION";
                requestReversa[10].sValor = NoAuto;

                if (Reference != string.Empty)
                {
                    requestReversa[11]             = new cCampo();
                    requestReversa[11].sCampo      = "REFERENCIA";
                    requestReversa[11].sValor      = Encriptacion.PXEncryptFX(Reference, EncryptionKey);
                    requestReversa[11].bEncriptado = true;
                    requestReversa[11].iTipo       = eTipo.AN;
                }

                //Se verifica que existan las credenciales
                if (User == string.Empty || Password == string.Empty || User == null || Password == null)
                {
                    response = "Imposible conectar al WS porque no hay credenciales";
                    return(response, -1);
                }
                else
                {
                    wservice.ClientCredentials.UserName.UserName = User;
                    wservice.ClientCredentials.UserName.Password = Password;
                }

                cCampo[] fields = null;

                try
                {
                    var task = Task.Run(() => wservice.ReversaAsync(requestReversa));

                    // Se registra la solicitud de pago enviada en el TXT
                    //LogReversos.WriteTXData("+", "Solicitud de Pago enviada", currentTransaction.ToString());

                    // Se establece el tiempo de espera para la respuesta
                    var timeout = TimeSpan.FromSeconds(45);

                    // Obtendremos: TRUE si la tarea se ejecuto dentro del tiempo establecido
                    //              FALSE si la tarea sobrepaso de ese tiempo
                    var isTaskFinished = task.Wait(timeout);

                    // Se va contabilizando los intentos para obtener respuesta del WS
                    int attempts = 0;
                    for (int i = 0; i < 3; i++)
                    {
                        //Si se obtuvo respuesta se detiene la iteracion y
                        // continuara con la logica establecida
                        if (isTaskFinished)
                        {
                            fields = task.Result;
                            break;
                        }
                        else
                        {
                            //SE incremetnaran los intentos hasta obtener una respuesta
                            attempts++;

                            //Actualizar tabla [Transaccion] con el intento

                            task = Task.Run(() => wservice.ReversaAsync(requestReversa));
                        }
                    }

                    if (fields[0].sCampo == "CODIGORESPUESTA" && fields[0].sValor.ToString() == "0")
                    {
                        //ACTUALIZAR en la BD de la reversa con los intentos
                        response = fields[0].sValor.ToString();

                        return(response, 1);
                    }
                    else
                    {
                        //Isertamos el resultado del WS en BD
                        response = fields[0].sValor.ToString();
                        return(response, 1);
                    }
                }
                catch (System.Net.WebException wex)
                {
                    //Insertar por tiempo de espera BD
                    response = wex.ToString();
                    return(response, 3);
                }
            }
            catch (Exception ex)
            {
                string respuesta = ex.ToString();
                return(respuesta, 3);
            }
        }
Exemplo n.º 2
0
        public (string response, int estatus) RequestService()
        {
            PxUniversalSoapClient wservice = new PxUniversalSoapClient(PxUniversalSoapClient.EndpointConfiguration.PxUniversalSoap);

            try
            {
                string jsonResult = "";

                cCampo[] requestInfo = new cCampo[10];

                requestInfo[0]        = new cCampo();
                requestInfo[0].iTipo  = eTipo.NE;
                requestInfo[0].sCampo = "IDGRUPO";
                requestInfo[0].sValor = 7;

                requestInfo[1]        = new cCampo();
                requestInfo[1].iTipo  = eTipo.NE;
                requestInfo[1].sCampo = "IDCADENA";
                requestInfo[1].sValor = 1;

                requestInfo[2]        = new cCampo();
                requestInfo[2].iTipo  = eTipo.NE;
                requestInfo[2].sCampo = "IDTIENDA";
                requestInfo[2].sValor = 1;

                requestInfo[3]        = new cCampo();
                requestInfo[3].iTipo  = eTipo.NE;
                requestInfo[3].sCampo = "IDPOS";
                requestInfo[3].sValor = 1;

                requestInfo[4]        = new cCampo();
                requestInfo[4].iTipo  = eTipo.NE;
                requestInfo[4].sCampo = "IDCAJERO";
                requestInfo[4].sValor = 1;

                requestInfo[5]        = new cCampo();
                requestInfo[5].iTipo  = eTipo.FD;
                requestInfo[5].sCampo = "FECHALOCAL";
                requestInfo[5].sValor = DateTime.Now.ToString("dd/MM/yyyy");

                requestInfo[6]        = new cCampo();
                requestInfo[6].iTipo  = eTipo.HR;
                requestInfo[6].sCampo = "HORALOCAL";
                requestInfo[6].sValor = DateTime.Now.ToString("HH:mm:ss");

                requestInfo[7]        = new cCampo();
                requestInfo[7].iTipo  = eTipo.NE;
                requestInfo[7].sCampo = "TRANSACCION";
                requestInfo[7].sValor = currentTransaction;

                requestInfo[8]        = new cCampo();
                requestInfo[8].iTipo  = eTipo.AN;
                requestInfo[8].sCampo = "SKU";
                requestInfo[8].sValor = SKU;

                if (Reference != string.Empty)
                {
                    requestInfo[9]             = new cCampo();
                    requestInfo[9].sCampo      = "REFERENCIA";
                    requestInfo[9].sValor      = Encriptacion.PXEncryptFX(Reference, EncryptionKey);
                    requestInfo[9].bEncriptado = true;
                    requestInfo[9].iTipo       = eTipo.AN;
                }

                if (User == string.Empty || Password == string.Empty)
                {
                    string result = "Imposible conectar al WS porque no hay credenciales";
                    return(result, 3);
                }
                else
                {
                    wservice.ClientCredentials.UserName.UserName = User;
                    wservice.ClientCredentials.UserName.Password = Password;
                }

                cCampo[] response = null;

                try
                {
                    var task = Task.Run(() => wservice.InfoAsync(requestInfo));

                    // Se establece el tiempo de espera para la respuesta
                    var timeout = TimeSpan.FromSeconds(45);

                    // Obtendremos: TRUE si la tarea se ejecuto dentro del tiempo establecido
                    //              FALSE si la tarea sobrepaso de ese tiempo
                    var isTaskFinished = task.Wait(timeout);

                    // Se va contabilizando los intentos para obtener respuesta del WS
                    int attempts = 1;
                    for (int i = 0; i < 3; i++)
                    {
                        //Si se obtuvo respuesta se detiene la iteracion y
                        // continuara con la logica establecida
                        if (isTaskFinished)
                        {
                            response = task.Result;
                            break;
                        }
                        else
                        {
                            //SE incremetnaran los intentos hasta obtener una respuesta
                            attempts++;

                            task = Task.Run(() => wservice.InfoAsync(requestInfo));
                        }
                    }

                    if (response.Length > 0)
                    {
                        int codeResponse = 0;
                        if (response[0].sCampo == "CODIGORESPUESTA")
                        {
                            string codeDescription;
                            codeResponse = (int)response[0].sValor;

                            if (codeResponse == (int)response[0].sValor)
                            {
                                if (response[1].sCampo == "CODIGORESPUESTADESCR")
                                {
                                    codeDescription = response[1].sValor.ToString();

                                    //Actualizar el registro de la transaccion

                                    return(codeResponse.ToString(), 3);
                                }
                                return("Error", 3);
                            }
                        }
                    }

                    var Fields = new List <cCampo>();
                    foreach (var field in response)
                    {
                        if (field.bEncriptado == true)
                        {
                            field.sValor = Encriptacion.PXDecryptFX(field.sValor.ToString(), EncryptionKey);
                        }

                        Fields.Add(field);
                    }

                    jsonResult = JsonConvert.SerializeObject(Fields);

                    return(jsonResult, 1);
                }
                catch (System.Net.WebException wex)
                {
                    return(wex.ToString(), 3);
                }
            }
            catch (System.Net.WebException wex)
            {
                return(wex.ToString(), 3);
            }
        }
        public (string response, int status) PayService(List <cCampo> campos)
        {
            string SKU = "";

            foreach (var campo in campos)
            {
                if (campo.sCampo == "SKU")
                {
                    SKU = campo.sValor.ToString();
                }
            }

            // WS Diestel
            PxUniversalSoapClient wservice = new PxUniversalSoapClient(PxUniversalSoapClient.EndpointConfiguration.PxUniversalSoap);

            // Cantidad de elementos dentro del arreglo
            int elementsAmount = campos.Count();

            // Cantidad de campos que tendra la solicitud del WS
            int index = 10 + elementsAmount;

            // Respuesta del pago procesado
            string jsonString = "";

            //Campos para la solicitud
            cCampo[] requestEjecuta = new cCampo[index];

            try
            {
                requestEjecuta[0]        = new cCampo();
                requestEjecuta[0].iTipo  = eTipo.NE;
                requestEjecuta[0].sCampo = "IDGRUPO";
                requestEjecuta[0].sValor = 7;

                requestEjecuta[1]        = new cCampo();
                requestEjecuta[1].iTipo  = eTipo.NE;
                requestEjecuta[1].sCampo = "IDCADENA";
                requestEjecuta[1].sValor = 1;

                requestEjecuta[2]        = new cCampo();
                requestEjecuta[2].iTipo  = eTipo.NE;
                requestEjecuta[2].sCampo = "IDTIENDA";
                requestEjecuta[2].sValor = 1;

                requestEjecuta[3]        = new cCampo();
                requestEjecuta[3].iTipo  = eTipo.NE;
                requestEjecuta[3].sCampo = "IDPOS";
                requestEjecuta[3].sValor = 1;

                requestEjecuta[4]        = new cCampo();
                requestEjecuta[4].iTipo  = eTipo.NE;
                requestEjecuta[4].sCampo = "IDCAJERO";
                requestEjecuta[4].sValor = 1;

                requestEjecuta[5]        = new cCampo();
                requestEjecuta[5].iTipo  = eTipo.FD;
                requestEjecuta[5].sCampo = "FECHALOCAL";
                requestEjecuta[5].sValor = DateTime.Now.ToString("dd/MM/yyyy");

                requestEjecuta[6]        = new cCampo();
                requestEjecuta[6].iTipo  = eTipo.HR;
                requestEjecuta[6].sCampo = "HORALOCAL";
                requestEjecuta[6].sValor = DateTime.Now.ToString("HH:mm:ss");

                requestEjecuta[7]        = new cCampo();
                requestEjecuta[7].iTipo  = eTipo.FD;
                requestEjecuta[7].sCampo = "FECHACONTABLE";
                requestEjecuta[7].sValor = DateTime.Now.ToString("dd/MM/yyyy");

                requestEjecuta[8]        = new cCampo();
                requestEjecuta[8].iTipo  = eTipo.NE;
                requestEjecuta[8].sCampo = "TRANSACCION";
                requestEjecuta[8].sValor = currentTransaction;

                requestEjecuta[9]        = new cCampo();
                requestEjecuta[9].iTipo  = eTipo.AN;
                requestEjecuta[9].sCampo = "SKU";
                requestEjecuta[9].sValor = SKU;

                //Se recorre todo el arreglo "principal" (request)
                for (int i = 0; i < requestEjecuta.Length; i++)
                {
                    //Identificamos que posicion del arreglo es nula
                    //para posteriormente inicializarla con un valor
                    if (requestEjecuta[i] == null)
                    {
                        //Se declara una variable para indicar la poscicion
                        //del arreglo recibido como parametro del metodo (info)
                        int cp = 0;

                        //Recorremos e igualamos las posiciones
                        for (int j = i; j < requestEjecuta.Length; j++)
                        {
                            //Identificamos hasta que cantidad de elementos se
                            //deberan de añadir a los espacios nulos del arreglo principal
                            if (cp <= elementsAmount)
                            {
                                //Agregamos los nuevos elementos del arreglo recibido al
                                //arreglo principal
                                requestEjecuta[j]        = new cCampo();
                                requestEjecuta[j].sCampo = campos[cp].sCampo;

                                //Se filtran los elemntos que deberan ir encriptados
                                if (campos[cp].sCampo == "REFERENCIA")
                                {
                                    requestEjecuta[j].sValor      = Encriptacion.PXEncryptFX(campos[cp].sValor.ToString(), EncriptionKey);
                                    requestEjecuta[j].bEncriptado = true;
                                }
                                else
                                {
                                    requestEjecuta[j].sValor      = campos[cp].sValor.ToString();
                                    requestEjecuta[j].bEncriptado = false;
                                }

                                //Se incrementa la variable para pasar al siguiente elemento que se debera
                                // de añadir al arreglo
                                cp++;
                            }
                        }
                    }
                }

                //Se verifica que existan las credenciales
                if (User == string.Empty || Password == string.Empty || User == null || Password == null)
                {
                    jsonString = "Imposible conectar al WS porque no hay credenciales";
                    return(jsonString, 3);
                }
                else
                {
                    wservice.ClientCredentials.UserName.UserName = User;
                    wservice.ClientCredentials.UserName.Password = Password;
                }

                // Respuesta del WS
                cCampo[] response = null;

                try
                {
                    var task = Task.Run(() => wservice.EjecutaAsync(requestEjecuta));

                    // Se registra la solicitud de pago enviada en el TXT
                    //LogReversos.WriteTXData("+", "Solicitud de Pago enviada", currentTransaction.ToString());

                    // Se establece el tiempo de espera para la respuesta
                    var timeout = TimeSpan.FromSeconds(45);

                    // Obtendremos: TRUE si la tarea se ejecuto dentro del tiempo establecido
                    //              FALSE si la tarea sobrepaso de ese tiempo
                    var isTaskFinished = task.Wait(timeout);

                    // Se va contabilizando los intentos para obtener respuesta del WS
                    int attempts = 1;
                    for (int i = 0; i < 3; i++)
                    {
                        //Si se obtuvo respuesta se detiene la iteracion y
                        // continuara con la logica establecida
                        if (isTaskFinished)
                        {
                            response = task.Result;
                            break;
                        }
                        else
                        {
                            //SE incremetnaran los intentos hasta obtener una respuesta
                            attempts++;

                            //Actualizar tabla [Transaccion] con el intento

                            task = Task.Run(() => wservice.EjecutaAsync(requestEjecuta));
                        }
                    }

                    //Se recopilan los campos de la respuesta y se meten dentro de una lista
                    //en caso de requerir hacer una reversa
                    var listReverse = new List <cCampo>();
                    foreach (var campo in response)
                    {
                        listReverse.Add(campo);
                    }

                    //Verificams que obtengamos una respuesta
                    if (response.Length > 0)
                    {
                        // Validacion de respuesta del servicio en caso de [ERROR]
                        if (response[0].sCampo == "CODIGORESPUESTA")
                        {
                            string codeDescription;
                            int    codeResponse = (int)response[0].sValor;

                            if (codeResponse == (int)response[0].sValor)
                            {
                                if (response[1].sCampo == "CODIGORESPUESTADESCR")
                                {
                                    codeDescription = response[1].sValor.ToString();

                                    //Actualizar tabla transacciones
                                    // el intento, CodeResponse, y el status 3

                                    return(codeResponse.ToString(), 3);
                                }
                            }
                        }
                    }
                    else
                    {
                        //
                        // + Se ACTUALIZA el registro del pago NO existoso [Transacciones]
                        //

                        if (response.Length != 0)
                        {
                            foreach (var item in response)
                            {
                                if ((int)item.sValor == 47)
                                {
                                    //Se debera devolver un "ticket"
                                    //demostrando el motivo del rechazo
                                    //de la operacion
                                    //q
                                    // Devolver un JSON a la Front-End
                                }
                                else if ((int)item.sValor == 8 || (int)item.sValor == 71 || (int)item.sValor == 72)
                                {
                                    //Proceso de reversas

                                    CancelationService cancelation = new CancelationService(reverseData);
                                    var cancel = cancelation.Reverses(listReverse);
                                    return(cancel.result, 2);
                                }
                            }
                        }
                    }
                }
                catch (System.Net.WebException)
                {
                    //Proceso de reversas
                }

                //Lista con los campos que se le van a presentar
                // a la front-end
                var listCampos = new List <object>();
                foreach (var wsCampo in response)
                {
                    if (wsCampo.sCampo == "REFERENCIA")
                    {
                        wsCampo.sValor = Encriptacion.PXDecryptFX(wsCampo.sValor.ToString(), EncriptionKey);
                    }

                    listCampos.Add(wsCampo);
                }

                try
                {
                    //Proceso de insercion a la tabla Transacciones [Existoso]
                }
                catch (Exception)
                {
                    throw;
                }

                //Serializa a json
                var jsonResult = JsonConvert.SerializeObject(listCampos);
                jsonString = jsonResult;
            }
            catch (Exception)
            {
                throw;
            }
            return(jsonString, 1);
        }