[OperationContract, WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]//guardar y emitir private string SendDocSii(string RutEmpresa, string IdDocumento, string Ambiente) { //sp_sel_certificado_digital MySqlConnector mysql = new MySqlConnector(); mysql.ConnectionString = WebConfigurationManager.ConnectionStrings["MySqlProvider"].ConnectionString; mysql.AddProcedure("sp_sel_certificado_digital"); mysql. AddParameter("rutEmpresa", RutEmpresa); DataTable dtCert = new DataTable(); dtCert = mysql.ExecQuery().ToDataTable(); SiiUtilities siiUtil = new SiiUtilities(); string PathCert = dtCert.Rows[0]["Path"].ToString(); string PassCert = Utilities.Decryption(dtCert.Rows[0]["Password"].ToString()); X509Certificate2 cert = new X509Certificate2(PathCert, PassCert); ConexionSII cn = new ConexionSII(); //PASO 1 PEDIMOS EL TOKEN string Token = string.Empty; // Token = cn.PidoSemillaToken(cert,Ambiente); //PASO 2 FIRMAMOS EL DOCUMENTO //PASO 3 ENSOBRAMOS EL DTE EN EL SETDTE //PASO 4 ENVIAMOS if (!string.IsNullOrEmpty(Token)) { EnvioSii envioSii = new EnvioSii(); envioSii.Xml = XDocument.Parse("", LoadOptions.PreserveWhitespace); envioSii.RutEmisor = RutEmpresa; envioSii.RutEmpresa = RutEmpresa; envioSii.Token = Token; siiUtil.SendDoc(envioSii); } return(""); }
public string SendDoc(EnvioSii envioSii) { //string rutEmisor = "766551424"; //string rutEmpresa = "766551424"; StringBuilder secuencia = new StringBuilder(); // string nombreArchivo = @"C:\tyscom xml\xml\documentos\DTE_FIRMADO.xml"; string pRutEmisor = envioSii.RutEmisor.Substring(0, (envioSii.RutEmisor.Length - 1)); string pDigEmisor = envioSii.RutEmisor.Substring(envioSii.RutEmisor.Length - 1); string pRutEmpresa = envioSii.RutEmpresa.Substring(0, (envioSii.RutEmpresa.Length - 1)); string pDigEmpresa = envioSii.RutEmpresa.Substring(envioSii.RutEmpresa.Length - 1); //// //// Cree el header del request a enviar al SII //// segun la información solicitada del SII secuencia.Append("--7d23e2a11301c4\r\n"); secuencia.Append("Content-Disposition: form-data; name=\"rutSender\"\r\n"); secuencia.Append("\r\n"); secuencia.Append(pRutEmisor + "\r\n"); secuencia.Append("--7d23e2a11301c4\r\n"); secuencia.Append("Content-Disposition: form-data; name=\"dvSender\"\r\n"); secuencia.Append("\r\n"); secuencia.Append(pDigEmisor + "\r\n"); secuencia.Append("--7d23e2a11301c4\r\n"); secuencia.Append("Content-Disposition: form-data; name=\"rutCompany\"\r\n"); secuencia.Append("\r\n"); secuencia.Append(pRutEmpresa + "\r\n"); secuencia.Append("--7d23e2a11301c4\r\n"); secuencia.Append("Content-Disposition: form-data; name=\"dvCompany\"\r\n"); secuencia.Append("\r\n"); secuencia.Append(pDigEmpresa + "\r\n"); secuencia.Append("--7d23e2a11301c4\r\n"); secuencia.Append("Content-Disposition: form-data; name=\"archivo\"; filename=\"" + envioSii.NameXml + "\"\r\n"); secuencia.Append("Content-Type: text/xml\r\n"); secuencia.Append("\r\n"); //// //// Lea el documento xml que se va a enviar al SII XDocument xdocument = envioSii.Xml;// XDocument.Load(envioSii.RutaXml, LoadOptions.PreserveWhitespace); //// //// Cargue el documento en el objeto secuencia secuencia.Append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); secuencia.Append(xdocument.ToString(SaveOptions.DisableFormatting)); secuencia.Append("\r\n\r\n--7d23e2a11301c4--"); // // Aqui se configura el request que hace la solicitud al SII #region CONFIGURACION DE REQUEST //// //// Defina que ambiente utilizar. //// Certific "https://maullin.sii.cl/cgi_dte/UPL/DTEUpload"; string pUrl = "https://maullin.sii.cl/cgi_dte/UPL/DTEUpload"; //// //// Cree los parametros del header. //// Token debe ser el valor asignado por el SII string pMethod = "POST"; string pAccept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,application/vnd.ms-powerpoint, application/ms-excel,application/msword, */*"; string pReferer = "www.tyscom.cl"; string pToken = "TOKEN={0}"; //// //// Cree un nuevo request para iniciar el proceso HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pUrl); request.Method = pMethod; request.Accept = pAccept; request.Referer = pReferer; //// //// Agregar el content-type request.ContentType = "multipart/form-data: boundary=7d23e2a11301c4"; request.ContentLength = secuencia.Length; //// //// Defina manualmente los headers del request request.Headers.Add("Accept-Language", "es-cl"); request.Headers.Add("Accept-Encoding", "gzip, deflate"); request.Headers.Add("Cache-Control", "no-cache"); request.Headers.Add("Cookie", string.Format(pToken, envioSii.Token)); //// //// Defina el user agent request.UserAgent = "Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp 5.0.2.4)"; request.KeepAlive = true; request.Timeout = 20000; #endregion #region ESCRIBE LA DATA NECESARIA //// //// Recupere el streamwriter para escribir la secuencia try { using (StreamWriter sw = new StreamWriter(request.GetRequestStream(), Encoding.GetEncoding("ISO-8859-1"))) { sw.Write(secuencia.ToString()); } } catch (WebException ex) { string ss = ex.Message; } catch (ProtocolViolationException ex) { string ss = ex.Message; } catch (ObjectDisposedException ex) { string ss = ex.Message; } catch (InvalidOperationException ex) { string ss = ex.Message; } catch (NotSupportedException ex) { string ss = ex.Message; } catch (Exception ex) { //// //// Error en el metodo //// Error del formato del envio string ss = ex.Message; } #endregion #region ENVIA Y SOLICITA RESPUESTA //// Defina donde depositar el resultado string respuestaSii = string.Empty; //// //// Recupere la respuesta del sii using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { respuestaSii = sr.ReadToEnd().Trim(); Console.WriteLine(respuestaSii); } } //// //// Hay respuesta? if (string.IsNullOrEmpty(respuestaSii)) { throw new ArgumentNullException("Respuesta del SII es null"); } //// //// Interprete la respuesta del SII. //// respuestaSii contiene la respuesta del SII acerca del envio en formato XML return(respuestaSii); #endregion }