Esempio n. 1
0
        public static LoginTickets GetLoginTicketFromXML(XmlDocument document, LoginTicketRequests request)
        {
            string LoginTicketResponseNodeName = "loginTicketResponse";
            string HeaderNodeName         = "header";
            string SourceNodeName         = "source";
            string DestinationNodeName    = "destination";
            string UniqueIDNodeName       = "uniqueId";
            string GenerationTimeNodeName = "generationTime";
            string ExpirationTimeNodeName = "expirationTime";
            string CredentialsNodeName    = "credentials";
            string TokenNodeName          = "token";
            string SignNodeName           = "sign";



            LoginTickets result = null;

            XmlNode  headerNode      = document[LoginTicketResponseNodeName][HeaderNodeName];
            XmlNode  credentialsNode = document[LoginTicketResponseNodeName][CredentialsNodeName];
            DateTime generationTime  = XmlConvert.ToDateTime(headerNode[GenerationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            DateTime expirationTime  = XmlConvert.ToDateTime(headerNode[ExpirationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            long     requestID       = XmlConvert.ToInt64(headerNode[UniqueIDNodeName].InnerText);



            //TODO: validar que lo que devolvio el WS sea válido (expiration, source, destination, etc)
            result = new LoginTickets(requestID, request, generationTime, expirationTime, credentialsNode[TokenNodeName].InnerText, credentialsNode[SignNodeName].InnerText);
            //Save(result);

            return(result);
        }
Esempio n. 2
0
        private static LoginTickets GetLoginTicketFromXML(XmlDocument document, global::Entities.LoginTicketRequests request)
        {
            LoginTickets result          = null;
            XmlNode      headerNode      = document[LoginTicketResponseNodeName][HeaderNodeName];
            XmlNode      credentialsNode = document[LoginTicketResponseNodeName][CredentialsNodeName];
            DateTime     generationTime  = XmlConvert.ToDateTime(headerNode[GenerationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            DateTime     expirationTime  = XmlConvert.ToDateTime(headerNode[ExpirationTimeNodeName].InnerText, XmlDateTimeSerializationMode.RoundtripKind);
            long         requestID       = XmlConvert.ToInt64(headerNode[UniqueIDNodeName].InnerText);

            //TODO: validar que lo que devolvio el WS sea válido (expiration, source, destination, etc)
            result = new LoginTickets(requestID, request, generationTime, expirationTime, credentialsNode[TokenNodeName].InnerText, credentialsNode[SignNodeName].InnerText);
            return(result);
        }
Esempio n. 3
0
        private int?GetUltimoNroComprobante(Comprobantes comprobante)
        {
            LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa);

            if (loginTicket != null)
            {
                FEAuthRequest authRequest = new FEAuthRequest();
                authRequest.Token = loginTicket.Token;
                authRequest.Sign  = loginTicket.Sign;
                authRequest.cuit  = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", ""));
                ComprobantesAdapter adapter = new ComprobantesAdapter(comprobante);
                Service             service = new Service();
                return(((FERecuperaLastCMPResponse)(service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype()))).cbte_nro);
            }
            return(null);
        }
Esempio n. 4
0
        public LoginTickets GetCurrentLoginTicket(Empresas empresa)
        {
            LoginTickets result = null;
            ICriteria    crit   = DBConnection.Session.CreateCriteria(PersistentType);

            crit.Add(Expression.Le("GenerationTime", DateTime.Now));
            crit.Add(Expression.Ge("ExpirationTime", DateTime.Now));
            crit.CreateCriteria("LoginTicketRequest").Add(Expression.Eq("Empresa", empresa));
            crit.SetMaxResults(1);
            IList results = crit.List();

            if (results.Count > 0)
            {
                result = results[0] as LoginTickets;
            }

            return(result);
        }
Esempio n. 5
0
        private static long?GetUltimoId(Comprobantes comprobante)
        {
            LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa);

            if (loginTicket != null)
            {
                FEAuthRequest authRequest = new FEAuthRequest();
                authRequest.Token = loginTicket.Token;
                authRequest.Sign  = loginTicket.Sign;
                authRequest.cuit  = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", ""));
                Service service = new Service();

                /*FEUltNroResponse ultid = service.FEUltNroRequest(authRequest);
                 * UltNroResponse nroo = ultid.nro;
                 * vError err = ultid.RError;*/
                return(((FEUltNroResponse)(service.FEUltNroRequest(authRequest))).nro.value);
            }
            return(null);
        }
Esempio n. 6
0
        public static string GetCAE(Comprobantes comprobante, out string logError, out string nroComprobante)
        {
            comprobante.Empresa            = new Empresas();
            comprobante.Empresa.Cuit       = "33-67789425-9";
            comprobante.Empresa.DNOrigen   = "serialNumber=CUIT 33677894259,[email protected],CN=VISET,OU=VISET,O=VISET,ST=Buenos Aires,C=AR";
            comprobante.Empresa.DNDestino  = "CN=wsaahomo; O=afip; C=ar; serialNumber=CUIT 33693450239";
            comprobante.Empresa.Id         = Convert.ToInt32("2");
            comprobante.Empresa.SenderName = "VISET";
            comprobante.Empresa.CAI        = "CAI1455";
            comprobante.Empresa.CertificadoDestinoFileName = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\CRT-root.cer";
            comprobante.Empresa.CertificadoFileName        = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\viset.crt";
            comprobante.Empresa.CertificadoPassword        = "******";
            comprobante.Empresa.LoginTicketFileName        = @"C:\Vero\Proyectos\MFD\MFDHOMO\Certificados\viset\LoginTicketRequest.xml";


            logError = String.Empty;
            string       result      = String.Empty;
            LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa);

            nroComprobante = "-1";
            if (loginTicket != null)
            {
                FEAuthRequest authRequest = new FEAuthRequest();
                authRequest.Token = loginTicket.Token;
                authRequest.Sign  = loginTicket.Sign;
                authRequest.cuit  = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", ""));
                ComprobantesAdapter adapter  = new ComprobantesAdapter(comprobante);
                FERequest           request  = adapter.GenerarFERequest(comprobante.Id);
                Service             service  = new Service();
                FEResponse          response = service.FEAutRequest(authRequest, request);

                if (response.FedResp != null && response.FedResp[0].resultado == "R" && response.FedResp[0].motivo.StartsWith("11") && response.FedResp[0].cae == "NULL")
                {
                    //Caso en que falla por correlatividad de comprobantes
                    FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype());
                    comprobante.NroCbante = comprobante.NroCbante.Substring(0, 5) + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0');
                    adapter = new ComprobantesAdapter(comprobante);
                    request = new FERequest();
                    //Generación de otro ID
                    long idDate = DateTime.Now.Year * 10000000000;
                    idDate  += DateTime.Now.Month * 100000000;
                    idDate  += DateTime.Now.Day * 1000000;
                    idDate  += DateTime.Now.Hour * 10000;
                    idDate  += DateTime.Now.Minute * 100;
                    idDate  += DateTime.Now.Second;
                    request  = adapter.GenerarFERequest(idDate);
                    service  = new Service();
                    response = service.FEAutRequest(authRequest, request);
                }
                else
                {
                    if (response.FedResp != null && response.FedResp[0].resultado == "R" && !String.IsNullOrEmpty(response.FedResp[0].motivo))
                    {
                        ArrayList motivos = new ArrayList();
                        motivos.AddRange(response.FedResp[0].motivo.Split(";".ToCharArray()));
                        StringBuilder logMotivos = new StringBuilder();
                        if (motivos.Contains("01"))
                        {
                            logMotivos.Append("01 \"La cuit informada no corresponde a un responsable inscripto en el iva activo\\n");
                        }
                        if (motivos.Contains("02"))
                        {
                            logMotivos.Append("02 \"La cuit informada no se encuentra autorizada a emitir comprobantes electronicos originales o el periodo de inicio autorizado es posterior al de la generacion de la solicitud\"\n");
                        }
                        if (motivos.Contains("03"))
                        {
                            logMotivos.Append("03 \"La cuit informada registra inconvenientes con el domicilio fiscal\"\n");
                        }
                        if (motivos.Contains("04"))
                        {
                            logMotivos.Append("04 \"El punto de venta informado no se encuentra declarado para ser utilizado en el presente regimen\"\n");
                        }
                        if (motivos.Contains("05"))
                        {
                            logMotivos.Append("05 \"La fecha del comprobante indicada no puede ser anterior en mas de cinco dias, si se trata de una venta, o anterior o posterior en mas de diez dias, si se trata de una prestacion de servicios, consecutivos de la fecha de remision del archivo art. 22 De la rg nro 2177-\"\n");
                        }
                        if (motivos.Contains("06"))
                        {
                            logMotivos.Append("06 \"La cuit informada no se encuentra autorizada a emitir comprobantes clase \"a\"\"\n");
                        }
                        if (motivos.Contains("07"))
                        {
                            logMotivos.Append("07 \"Para la clase de comprobante solicitado -comprobante clase a- debera consignar en el campo codigo de documento identificatorio del comprador el codigo \"80\"\n");
                        }
                        if (motivos.Contains("08"))
                        {
                            logMotivos.Append("08 \"La cuit indicada en el campo nro de identificacion del comprador es invalida\"\n");
                        }
                        if (motivos.Contains("09"))
                        {
                            logMotivos.Append("09 \"La cuit indicada en el campo nro de identificacion del comprador no existe en el padron unico de contribuyentes\"\n");
                        }
                        if (motivos.Contains("10"))
                        {
                            logMotivos.Append("10 \"La cuit indicada en el campo nro de identificacion del comprador no corresponde a un responsable inscripto en el iva activo\"\n");
                        }
                        if (motivos.Contains("11"))
                        {
                            logMotivos.Append("11 \"El nro de comprobante desde informado no es correlativo al ultimo nro de comprobante registrado/hasta solicitado para ese tipo de comprobante y punto de venta\"\n");
                        }
                        if (motivos.Contains("12"))
                        {
                            logMotivos.Append("12 \"El rango informado se encuentra autorizado con anterioridad para la misma cuit, tipo de comprobante y punto de venta\"\n");
                        }
                        if (motivos.Contains("13"))
                        {
                            logMotivos.Append("13 \"La cuit indicada se encuentra comprendida en el regimen establecido por la resolucion general nro 2177 y/o en el titulo I de la resolucion general nro 1361 art. 24 De la rg nro 2177\"\n");
                        }
                        if (logMotivos.Length > 0)
                        {
                            logError = logMotivos.ToString();
                        }
                    }
                }
                nroComprobante = comprobante.NroCbante;
                try
                {
                    result = response.FedResp[0].cae;
                }
                catch (Exception ex)
                {
                    nroComprobante = "-1";
                    result         = ex.Message;
                }
            }
            return(result);
        }
Esempio n. 7
0
        private static LoginTickets GetLoginTicket(Empresas empresa)
        {
            LoginTickets result = null;
            string       ntpServer;
            NTPClient    ntp;

            if (loginTicketsBL != null)
            {
                result    = loginTicketsBL.GetCurrentLoginTicket(empresa);
                ntpServer = GeneralSettings.Instance.NTPServer;
            }
            if (result == null)
            {
                //Sincronización de reloj por NTP
                ntp = new NTPClient("time.afip.gov.ar");
                ntp.Connect(true);

                XmlDocument         xmlDocument;
                LoginTicketRequests loginTicketRequest;
                //Generacion del Ticket de Requerimiento de Acceso
                if (loginTicketRequestsBL != null)
                {
                    loginTicketRequest = loginTicketRequestsBL.GenerateLoginTicket(empresa);
                    xmlDocument        = loginTicketRequestsBL.GenerateLoginTicketRequestXML(loginTicketRequest);
                }
                else
                {
                    loginTicketRequest = new LoginTicketRequests(empresa);
                    xmlDocument        = GenerateLoginTicketRequestXML(loginTicketRequest);
                }
                // Conversion del XML a bytes
                StringWriter sw = new StringWriter();
                xmlDocument.WriteTo(new XmlTextWriter(sw));
                byte[] loginTicketRequestXml = new ASCIIEncoding().GetBytes(sw.ToString());

                //Firma del Ticket de Requerimiento de Acceso
                X509Certificate2 certOrigen            = GetSenderCertificate(empresa);
                byte[]           loginTicketRequestCMS = Sign(loginTicketRequestXml, certOrigen);

                //Codificacion a base 64
                //string loginTicketRequestBase64 = Convert.ToBase64String(encryptedTicket);
                string loginTicketRequestBase64 = Convert.ToBase64String(loginTicketRequestCMS);

                //Transmisión del Ticket de Requerimiento de Acceso al WSAA
                LoginCMSService loginService = new LoginCMSService();
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
                string loginServiceResponse = loginService.loginCms(loginTicketRequestBase64);

                //Extracción del Ticket de Acceso devuelto por el WSAA
                XmlDocument loginTicketXml = new XmlDocument();
                loginTicketXml.LoadXml(loginServiceResponse);
                if (loginTicketRequestsBL != null)
                {
                    result = loginTicketsBL.GetLoginTicketFromXML(loginTicketXml, loginTicketRequest);
                }
                else
                {
                    result = GetLoginTicketFromXML(loginTicketXml, null);
                }
            }
            return(result);
        }
Esempio n. 8
0
        private static string GetCAE(Comprobantes comprobante, out string logError, out string nroComprobante, ref long idCabecera, bool autogenerarNroComprobante)
        {
            logError = String.Empty;
            string       result      = String.Empty;
            LoginTickets loginTicket = GetLoginTicket(comprobante.Empresa);

            nroComprobante = "-1";
            if (loginTicket != null)
            {
                Service service = new Service();
                //service.Timeout = 500000;
                FEAuthRequest authRequest = new FEAuthRequest();
                authRequest.Token = loginTicket.Token;
                authRequest.Sign  = loginTicket.Sign;
                authRequest.cuit  = Convert.ToInt64(comprobante.Empresa.Cuit.Replace("-", ""));
                ComprobantesAdapter adapter = new ComprobantesAdapter(comprobante, comprobante.Empresa);
                //if (autogenerarNroComprobante)
                //{
                //    FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype());
                //    comprobante.NroCbante = comprobante.Empresa.PuntoDeVenta.Value.ToString().PadLeft(4, '0')+"-" + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0');
                //}

                //idCabecera = comprobante.Id;
                FERequest  request  = adapter.GenerarFERequest(idCabecera);
                FEResponse response = null;
                try
                {
                    response = service.FEAutRequest(authRequest, request);
                }
                catch (Exception ex) {
                    throw ex;
                }

                if (autogenerarNroComprobante && response.FedResp != null && response.FedResp[0].resultado == "R" && response.FedResp[0].motivo.StartsWith("11") && response.FedResp[0].cae == "NULL")
                {
                    FERecuperaLastCMPResponse ultimoComEmitido = service.FERecuperaLastCMPRequest(authRequest, adapter.GenerarFELastCMPtype());
                    comprobante.NroCbante = comprobante.Empresa.PuntoDeVenta.Value.ToString().PadLeft(4, '0') + "-" + (ultimoComEmitido.cbte_nro + 1).ToString().PadLeft(8, '0');
                    //Caso en que falla por correlatividad de comprobantes
                    adapter = new ComprobantesAdapter(comprobante, comprobante.Empresa);
                    request = new FERequest();
                    ////Generación de otro ID
                    long idDate = DateTime.Now.Year * 10000000000;
                    idDate    += DateTime.Now.Month * 100000000;
                    idDate    += DateTime.Now.Day * 1000000;
                    idDate    += DateTime.Now.Hour * 10000;
                    idDate    += DateTime.Now.Minute * 100;
                    idDate    += DateTime.Now.Second;
                    idCabecera = idDate;
                    request    = adapter.GenerarFERequest(idCabecera);
                    service    = new Service();
                    response   = service.FEAutRequest(authRequest, request);
                }
                if (response.FedResp == null && response.RError != null)
                {
                    return(response.RError.perrmsg);
                }
                if (response.FedResp != null && response.FedResp[0].resultado == "R" && !String.IsNullOrEmpty(response.FedResp[0].motivo))
                {
                    ArrayList motivos = new ArrayList();
                    motivos.AddRange(response.FedResp[0].motivo.Split(";".ToCharArray()));
                    StringBuilder logMotivos = new StringBuilder();
                    if (motivos.Contains("01"))
                    {
                        logMotivos.Append("01 \"La cuit informada no corresponde a un responsable inscripto en el iva activo\\n");
                    }
                    if (motivos.Contains("02"))
                    {
                        logMotivos.Append("02 \"La cuit informada no se encuentra autorizada a emitir comprobantes electronicos originales o el periodo de inicio autorizado es posterior al de la generacion de la solicitud\"\n");
                    }
                    if (motivos.Contains("03"))
                    {
                        logMotivos.Append("03 \"La cuit informada registra inconvenientes con el domicilio fiscal\"\n");
                    }
                    if (motivos.Contains("04"))
                    {
                        logMotivos.Append("04 \"El punto de venta informado no se encuentra declarado para ser utilizado en el presente regimen\"\n");
                    }
                    if (motivos.Contains("05"))
                    {
                        logMotivos.Append("05 \"La fecha del comprobante indicada no puede ser anterior en mas de cinco dias, si se trata de una venta, o anterior o posterior en mas de diez dias, si se trata de una prestacion de servicios, consecutivos de la fecha de remision del archivo art. 22 De la rg nro 2177-\"\n");
                    }
                    if (motivos.Contains("06"))
                    {
                        logMotivos.Append("06 \"La cuit informada no se encuentra autorizada a emitir comprobantes clase \"a\"\"\n");
                    }
                    if (motivos.Contains("07"))
                    {
                        logMotivos.Append("07 \"Para la clase de comprobante solicitado -comprobante clase a- debera consignar en el campo codigo de documento identificatorio del comprador el codigo \"80\"\n");
                    }
                    if (motivos.Contains("08"))
                    {
                        logMotivos.Append("08 \"La cuit indicada en el campo nro de identificacion del comprador es invalida\"\n");
                    }
                    if (motivos.Contains("09"))
                    {
                        logMotivos.Append("09 \"La cuit indicada en el campo nro de identificacion del comprador no existe en el padron unico de contribuyentes\"\n");
                    }
                    if (motivos.Contains("10"))
                    {
                        logMotivos.Append("10 \"La cuit indicada en el campo nro de identificacion del comprador no corresponde a un responsable inscripto en el iva activo\"\n");
                    }
                    if (motivos.Contains("11"))
                    {
                        logMotivos.Append("11 \"El nro de comprobante desde informado no es correlativo al ultimo nro de comprobante registrado/hasta solicitado para ese tipo de comprobante y punto de venta\"\n");
                    }
                    if (motivos.Contains("12"))
                    {
                        logMotivos.Append("12 \"El rango informado se encuentra autorizado con anterioridad para la misma cuit, tipo de comprobante y punto de venta\"\n");
                    }
                    if (motivos.Contains("13"))
                    {
                        logMotivos.Append("13 \"La cuit indicada se encuentra comprendida en el regimen establecido por la resolucion general nro 2177 y/o en el titulo I de la resolucion general nro 1361 art. 24 De la rg nro 2177\"\n");
                    }
                    if (logMotivos.Length > 0)
                    {
                        logError = logMotivos.ToString();
                    }
                }
                nroComprobante = comprobante.NroCbante;
                service.Dispose();
                try
                {
                    result = response.FedResp[0].cae;
                    comprobante.IdCabeceraWS = idCabecera;
                    try
                    {
                        CaeCounter wsCaeCounter = new CaeCounter();
                        bool       produccion   = !service.Url.Contains("h**o");
                        wsCaeCounter.SetCAEByCUIT(comprobante.Empresa.Cuit, result, comprobante.NroCbante, idCabecera, produccion);
                    }
                    catch (Exception ex) {
                        string err = ex.Message;
                        //Por el momento no se hace nada si falla el wsCaeCounter
                    }
                }
                catch (Exception ex)
                {
                    nroComprobante = "-1";
                    result         = ex.Message;
                }
            }

            return(result);
        }