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; }
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); } }