Example #1
0
        /// <summary>
        /// Devuelve un objeto que indica el estado del proceso y en caso de haber terminado, devuelve adjunta la ruta del XML que contiene la Constancia de Recepción
        /// </summary>
        /// <param name="pstrTicket">Ticket proporcionado por la sunat</param>
        /// <returns>Estado del Ticket, y la ruta de la respuesta si existe</returns>
        public async Task <SunatResponse> GetStatus(string pstrTicket)
        {
            var res = new SunatResponse();

            try
            {
                var service = ServiceHelper.GetService <billService>(_config, _url);

                var result = await service.getStatusAsync(new getStatusRequest(pstrTicket));

                var response = result.status;
                switch (response.statusCode)
                {
                case "0":
                case "99":
                    res.Success = true;
                    using (var xmlCdr = ProcessZip.ExtractFile(response.content))
                        res.ApplicationResponse = ProcessXml.GetAppResponse(xmlCdr);

                    res.ContentZip = response.content;
                    break;

                case "98":
                    res.Success = false;
                    res.Error   = new ErrorResponse {
                        Description = "En Proceso..."
                    };
                    break;

                default:
                    res.Error = new ErrorResponse
                    {
                        Code        = response.statusCode,
                        Description = ProcessXml.GetDescriptionError(response.statusCode),
                    };
                    break;
                }
            }
            catch (FaultException ex)
            {
                res.Error = GetErrorFromFault(ex);
            }
            catch (Exception er)
            {
                res.Error = new ErrorResponse
                {
                    Description = er.Message,
                };
            }
            return(res);
        }
Example #2
0
        private static ErrorResponse GetErrorFromFault(FaultException ex)
        {
            var errMsg = ex.Message;
            var code   = ex.Code?.Name;

            if (string.IsNullOrEmpty(errMsg))
            {
                errMsg = ProcessXml.GetDescriptionError(code);
            }

            return(new ErrorResponse
            {
                Code = code,
                Description = errMsg
            });
        }
Example #3
0
        private static ErrorResponse GetErrorFromFault(FaultException ex)
        {
            var errMsg = ProcessXml.GetDescriptionError(ex.Message);

            if (string.IsNullOrEmpty(errMsg))
            {
                var msg = ex.CreateMessageFault();
                if (msg.HasDetail)
                {
                    var dets = msg.GetReaderAtDetailContents();
                    errMsg = dets.ReadElementString(dets.Name);
                }
            }
            return(new ErrorResponse
            {
                Code = ex.Message,
                Description = errMsg
            });
        }
Example #4
0
        /// <summary>
        /// Recibe la ruta XML con un único formato digital y devuelve la Constancia de Recepción – SUNAT.
        /// </summary>
        /// <param name="pathFile">Ruta del Archivo XML</param>
        /// <param name="content">Contenido del archivo</param>
        /// <returns>La respuesta contenida en el XML de Respuesta de la Sunat, si existe</returns>
        public async Task <SunatResponse> SendDocument(string pathFile, byte[] content)
        {
            var fileToZip     = pathFile + Resources.ExtensionFile;
            var nameOfFileZip = pathFile + Resources.ExtensionZipFile;

            var res = new SunatResponse
            {
                Success = false
            };

            try
            {
                var zipBytes = ProcessZip.CompressFile(fileToZip, content);
                var service  = ServiceHelper.GetService <billService>(_config, _url);
                var result   = await service.sendBillAsync(new sendBillRequest(nameOfFileZip, zipBytes));

                using (var outputXml = ProcessZip.ExtractFile(result.applicationResponse))
                    res = new SunatResponse
                    {
                        Success             = true,
                        ApplicationResponse = ProcessXml.GetAppResponse(outputXml),
                        ContentZip          = result.applicationResponse
                    };
            }
            catch (FaultException ex)
            {
                res.Error = GetErrorFromFault(ex);
            }
            catch (Exception er)
            {
                res.Error = new ErrorResponse
                {
                    Description = er.Message
                };
            }

            return(res);
        }
Example #5
0
        /// <summary>
        ///  Obtiene el estado de un Comprobante
        /// </summary>
        /// <param name="ruc">Es el ruc del emisor del comprobante de pago a consultar</param>
        /// <param name="comprobante">Un Comprobante a consultar</param>
        /// <returns></returns>
        public async Task <StatusCompResponse> GetStatusCdr(string ruc, ComprobanteEletronico comprobante)
        {
            var res = new StatusCompResponse();

            try
            {
                var service = ServiceHelper
                              .GetService <ClientServiceConsult.billService>(_config, Resources.UrlServiceConsult);

                var result = await service.getStatusCdrAsync(
                    new ClientServiceConsult.getStatusCdrRequest(ruc, comprobante.Tipo, comprobante.Serie, comprobante.Numero)
                    );

                var response = result.statusCdr;
                res.Success = true;
                if (response.content != null)
                {
                    using (var xmlCdr = ProcessZip.ExtractFile(response.content))
                        res.ApplicationResponse = ProcessXml.GetAppResponse(xmlCdr);
                }

                res.Code       = response.statusCode;
                res.Message    = response.statusMessage;
                res.ContentZip = response.content;
            }
            catch (FaultException ex)
            {
                res.Error = GetErrorFromFault(ex);
            }
            catch (Exception er)
            {
                res.Error = new ErrorResponse
                {
                    Code = er.Message,
                };
            }
            return(res);
        }
Example #6
0
 public void UpdateXml(string oldName)
 {
     ProcessXml = ProcessXml.Replace(oldName, Name);
 }