public string comprobante_electronico(int tipocomprobante, long nrodoc, double total, double neto21, double civa21, double neto105, double civa105, ref string cae, ref string fechavto, ref string tipofactura, ref string puntoventa)
        {
            try
            {
                LoginClass miloginclase = new LoginClass("wsfe", NegocioConfigEmpresa.urllogin, @"C:\CertificadodonVito\certificado.pfx", "");
                miloginclase.hacerLogin(miloginclase);
                int doctipoid = 96;
                authRequest       = new FEAuthRequest();
                authRequest.Cuit  = NegocioConfigEmpresa.emcuit;
                authRequest.Sign  = miloginclase.Sing;
                authRequest.Token = miloginclase.Token;

                Service servicio = new Service();
                servicio     = getServicio();
                servicio.Url = NegocioConfigEmpresa.urlservicio;
                //servicio.ClientCertificates.Add(certificado);

                //ver conceptoid
                int conceptoid = CONCEPTO_PRODUCTO;
                if (nrodoc.ToString().Length == 11)
                {
                    doctipoid = 80;
                }


                //  Service service = getServicio();
                servicio.ClientCertificates.Add(miloginclase.Certificado);
                FECAERequest    req = new FECAERequest();
                FECAECabRequest cab = new FECAECabRequest();
                FECAEDetRequest det = new FECAEDetRequest();

                cab.CantReg  = 1;
                cab.PtoVta   = Convert.ToInt32(NegocioConfigEmpresa.puntoventa);
                cab.CbteTipo = tipocomprobante;
                req.FeCabReq = cab;

                det.Concepto = conceptoid;
                det.DocTipo  = doctipoid;
                det.DocNro   = nrodoc;

                // ultimo comprobante autorizado

                FERecuperaLastCbteResponse lastres = servicio.FECompUltimoAutorizado(authRequest, 3, tipocomprobante);
                int last = lastres.CbteNro;
                det.CbteDesde = last + 1;
                det.CbteHasta = last + 1;
                int nrocomprobante = last + 1;

                det.CbteFch = DateTime.Now.ToString("yyyyMMdd");
                if (tipocomprobante == 1 || tipocomprobante == 6)
                {
                    decimal totalneto = decimal.Round(Convert.ToDecimal(neto21 + neto105), 2);
                    decimal totaliva  = decimal.Round(Convert.ToDecimal(civa21 + civa105), 2);
                    det.ImpNeto = Convert.ToDouble(totalneto);
                    det.ImpIVA  = Convert.ToDouble(totaliva);
                }
                else
                {
                    det.ImpNeto = total;
                    det.ImpIVA  = 0;
                }

                det.ImpTotal = total;

                det.ImpTotConc = 0.00;
                det.ImpOpEx    = 0.00;
                det.ImpTrib    = 0.00;

                det.MonId    = "PES";
                det.MonCotiz = 1;
                int     tipoalicuota = ID_TASA_IVA_NINGUNO;
                AlicIva alicuota     = new AlicIva();
                if (tipocomprobante == TIPOCOMPROBANTE_FACTURA_A || tipocomprobante == TIPOCOMPROBANTE_FACTURA_B)
                {
                    tipoalicuota     = ID_TASA_IVA_21_00;
                    alicuota.Id      = tipoalicuota;
                    alicuota.BaseImp = neto21;
                    alicuota.Importe = civa21;
                    if (neto105 > 0)
                    {
                        AlicIva alicuota2 = new AlicIva();
                        tipoalicuota      = ID_TASA_IVA_10_50;
                        alicuota2.Id      = tipoalicuota;
                        alicuota2.BaseImp = neto105;
                        alicuota2.Importe = civa105;
                        det.Iva           = new[] { alicuota, alicuota2 };
                    }
                    else
                    {
                        det.Iva = new[] { alicuota };
                    }
                }
                else
                {
                    alicuota.Id      = tipoalicuota;
                    alicuota.BaseImp = 0;
                    alicuota.Importe = 0;
                    det.Iva          = new[] { alicuota };
                }



                req.FeDetReq = new[] { det };

                FECAEResponse r = servicio.FECAESolicitar(authRequest, req);
                cae = r.FeDetResp[0].CAE; //string CAE
                string ESTADO    = r.FeCabResp.Resultado;
                string resultado = r.FeDetResp[0].Resultado;
                fechavto = r.FeDetResp[0].CAEFchVto;//string vto

                puntoventa  = NegocioConfigEmpresa.puntoventa;
                tipofactura = tipocomprobante.ToString("00");


                string m = "ok";

                {
                    if (r.FeDetResp[0].Observaciones is object)
                    {
                        foreach (var o in r.FeDetResp[0].Observaciones)
                        {
                            m += string.Format("Obs: {0} ({1})", o.Msg, o.Code) + Constants.vbCrLf;
                        }
                    }
                }
                {
                    if (r.Errors is object)
                    {
                        foreach (var er in r.Errors)
                        {
                            m += string.Format("Er: {0}: {1}", er.Code, er.Msg) + Constants.vbCrLf;
                        }
                    }
                }
                {
                    if (r.Events is object)
                    {
                        foreach (var ev in r.Events)
                        {
                            m += string.Format("Ev: {0}: {1}", ev.Code, ev.Msg) + Constants.vbCrLf;
                        }
                    }
                }
                if (m == "ok")
                {
                    m = m + nrocomprobante.ToString();
                }
                return(m);
            }
            catch (Exception)
            {
                throw;
            }


            // string error = r.error;
            //  string desde = r.FeDetResp[0].CbteDesde;
            //  string hasta = r.FeDetResp[0].CbteHasta;
            // string OBSERVACION = r.FeDetResp[0].Observaciones;
        }
