Пример #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);
        }
Пример #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
            });
        }
Пример #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
            });
        }