微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 c# 向 SII 提交问题 EnvioDTE

如何解决使用 c# 向 SII 提交问题 EnvioDTE

我正在使用 C# 将 Envio DTE 提交给智利的 SII 打包。

现在我得到一个 html 响应,并得到一个这个

“HA OCURRIDO UN ERROR EN EL UPLOAD DEL ARCIVO DE DOCUMENTOS TRIBUTARIOS ELECTRONICOS。”

我认为参数传递不正确。参数 Name 在他们的文档中是正确的。此请求应模拟网络浏览器。

如果有人可以帮助我,我真的很感激。 代码

       public string SendEnvioDte(string fileName,string token,Documento documento,string userRut)
       {
            string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
            
            NameValueCollection nvc = new NameValueCollection();
            var url = "https://maullin.sii.cl/cgi_dte/UPL/DTEUpload";
            var RutEmisor = documento.Encabezado.Emisor.RUTEmisor;
            var RutReceptor = documento.Encabezado.Receptor.RUTRecep;
            var rutSender = userRut.Substring(0,8);
            var senderDv = userRut.Substring(8);
            var rutCmopany = RutEmisor.Substring(0,8);
            var rutCompnaydv = RutEmisor.Substring(9);
            nvc.Add("rutSender",rutSender);
            nvc.Add("dvSender",senderDv);
            nvc.Add("rutCompany",rutCmopany);
            nvc.Add("dvCompany",rutCompnaydv);

       
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "multipart/form-data; boundary=" +
                                    boundary;
            request.Method = "POST";
            request.KeepAlive = true;
            request.Headers.Add("POST","/cgi_dte/UPL/DTEUpload HTTP/1.0");
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.94 Safari/537.36";
            request.Accept = "image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/ms-excel,application/msword,*/*" ;
            request.Headers.Add("Accept-Encoding","gzip,deflate");
            request.Headers.Add("Cache-Control","no-cache");
            request.Headers.Add("Cookie","TOKEN=" + token );
            request.Headers.Add("Accept-Language","es-cl" );
            request.Headers.Add("Cache-Control","no-cache");
            request.Headers.Add("Referer","http://empresaabc.cl/test.html");
            Stream memStream = new System.IO.MemoryStream();

            var boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
                                                                    boundary + "\r\n");
            var endBoundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
                                                                        boundary + "--");


            string formdataTemplate = "\r\n--" + boundary +
                                        "\r\nContent-disposition: form-data; name=\"{0}\"\r\n\r\n{1}";

           
            foreach (string key in nvc.Keys)
            {
                string formitem = string.Format(formdataTemplate,key,nvc[key]);
                byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
                memStream.Write(formitembytes,formitembytes.Length);
            }
           

            string headerTemplate = 
                "Content-disposition: form-data; name=\"{0}\"; filename=\"{1};\"\r\n" +
                "Content-Type: text/xml \r\n\r\n";

         
            memStream.Write(boundarybytes,boundarybytes.Length);
            var header = string.Format(headerTemplate,"file","Enivo_DTE_test.xml");
            var headerbytes = System.Text.Encoding.UTF8.GetBytes(header);

            memStream.Write(headerbytes,headerbytes.Length);

            using (var fileStream = new FileStream(fileName,FileMode.Open,FileAccess.Read))
            {
                var buffer = new byte[1024];
                var bytesRead = 0;
                while ((bytesRead = fileStream.Read(buffer,buffer.Length)) != 0)
                {
                    memStream.Write(buffer,bytesRead);
                }
            }
          

            memStream.Write(endBoundaryBytes,endBoundaryBytes.Length);
            request.ContentLength = memStream.Length;

            using (Stream requestStream = request.GetRequestStream())
            {
                memStream.Position = 0;
                byte[] tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer,tempBuffer.Length);
                memStream.Close();
                requestStream.Write(tempBuffer,tempBuffer.Length);
            }

            using (var response = request.GetResponse())
            {
                Stream stream2 = response.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);
            var reuslt = reader2.ReadToEnd();
                return reuslt;
            }
       }

解决方法

应该是tcp/ip socket通信,加密数据,模拟浏览器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。