Closed geraldvaras closed 3 years ago
Cogratulations! You have just created your first issue. Thanks for contributting to this project! We will answer you as soon as possible' first issue
@geraldvaras No veo ningun problema en el método que adjuntaste, excepto la linea assertEquals(statusResponse.getStatusCode(), estado);
ya que estas comparando dos tipos de datos distintos. Acá adjunto tu código con algunas modificaciones para hacer que funcione correctamente:
@Test
public void testConsultToSunat () throws IOException {
assertConsultToSunat("myRUC", Catalogo1.FACTURA.getCode(), "F001", 20);
}
public void assertConsultToSunat(String ruc, String documentType, String serie, Integer numero) throws IOException {
ServiceConfig serviceConfig = new ServiceConfig.Builder()
.url("https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService")
.username(WEBSERVICE_USERNAME)
.password(WEBSERVICE_PASSWORD)
.build();
BillConsultModel consulta = new BillConsultModel.Builder()
.ruc(ruc)
.serie(serie)
.numero(numero)
.tipo(documentType)
.build();
// Fetch data from SUNAT
service.sunat.gob.pe.billconsultservice.StatusResponse statusResponse = BillConsultServiceManager.getStatusCdr(consulta, serviceConfig);
// Verify data Invoice exists in SUNAT
assertEquals(statusResponse.getStatusCode(), "0004");
assertEquals(statusResponse.getStatusMessage(), "La constancia existe");
assertNotNull(statusResponse.getContent());
// Write the CRD to your filesystem
Path path = Paths.get("/home/guest/myCrd.zip");
Files.write(path, statusResponse.getContent());
}
Los puntos en los que debes de tener cuidado:
String documentType
verifica que su valor es el correcto. Los posibles valores se encuentran en el Catalogo1. Te recomiendo usar el ENUM disponible en la libreria, tal y como se muestra en el ejemplo.Como extra, acá tienes el código de ejemplo funcionando al 100% sin ninguna clase de error. Solo copia y pega el ejemplo que te compartí. Me comestas si solucionaste tu problema.
Recuerda que este es un proyecto Open Source y puedes colaborar dándole una estrella al proyecto, sugiriendo mejoras, reportando errores, etc.
@carlosthe19916 Gracias por la pronta respuesta.
Te comento hice las modificaciones que me indicaste en el método, sin embargo sigo obteniendo el mismo error. (Adjunto screen)
Me puse a depurar el soap request con SoapUI y me acabo de percatar que necesita incluir los parámetros con la etiqueta <statusCdr>
para que la llamada pueda funcionar, adicional a esto el parámetro de numero de comprobante lo he tenido que completar con 0s para que me devuelva el cdr caso contrario me indica que el ticket no existe.
De antemano te agradezco la respuesta y por tu valioso tiempo.
@geraldvaras el ejemplo que adjuntas me parece muy interesante ya que estas consultando una Guia de Remisión y no una boleta/factura/etc. como en el ejemplo que yo adjunté.
Una pregunta que URL usas para consultar "Guias de remisión", es https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService? u otra?
Si hay algo que mejorar me gustaria mejorar la libreria para poder cubrir todos los casos, incluyendo el tuyo.
@carlosthe19916 en este caso mi proveedor (bizlinks) usa una única url para para todas las operaciones relacionas a la facturación electrónica. https://osetesting.bizlinks.com.pe/ol-ti-itcpe/billService?wsdl. He estado probando la librería para las demás operaciones y funcionan a la perfección, y es de gran ayuda. Espero poder colaborar con la misma. Salu2,
@geraldvaras hice un par de pruebas y la libreria funciona correctamente usando:
Al parecer tu proveedor no funciona exactamente como la SUNAT lo hace.
Si efectivamente no funciona como SUNAT lo hace, Que me recomendarías para este caso. De antemano gracias por tu respuesta.
@geraldvaras
La primera recomendación es ponerte en contacto con tu proveedor y reportar este error ya que las OSE deben de funcionar tal y como la SUNAT lo hace. Ellos deben de corregir este error.
Lo segundo que puedo recomendar es que las consultas a BillConsultServiceManager.getStatusCDR
los hagas directamente a la SUNAT y no a tu proveedor. De esta forma envías tus comprobantes a traves de tu proveedor pero cuando desees verificar el CDR de un comprobante lo hagas directamente de la SUNAT. Al final tu proveedor debe de enviar tus comprobantes a la SUNAT por lo que debería de funcionar.
Estoy intentando ejecutar el metodo getStatusCDR de la clase BillConsultServiceManager pero obtengo una excepcion SOAPFaultException
El metodo que estoy empleando para ejecutarlo es el siguiente:
public void assertConsultToSunat(String ruc, String documentType , String serie, Integer numero, BillServiceModel.Status estado) throws Exception{ ServiceConfig serviceConfig = new ServiceConfig.Builder() .url(WEBSERVICE_URL) .username(WEBSERVICE_USERNAME) .password(WEBSERVICE_PASSWORD) .build(); BillConsultModel consulta = new BillConsultModel.Builder() .ruc(ruc) .serie(serie) .numero(numero) .tipo(documentType) .build(); StatusResponse statusResponse = BillConsultServiceManager.getStatusCdr(consulta, serviceConfig); assertEquals(statusResponse.getStatusCode(),estado); }
Lo cual me deberia devolver una instancia de la clase StatusResponse sin embargo obtengo el error: ` javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"rucComprobante"). Expected elements are <{}statusCdr>
Caused by: org.apache.cxf.binding.soap.SoapFault: Unmarshalling Error: unexpected element (uri:"", local:"rucComprobante"). Expected elements are <{}statusCdr> `
Adjunto el soap response del servidor
ID: 1 Response-Code: 500 Encoding: UTF-8 Content-Type: text/xml;charset=UTF-8 Headers: {Content-Length=[308], content-type=[text/xml;charset=UTF-8], Date=[Mon, 21 Sep 2020 20:51:39 GMT], Server=[JBoss-EAP/7], X-Powered-By=[Undertow/1]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Unmarshalling Error: unexpected element (uri:"", local:"rucComprobante"). Expected elements are <{}statusCdr> </faultstring></soap:Fault></soap:Body></soap:Envelope>