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