Exemplo n.º 2
0
        public void hacerLogin(LoginClass miclaselogin)
        {
            string  cmsFirmadoBase64;
            string  loginTicketResponse;
            XmlNode uniqueIdNode;
            XmlNode generationTimeNode;
            XmlNode ExpirationTimeNode;
            XmlNode ServiceNode;

            try
            {
                _globalId += 1;

                // Preparo el XML Request
                XmlLoginTicketRequest = new XmlDocument();
                XMLLOADER.loadTemplate(XmlLoginTicketRequest, "LoginTemplate");
                uniqueIdNode                 = XmlLoginTicketRequest.SelectSingleNode("//uniqueId");
                generationTimeNode           = XmlLoginTicketRequest.SelectSingleNode("//generationTime");
                ExpirationTimeNode           = XmlLoginTicketRequest.SelectSingleNode("//expirationTime");
                ServiceNode                  = XmlLoginTicketRequest.SelectSingleNode("//service");
                generationTimeNode.InnerText = DateTime.Now.AddMinutes(-10).ToString("s");
                ExpirationTimeNode.InnerText = DateTime.Now.AddMinutes(+10).ToString("s");
                uniqueIdNode.InnerText       = Convert.ToString(_globalId);
                ServiceNode.InnerText        = serv;

                // Obtenemos el Cert
                Certificado = new X509Certificate2();
                if (clave.IsReadOnly())
                {
                    Certificado.Import(File.ReadAllBytes(cert_path), clave, X509KeyStorageFlags.PersistKeySet);
                }
                else
                {
                    Certificado.Import(File.ReadAllBytes(cert_path));
                }

                var msgBytes = Encoding.UTF8.GetBytes(XmlLoginTicketRequest.OuterXml);

                // Firmamos
                var infoContenido = new ContentInfo(msgBytes);
                var cmsFirmado    = new SignedCms(infoContenido);
                var cmsFirmante   = new CmsSigner(Certificado);
                cmsFirmante.IncludeOption = X509IncludeOption.EndCertOnly;
                cmsFirmado.ComputeSignature(cmsFirmante);
                cmsFirmadoBase64 = Convert.ToBase64String(cmsFirmado.Encode());

                // Hago el login

                DatosConfigEmpresa miclaseticket = new DatosConfigEmpresa();



                var    servicio = new LoginCMSService();
                string url      = NegocioConfigEmpresa.urllogin;
                servicio.Url = url;

                if (miclaseticket.verificartiketfiscal() == false)
                {
                    loginTicketResponse = servicio.loginCms(cmsFirmadoBase64);
                    // Analizamos la respuesta
                    XmlLoginTicketResponse = new XmlDocument();
                    XmlLoginTicketResponse.LoadXml(loginTicketResponse);
                    token = XmlLoginTicketResponse.SelectSingleNode("//token").InnerText;
                    sing  = XmlLoginTicketResponse.SelectSingleNode("//sign").InnerText;
                    var exStr  = XmlLoginTicketResponse.SelectSingleNode("//expirationTime").InnerText;
                    var genStr = XmlLoginTicketResponse.SelectSingleNode("//generationTime").InnerText;
                    expirationtime      = DateTime.Parse(exStr);
                    generationtime      = DateTime.Parse(genStr);
                    xdocrequest         = XDocument.Parse(XmlLoginTicketRequest.OuterXml);
                    xdocresponse        = XDocument.Parse(XmlLoginTicketResponse.OuterXml);
                    miclaseticket.Token = token;
                    miclaseticket.Sign  = sing;
                    miclaseticket.Fecha = expirationtime;
                    miclaseticket.agregarticket(miclaseticket);
                }
                else
                {
                    token          = miclaseticket.Token;
                    sing           = miclaseticket.Sign;
                    expirationtime = miclaseticket.Fecha;
                }



                //  MessageBox.Show("Exito");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }