public async Task <IActionResult> Put(string organization, int id, [FromBody] DocumentoRetencion model) { try { return(Ok(await _service.Put(organization, model))); } catch (Exception ex) { throw new SuperFactException(ex.Message, ex.InnerException); } }
public static EnviarDocumentoRequest ToSendRetentionDocument(DocumentoRetencion model, ParametroEmpresaModel parametro, FirmadoResponse responseFirma) { EnviarDocumentoRequest request = new EnviarDocumentoRequest(); request.Ruc = model.Emisor.NroDocumento; request.UsuarioSol = parametro.UsuarioSol; request.ClaveSol = parametro.ClaveSol; request.EndPointUrl = ""; request.IdDocumento = model.IdDocumento; request.TipoDocumento = "20"; request.TramaXmlFirmado = responseFirma.TramaXmlFirmado; return(request); }
public async Task <IActionResult> Post(string organization, [FromBody] DocumentoRetencion model) { EnviarDocumentoResponse response = new EnviarDocumentoResponse(); try { response = await _service.Generar(organization, model); response.Exito = true; return(Ok(response)); } catch (Exception ex) { throw new SuperFactException(ex.Message, ex.InnerException); } }
public async Task<EnviarDocumentoResponse> Generar(string organization, DocumentoRetencion model) { EmpresaModel empresa = await _repositoryempresa.Get(organization); model.Emisor = HelperTo.ToEmisor(empresa); IEstructuraXml invoice = _documentoXml.Generar(model); string XmlSinFirma = await _serializador.GenerarXml(invoice); CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization); FirmadoRequest firmado = HelperTo.ToSignedModel(certificado, XmlSinFirma, false); FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado); ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa); File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); EnviarDocumentoRequest request = HelperTo.ToSendRetentionDocument(model, parametro, responseFirma); EnviarDocumentoResponse response = new EnviarDocumentoResponse(); var nombreArchivo = $"{request.Ruc}-{request.TipoDocumento}-{request.IdDocumento}"; var tramaZip = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo); _servicioSunatDocumentos.Inicializar(new ParametrosConexion { Ruc = request.Ruc, UserName = request.UsuarioSol, Password = request.ClaveSol, EndPointUrl = request.EndPointUrl }); RespuestaSincrono resultado = _servicioSunatDocumentos.EnviarDocumento(new DocumentoSunat { TramaXml = tramaZip, NombreArchivo = $"{nombreArchivo}.zip" }); if (!resultado.Exito) { response.Exito = false; response.MensajeError = resultado.MensajeError; } else { response = await _serializador.GenerarDocumentoRespuesta(resultado.ConstanciaDeRecepcion); File.WriteAllBytes("cdr_retention.zip", Convert.FromBase64String(response.TramaZipCdr)); // Quitamos la R y la extensión devueltas por el Servicio. response.NombreArchivo = nombreArchivo; } //guardar la respuesta return response; }
public async Task <DocumentoResponse> Post([FromBody] DocumentoRetencion documento) { var response = new DocumentoResponse(); try { var invoice = _documentoXml.Generar(documento); response.TramaXmlSinFirma = await _serializador.GenerarXml(invoice); response.Exito = true; } catch (Exception ex) { response.MensajeError = ex.Message; response.Pila = ex.StackTrace; response.Exito = false; } return(response); }
private static void CrearDocumentoRetencion() { try { Console.WriteLine("Ejemplo de Retención"); var documento = new DocumentoRetencion { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A.", Ubigeo = "150101", Direccion = "Av. Argentina 2833", Urbanizacion = "-", Departamento = "CALLAO", Provincia = "CALLAO", Distrito = "CALLAO" }, IdDocumento = "R001-123", FechaEmision = DateTime.Today.ToString(FormatoFecha), Moneda = "PEN", RegimenRetencion = "01", TasaRetencion = 3, ImporteTotalRetenido = 300, ImporteTotalPagado = 10000, Observaciones = "Emision de Facturas del periodo Dic. 2016", DocumentosRelacionados = new List<ItemRetencion> { new ItemRetencion { NroDocumento = "E001-457", TipoDocumento = "01", MonedaDocumentoRelacionado = "USD", FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha), ImporteTotal = 10000, FechaPago = DateTime.Today.ToString(FormatoFecha), NumeroPago = 153, ImporteSinRetencion = 9700, ImporteRetenido = 300, FechaRetencion = DateTime.Today.ToString(FormatoFecha), ImporteTotalNeto = 10000, TipoCambio = 3.41m, FechaTipoCambio = DateTime.Today.ToString(FormatoFecha) } } }; Console.WriteLine("Generando XML...."); var documentoResponse = RestHelper<DocumentoRetencion, DocumentoResponse>.Execute("GenerarRetencion", documento); if (!documentoResponse.Exito) { throw new InvalidOperationException(documentoResponse.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado); if (!responseFirma.Exito) { throw new InvalidOperationException(responseFirma.MensajeError); } File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado)); Console.WriteLine("Enviando Retención a SUNAT...."); var enviarDocumentoRequest = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = UrlOtroCpe, IdDocumento = documento.IdDocumento, TipoDocumento = "20", TramaXmlFirmado = responseFirma.TramaXmlFirmado }; var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", enviarDocumentoRequest); if (!enviarDocumentoResponse.Exito) { throw new InvalidOperationException(enviarDocumentoResponse.MensajeError); } Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta); File.WriteAllBytes("retencioncdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr)); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
private static void CrearDocumentoRetencion() { try { Console.WriteLine("Ejemplo de Retención"); var documento = new DocumentoRetencion { Emisor = CrearEmisor(), Receptor = new Contribuyente { NroDocumento = "20100039207", TipoDocumento = "6", NombreLegal = "RANSA COMERCIAL S.A.", Ubigeo = "150101", Direccion = "Av. Argentina 2833", Urbanizacion = "-", Departamento = "CALLAO", Provincia = "CALLAO", Distrito = "CALLAO" }, IdDocumento = "R001-123", FechaEmision = DateTime.Today.ToString(FormatoFecha), Moneda = "PEN", RegimenRetencion = "01", TasaRetencion = 3, ImporteTotalRetenido = 300, ImporteTotalPagado = 10000, Observaciones = "Emision de Facturas del periodo Dic. 2016", DocumentosRelacionados = new List <ItemRetencion> { new ItemRetencion { NroDocumento = "E001-457", TipoDocumento = "01", MonedaDocumentoRelacionado = "USD", FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha), ImporteTotal = 10000, FechaPago = DateTime.Today.ToString(FormatoFecha), NumeroPago = 153, ImporteSinRetencion = 9700, ImporteRetenido = 300, FechaRetencion = DateTime.Today.ToString(FormatoFecha), ImporteTotalNeto = 10000, TipoCambio = 3.41m, FechaTipoCambio = DateTime.Today.ToString(FormatoFecha) } } }; Console.WriteLine("Generando XML...."); var client = new RestClient(BaseUrl); var requestRetencion = new RestRequest("GenerarRetencion", Method.POST) { RequestFormat = DataFormat.Json }; requestRetencion.AddBody(documento); var documentoResponse = client.Execute <DocumentoResponse>(requestRetencion); if (!documentoResponse.Data.Exito) { throw new ApplicationException(documentoResponse.Data.MensajeError); } Console.WriteLine("Firmando XML..."); // Firmado del Documento. var firmado = new FirmadoRequest { TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma, CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")), PasswordCertificado = string.Empty, UnSoloNodoExtension = true }; var requestFirma = new RestRequest("Firmar", Method.POST) { RequestFormat = DataFormat.Json }; requestFirma.AddBody(firmado); var responseFirma = client.Execute <FirmadoResponse>(requestFirma); if (!responseFirma.Data.Exito) { throw new ApplicationException(responseFirma.Data.MensajeError); } Console.WriteLine("Codigo Hash: {0}", responseFirma.Data.ResumenFirma); File.WriteAllBytes("retencion.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado)); Console.WriteLine("Enviando Retención a SUNAT...."); var sendBill = new EnviarDocumentoRequest { Ruc = documento.Emisor.NroDocumento, UsuarioSol = "MODDATOS", ClaveSol = "MODDATOS", EndPointUrl = "https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService", IdDocumento = documento.IdDocumento, TipoDocumento = "20", TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado }; var requestSendBill = new RestRequest("EnviarDocumento", Method.POST) { RequestFormat = DataFormat.Json }; requestSendBill.AddBody(sendBill); var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill); if (!responseSendBill.Data.Exito) { throw new ApplicationException(responseSendBill.Data.MensajeError); } Console.WriteLine("Respuesta de SUNAT:"); Console.WriteLine(responseSendBill.Data.MensajeRespuesta); File.WriteAllBytes("cdr.zip", Convert.FromBase64String(responseSendBill.Data.TramaZipCdr)); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadLine(); } }
public async Task<DocumentoRetencion> Put(string organization, DocumentoRetencion model) { throw new NotImplementedException(); }