EDICOM CFDi WebService - Guía de Usuario

March 26, 2018 | Author: juliancab | Category: Soap, Password, Zip (File Format), Uniform Resource Locator, Computer File


Comments



Description

Web Service CFDiGuía de Usuario WSCFDI EDICOM Título del documento: WSCFDI EDICOM Nombre del fichero: ES WebService CFDi Guía de usuario.odt Versión: 1.9 Estado: REVISADO Fecha: 04/12/2014 Autor: Oscar Albert Arcas Revisión, Aprobación Revisado por: Oscar Albert Arcas Fecha: 19/10/2011 Aprobado por: Francisco Belda Escamilla Fecha: 19/10/2011 Historial de cambios Versión Fecha Descripción de la acción Páginas 1.0 21/01/2011 Versión inicial WSCFDi Todas 1.1 18/02/2011 Corregido referencias equivocas a CFD en al 4, 5,8.,15,18 descripción de las funciones. 1.2 17/03/2011 El ws permite ahora enviar ZIP o XML en el parámetro file 5, 8, 15, 18 1.3 12/07/2011 Corrección. Se modifica el ejemplo de la respuesta SOAP de getTimbreCfdi 9,10 1.4 10/08/2011 Nuevas funciones getUUID y getUUIDTest Corrección. Se corrigen los códigos de error de la cancelación de comprobantes 2, 6, 23-28, 30 1.5 19/10/2011 Nuevas funciones CancelaCFDISgined, getCFDIAck y getCFDIFromUUID. se modifica la WSDL incluida en el documento 27-32 1.6 08/10/2013 Nuevas consideraciones de las funciones getCfdiTest, getTimbreCfdiTest, getUUID y getUUIDTest 18, 21, 24 y 26 1.7 11/02/2014 Nuevas consideraciones de funcionamiento y códigos de errores de las funciones cancelaCfdi y cancelaCfdiSigned 14, 17, 18, 32, 34, 35 y 36 1.8 04/12/2014 Servicio de timbrado de comprobantes de retenciones electrónicas 6, 37-49, 52-69 1.9 10/02/2015 Servicio de cancelación de comprobantes de 6, 49-58, 61-81 retenciones electrónicas WSCFDI EDICOM | | 2 WSCFDI EDICOM Índice de contenido 1.webservice CFDi de EDICOM................................................................................................................................................... 6 1.1.Introducción ...............................................................................................................................................................................................6 URL de acceso al servicio..........................................................................................................................................................................6 Funciones Del Webservice CFDi de Edicom..............................................................................................................................................6 2.Funciones................................................................................................................................................................................ 8 2.1.Generación del CFDi .................................................................................................................................................................................8 Llamada:...................................................................................................................................................................................................8 Parámetros:..............................................................................................................................................................................................8 Respuesta:.................................................................................................................................................................................................8 Ejemplos...................................................................................................................................................................................................9 2.2.Generación del timbre del CFDi ..........................................................................................................................................................11 Llamada:.................................................................................................................................................................................................11 Parámetros:............................................................................................................................................................................................11 Respuesta:..............................................................................................................................................................................................11 Ejemplos.................................................................................................................................................................................................12 2.3.Cancelar CFDi ..........................................................................................................................................................................................13 Llamada:.................................................................................................................................................................................................13 Parámetros:............................................................................................................................................................................................14 Respuesta:..............................................................................................................................................................................................14 Ejemplos.................................................................................................................................................................................................14 Consideraciones importantes.................................................................................................................................................................16 2.4.Cambiar password de acceso al servicio de CFDi ...........................................................................................................................18 Llamada:.................................................................................................................................................................................................18 Parámetros:............................................................................................................................................................................................18 Respuesta:..............................................................................................................................................................................................18 Ejemplos.................................................................................................................................................................................................18 2.5.Generación del CFDi en TEST ...............................................................................................................................................................20 Llamada:.................................................................................................................................................................................................20 Parámetros:............................................................................................................................................................................................20 Respuesta:..............................................................................................................................................................................................21 Ejemplos.................................................................................................................................................................................................21 2.6.Generación del timbre del CFDi en TEST ..........................................................................................................................................23 Llamada:.................................................................................................................................................................................................23 Parámetros:............................................................................................................................................................................................23 Respuesta:..............................................................................................................................................................................................23 Ejemplos.................................................................................................................................................................................................24 2.7.Comprobación del timbrado CFDi ......................................................................................................................................................25 Llamada:.................................................................................................................................................................................................26 Parámetros:............................................................................................................................................................................................26 Respuesta:..............................................................................................................................................................................................26 Ejemplos.................................................................................................................................................................................................26 2.8.Comprobación del timbrado CFDi en test .........................................................................................................................................28 Llamada:.................................................................................................................................................................................................28 Parámetros:............................................................................................................................................................................................28 WSCFDI EDICOM | | 3 WSCFDI EDICOM Respuesta:..............................................................................................................................................................................................28 Ejemplos.................................................................................................................................................................................................29 2.9.Cancelar CFDi Firmado ..........................................................................................................................................................................30 Llamada:.................................................................................................................................................................................................31 Parámetros:............................................................................................................................................................................................31 Respuesta:..............................................................................................................................................................................................31 Ejemplos.................................................................................................................................................................................................31 Consideraciones importantes.................................................................................................................................................................33 2.10.Obtención del ACK(acuse) del timbrado .........................................................................................................................................35 Llamada:.................................................................................................................................................................................................35 Parámetros:............................................................................................................................................................................................35 Respuesta:..............................................................................................................................................................................................35 Ejemplos.................................................................................................................................................................................................35 2.11.Obtención del timbre a partir del UUID. ........................................................................................................................................37 Llamada:.................................................................................................................................................................................................37 Parámetros:............................................................................................................................................................................................37 Respuesta:..............................................................................................................................................................................................37 Ejemplos.................................................................................................................................................................................................38 2.12.Generación del CFDi de retenciones electrónicas ........................................................................................................................39 Llamada:.................................................................................................................................................................................................39 Parámetros:............................................................................................................................................................................................39 Respuesta:..............................................................................................................................................................................................40 Ejemplos.................................................................................................................................................................................................40 2.13.Generación del timbre del CFDi de retenciones electrónicas ....................................................................................................43 Llamada:.................................................................................................................................................................................................43 Parámetros:............................................................................................................................................................................................43 Respuesta:..............................................................................................................................................................................................43 Ejemplos.................................................................................................................................................................................................44 2.14.Generación del CFDi de retenciones electrónicas en TEST ........................................................................................................45 Llamada:.................................................................................................................................................................................................46 Parámetros:............................................................................................................................................................................................46 Respuesta:..............................................................................................................................................................................................46 Ejemplos.................................................................................................................................................................................................46 2.15.Generación del timbre del CFDi de retenciones electrónicas en TEST ....................................................................................48 Llamada:.................................................................................................................................................................................................49 Parámetros:............................................................................................................................................................................................49 Respuesta:..............................................................................................................................................................................................49 Ejemplos.................................................................................................................................................................................................49 2.16.Cancelar comprobantes de retenciones electrónicas ..................................................................................................................51 Llamada:.................................................................................................................................................................................................51 Parámetros:............................................................................................................................................................................................51 Respuesta:..............................................................................................................................................................................................52 Ejemplos.................................................................................................................................................................................................52 Consideraciones importantes.................................................................................................................................................................54 2.17.Cancelar comprobantes de retenciones electrónicas Firmado .................................................................................................56 Llamada:.................................................................................................................................................................................................56 WSCFDI EDICOM | | 4 ..........................................................................................................................................................................................................................61 Códigos definidos por Edicom..................................................................57 Consideraciones importantes....................Introducción ............................Lista de Códigos de Error.....................................................................................................................................................WSCFDI EDICOM Parámetros:............................................................................................WSDL WEBSERVICE CFDi ..................................................................................................................................................................................................................................... 61 3................................................................................................................................................................................................................................................................................63 WSCFDI EDICOM | | 5 ........................................................................................................................................1...............62 Ejemplo de una respuesta de error...............................................................................................62 4............................................................. 63 4..............................................................................................61 Códigos definidos por el SAT....59 3........................................................................................................................................................................................................................................................Anexo: WSDL...............................................1................................................................................56 Ejemplos..........................56 Respuesta:........ • Su Usuario de acceso al servicio (coincide con su RFC) • Su Password de acceso al servicio (único para él) Este documento ofrece la WSDL del servicio y la información necesaria para que para interactuar con el servicio CFDi y desarrollar aplicaciones compatibles con el servicio CFDi. publicada en el Diario Oficial de la Federación (DOF) el 11 de Junio de 2010. WEBSERVICE CFDI DE EDICOM 1. conforme a los nuevos requerimientos especificados para realiza todas las validaciones de los CFDi exigidas por el SAT. en concreto el Anexo 20 http://www.gob. INTRODUCCIÓN CFDi es la plataforma webservice de EDICOM para generar los Comprobantes Fiscales Digitales a través de Internet. FUNCIONES DEL WEBSERVICE CFDI DE EDICOM función Descripción getCfdi Generación de CFDI. La elaboración de los webservices que aquí se presentan está basada en las siguiente normas oficiales : • [1] Resolución Miscelánea Fiscal para 2010. Permite realizar el timbrado del comprobante firmado por el 1. Permite realizar el timbrado del comprobante firmado por el cliente en modo de prueba y devuelve el timbre del comprobante timbrado. 1.0 WSCFDI EDICOM | 1. 1.0 getUUID Comprobación de la generación de timbres CFDI. getTimbreCfdi Generación de timbre de CFDI. URL DE ACCESO AL SERVICIO La URL de acceso al webservice CFDi de edicom es la siguiente: https://cfdiws. se utiliza un canal de comunicaciones seguro con el Proveedor de Servicios de Emisión de CFDI (PSECFDI).html. Esta plataforma acredita a EDICOM como Proveedor Autorizado de CFD por el Servicio de Administración Tributaria. 1. convirtiéndose así en Proveedor de Servicios de Expedición de Comprobante Fiscal Digital a través de Internet (PSECFDI).webservice CFDi de EDICOM | 6 ver. Permite al usuario cambiar el password de acceso al servicio CFDi 1.0 getTimbreCfdiTest Generación de timbre de CFDI en test.0 changePassword Cambio de password de acceso al Servicio CFDI. Permite comprobar si un 1.mx/sitio_internet/informacion_fiscal/legislacion/52_18801.0 cliente y devuelve el comprobante timbrado. y sus posteriores modificaciones a la resolución y anexos.0 getCfdiTest Generación de CFDI en test. Cuando un cliente contrata el servicio de Expedición de CFDis de Edicom obtiene: • La URL del servicio y la documentación necesaria para ser utilizada.1. .0 cancelaCFDi Cancelación de CFDI.com/EdiwinWS/services/CFDi?wsdl La implementación del servicio se realiza a través del protocolo https.sedeb2b. Permite realizar el timbrado del comprobante firmado por el cliente en modo de prueba y devuelve el comprobante timbrado.sat. De esta forma. Permite realizar el timbrado del comprobante firmado por el cliente y devuelve el timbre del comprobante timbrado.WSCFDI EDICOM 1. Permite cancelar comprobantes timbrados. 1. 1. 1. 1. getUUIDTest Comprobación de la generación de timbres CFDI en test.0 sSigned retenciones electrónicas timbrados a partir de la petición de cancelación del cliente previamente firmada. 1. Permite obtener un duplicado de los CFDi generados anteriormente. Permite realizar el timbrado del t comprobante de retenciones electrónicas firmado por el cliente en modo de prueba y devuelve el comprobante de retenciones electrónicas timbrado. Permite obtener el acuse del timbrado del SAT 1. 1.0 cancelaCFDiRetencione Cancelación de Retenciones de CFDI.webservice CFDi de EDICOM | 7 . 1.0 getTimbreCfdiRetencio Generación de timbre de Retenciones de CFDI en test. Permite realizar el timbrado del nes comprobante de retenciones electrónicas firmado por el cliente y devuelve el timbre del comprobante timbrado. WSCFDI EDICOM | 1.0 getTimbreCfdiRetencio Generación de timbre de Retenciones de CFDI.0 cancelaCfdiRetencione Cancelación de Retenciones de CFDI firmada.0 getCfdiFromUUID Obtención del CFDi timbrado. Permite comprobar si un comprobante ha sido timbrado en modo de prueba de nuestro sistema. Permite cancelar comprobantes de 1.0 getCfdiAck Obtención de Ack de timbrado. Permite cancelar comprobantes de s retenciones electrónicas timbrados.0 getCfdiRetenciones Generación de Retenciones de CFDI. Permite realizar el nesTest timbrado del comprobante de retenciones electrónicas firmado por el cliente en modo de prueba y devuelve el timbre del comprobante de retenciones electrónicas timbrado. Permite realizar el timbrado del comprobante de retenciones electrónicas firmado por el cliente y devuelve el comprobante timbrado.0 cancelaCfdiSigned Cancelación de CFDI firmada. 1.WSCFDI EDICOM comprobante ha sido timbrado en nuestro sistema. 1. Permite cancelar comprobantes timbrados a partir de la petición de cancelación del cliente previamente firmada.0 getCfdiRetencionesTes Generación de Retenciones de CFDi en test. WSCFDI EDICOM 2. FUNCIONES 2.1. GENERACIÓN DEL CFDI getCfdi Permite realizar el timbrado del comprobante firmado por el cliente y devuelve el comprobante timbrado. Para poder implementar la llamada, el usuario debe autentificarse como usuario del servicio de CFDi y especificar cuales son los datos del comprobante para poder generar así la firma digital. En cada llamada se puede generar un CFDI. LLAMADA: public byte[] getCfdi(String user, String password, byte[] file); PARÁMETROS: • user: Usuario que va realizar la conexión. • password: Contraseña del usuario que va realizar la conexión. • file: Fichero con los datos del comprobante firmados por el usuario. Se trata del XML con la información del comprobante, según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. Puede enviarse también comprimido en en formato ZIP. Dentro del mensaje SOAP, se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. RESPUESTA: El comprobante que se enviará al webservice es un XML que contiene la información de la factura, e integra el certificado del contribuyente expedido por el SAT, empleado en la construcción del “Sello Digital del Comprobante” , según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1] . Edicom, como PSECFDI recibe a través del webservice el Comprobante del contribuyente para realizar todas las validaciones exigidas por el SAT y someterlo posteriormente al proceso de certificación final. Validaciones que contiene el servicio: • Verifica que el período de tiempo entre la fecha de envío del documento y la de recepción del documento para su certificación no exceda de 72 horas. • Verifica igualmente que el documento no haya sido certificado previamente, que el Certificado de Sello Digital (CSD) del contribuyente esté vigente en la fecha de generación del comprobante, y que efectivamente corresponda dicho CSD al contribuyente que emite el documento. • Finalmente constata que la estructura del documento cumple con las especificaciones técnicas conforme a la Resolución Miscelánea Fiscal para 2010 y sucesivas modificaciones. Si el CFDI cumple con las validaciones especificadas anteriormente, se dará respuesta al contribuyente incorporando un complemento sobre el documento según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. Este complemento incluye el número de folio asignado por el SAT, fecha y hora de certificación y sello digital del CFDI. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI, y el sello del SAT. • Respuesta satisfactoria: En caso de que se haya realizado la firma digital, el servicio devolverá un documento comprimido en formato ZIP con el CFDI con todos los datos generados. WSCFDI EDICOM | 2.Funciones | 8 WSCFDI EDICOM • Respuesta con errores: En caso de que haya algún error en el proceso de firma digital del CFDI, devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema, o que no se haya enviado el fichero ZIP con el CFDI, o que el CFDI enviado no es correcto sintácticamente según el esquema del SAT. EJEMPLOS Código del cliente: public byte[] getCfdi(String user, String pass, byte[] file) { try { cfdiService.getCfdi(user, pass, file); } catch (CFDiException CFDIe) { CFDIe.printStackTrace(); System.out.println("CFDiExcepcion: " + CFDIe.getText()); } catch (RemoteException Re) { Re.printStackTrace(); System.out.println("RemoteExcepcion: " + Re.toString()); } catch (Exception e) { e.printStackTrace(); System.out.println("Exception: " + e.toString()); } } Petición SOAP: <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cfdi="http://cfdi.service.ediwinws.edicom.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdi> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [...] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getCfdi> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales. El código del fichero en base64 ha sido resumido [...] Respuesta SOAP: El siguiente ejemplo es una respuesta de un envío de CFDI satisfactorio. <?xml version="1.0" encoding="UTF-8"?> WSCFDI EDICOM | 2.Funciones | 9 WSCFDI EDICOM <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiResponse xmlns="http://cfdi.service.ediwinws.edicom.com"> <getCfdiReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9GaXJtYV9PS18xLlhNTN 1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh9zgdR91fdq7ngc4Qj bHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/23gle2CQ [...] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getCfdiReturn> </getCfdiResponse> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales. El código del fichero en base64 ha sido resumido [...] El siguiente ejemplo es una respuesta de error. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>com.edicom.ediwinws.service.cfdi.CFDiException: El documento &lt;SE3> no está codificado en UTF-8</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.service.ediwinws.edicom.com"> <ns1:cod>301</ns1:cod> <ns1:text>El documento &lt;referencia> no está codificado en UTF8</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">cfdiws.sedeb2b.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: En este ejemplo concreto se presenta un error "301" indicando que el documento no está codificado en UTF-8. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. WSCFDI EDICOM | 2.Funciones | 10 WSCFDI EDICOM 2.2. GENERACIÓN DEL TIMBRE DEL CFDI getTimbreCfdi Permite realizar el timbrado del comprobante firmado por el cliente y devuelve el timbre del comprobante timbrado. Para poder implementar la llamada, el usuario debe autentificarse como usuario del servicio de CFDi y especificar cuales son los datos del comprobante para poder generar así la firma digital. En cada llamada se puede generar un CFDI. LLAMADA: public byte[] getTimbreCfdi(String user, String password, byte[] file); PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante firmados por el usuario. Se trata del XML con la información del comprobante, según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. Puede enviarse también comprimido en en formato ZIP. Dentro del mensaje SOAP, se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. RESPUESTA: El comprobante que se enviará al webservice es un XML que contiene la información de la factura, e integra el certificado del contribuyente expedido por el SAT, empleado en la construcción del “Sello Digital del Comprobante” según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1] . Edicom, como PSECFDI recibe a través del webservice el Comprobante del contribuyente para realizar todas las validaciones exigidas por el SAT y someterlo posteriormente al proceso de certificación final. Validaciones que contiene el servicio: • Verifica que el período de tiempo entre la fecha de envío del documento y la de recepción del documento para su certificación no exceda de 72 horas. • Verifica igualmente que el documento no haya sido certificado previamente, que el Certificado de Sello Digital (CSD) del contribuyente esté vigente en la fecha de generación del comprobante, y que efectivamente corresponda dicho CSD al contribuyente que emite el documento. • Finalmente constata que la estructura del documento cumple con las especificaciones técnicas conforme a la Resolución Miscelánea Fiscal para 2010 y sucesivas modificaciones. Si el CFDI cumple con las validaciones especificadas anteriormente, se dará respuesta al contribuyente con el timbre de la firma digital según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. Este timbre incluye el número de folio asignado por el SAT, fecha y hora de certificación y sello digital del CFDI. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI, y el sello del SAT. • Respuesta satisfactoria: En caso de que se haya realizado la firma digital, el servicio devolverá un documento comprimido en formato ZIP con el timbre del CFDI firmado con todos los datos generados. • Respuesta con errores: En caso de que haya algún error en el proceso de firma digital del CFDI, devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya WSCFDI EDICOM | 2.Funciones | 11 xmlsoap.printStackTrace(). System.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.Funciones | 12 .] Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de timbre satisfactoria. o que el CFDI enviado no es correcto sintácticamente según el esquema del SAT.. El código del fichero en base64 ha sido resumido [.org/soap/envelope/" xmlns:cfdi="http://cfdi. } catch (RemoteException Re) { Re..toString()).printStackTrace().. System.getTimbreCfdi(user.xmlsoap.out. file).ediwinws. <?xml version="1.service. System.org/2001/XMLSchema" xmlns:xsi="http://www.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.println("RemoteExcepcion: " + Re. } catch (CFDiException CFDIe) { CFDIe. byte[] file) { try { cfdiService. String pass. EJEMPLOS Código del cliente: public byte[] getTimbreCfdi(String user.org/2001/XMLSchema-instance"> WSCFDI EDICOM | 2.org/soap/envelope/" xmlns:xsd="http://www. } catch (Exception e) { e.toString()).getText()).out. pass.w3. o que no se haya enviado el fichero ZIP con el CFDI.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getTimbreCfdi> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [.. } } Petición SOAP: <?xml version="1.edicom.w3.WSCFDI EDICOM autentificado correctamente en el sistema.out.println("CFDiExcepcion: " + CFDIe.printStackTrace().println("Exception: " + e.] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getTimbreCfdi> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales. 0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.cfdi..com"> <ns1:cod>301</ns1:cod> <ns1:text>El documento &lt.org/axis/">cfdiws.3.service.SE3> no está codificado en UTF-8</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.SE3> no está codificado en UTF8</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.service.userException</faultcode> <faultstring>com.edicom..Funciones | 13 .org/2001/XMLSchema" xmlns:xsi="http://www.w3.w3. En cada llamada se pueden cancelar varios CFDI.ediwinws.ediwinws. el usuario debe autentificarse como usuario del servicio CFDi y especificar cuales son los CFDI que quiere cancelar mediante los UUIDs de los comprobantes firmados digitalmente.WSCFDI EDICOM <soapenv:Body> <getTimbreCfdiResponse xmlns="http://cfdi. LLAMADA: WSCFDI EDICOM | 2.CFDiException: El documento &lt.ediwinws. Para poder implementar la llamada. CANCELAR CFDI cancelaCFDi Permite cancelar comprobantes timbrados.edicom.edicom.org/soap/envelope/" xmlns:xsd="http://www. <?xml version="1.sedeb2b. 2.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getTimbreCfdiReturn> </getTimbreCfdiResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error.com"> <getTimbreCfdiReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9GaXJtYV9PS18x LlhNTN1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh9zgdR91fdq7 ngc4QjbHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/23gle2CQ [.apache.service. WSCFDI EDICOM public CancelaResponse cancelaCFDi(String user. incluyendo los códigos de ejecución del servicio por parte del SAT especificados en el Anexo 20. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. se enviarán los datos del fichero pfx codificados en Base64 dentro del sobre de la llamada SOAP.printStackTrace(). Strind pfxPassword) { CancelaResponse cancelaResponse = null. • ack: Confirmación que devuelve el servicio del SAT como que la petición se ha realizado. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la cancelación Satisfactoria de los comprobantes. String pass. • Respuesta con errores: En caso de que haya algún error en el proceso de cancelación de los CFDI. rfc.out.Funciones | 14 . } catch (CFDiException CFDIe) { CFDIe. pfxPassword). byte[] pfx.out. String[] uuid. WSCFDI EDICOM | 2. Una vez decodificado. String pfxPassword). el servicio devolverá un listado de datos derivados de la cancelación: • uuids: Listado de CFDI que se han cancelado en la petición. Está codificado en base 64 y contiene el acuse de recibo expedido por el SAT para la cancelación. System. o que no se haya enviado el certificado del usuario. EJEMPLOS Código del cliente: public CancelaResponse cancelaCFDi(String user. try { cancelaResponse = cfdiService. este acuse contiene el xml con la información de la petición de cancelación solicitada al SAT por parte de EDICOM. PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • rfc: RFC del usuario que está cancelando los CFDI • uuid: Lista de uuids que identifican los CFDI que quiere cancelar el usuario. pass. Dentro del mensaje SOAP. String rfc. uuid. • PxfPassword: Password del certificado para poder realizar la firma de la petición con el certificado del usuario.cancelaCFDi(user.println("RemoteExcepcion: " + Re. } catch (Exception e) { e. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. byte[] pfx. } catch (RemoteException Re) { Re.printStackTrace().printStackTrace().println("CFDiExcepcion: " + CFDIe. String[] uuid. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. String rfc. System. String password. pfx.toString()).getText()). • pfx: Certificado del cliente que quiere cancelar los CFDI. <?xml version="1.org/2001/XMLSchema" xmlns:xsi="http://www..out.service.xmlsoap..edicom.WSCFDI EDICOM System.w3..] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [.w3.toString()).] WSCFDI EDICOM | 2.ediwinws..service.ediwinws.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiResponse xmlns="http://cfdi.Funciones | 15 . El código del fichero en base64 ha sido resumido [.com"> <soapenv:Header/> <soapenv:Body> <cfdi:cancelaCFDi> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:rfc>RFC</cfdi:rfc> <cfdi:uuid>UUID1</cfdi:uuid> <cfdi:pfx>MIIJuQIBAzCCCX8GCSqGSIb3DQEHAaCCCXAEgglsMIIJaDCCBB8GCSqGSIb3DQEHBqCCBBA wggQMAgEAMIIEBQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIkI0BwQTfWEQCAggAgIID2DzPnHdO A4XWGeanHoCuRitvCJJecEBSkqvg8ohliY7IiVp8qF3agvOqt32kbEDXHfrLpVVhlPnjrZo4 [.] Hzl11kfETcJiuMUNa5hOx5CiB2WqAg/tV9MDOdUZEkN4E+N9xxSxPAkSw75RvvVfRPW4JFXbmfs7c230a PodMQP58PfaJilI/Nm8cvAQXIEwRugMSUwIwYJKoZIhvcNAQkVMRYEFBlCuYgPj26y+M2HK9s6Tpe2Jmg CMDEwITAJBgUrDgMCGgUABBSz8OKBcbpiR69Tw0UJ1d1D2xW0EQQIar9uSxM7uToCAggA</cfdi:pfx> <cfdi:pfxPassword>qwertyuio</cfdi:pfxPassword> </cfdi:cancelaCFDi> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.org/soap/envelope/" xmlns:xsd="http://www. }return cancelaResponse.xmlsoap. } Petición SOAP: <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..edicom..println("Exception: " + e..com"> <cancelaCFDiReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.org/soap/envelope/" xmlns:cfdi="http://cfdi.] Respuesta SOAP: Ejemplo de una respuesta de cancelación de CFDI satisfactoria.. edicom. que puede llegar a ser insuficiente para la correcta ejecución de esta función.userException</faultcode> <faultstring>com. sino que depende directamente del tiempo de proceso de los servidores del SAT.cfdi. Por defecto.org/axis/">cfdiws.w3.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema" xmlns:xsi="http://www. <?xml version="1.CFDiException: No se ha podido cancelar los UUIDs especificados.WSCFDI EDICOM hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiReturn> </cancelaCFDiResponse> </soapenv:Body> </soapenv:Envelope> Ejemplo de una respuesta de error.org/soap/envelope/" xmlns:xsd="http://www.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml. los clientes de webservice suelen tener un timeout de 30 segundos. por lo que es necesario que se utilice un timeout considerable para estas peticiones de cancelación.Funciones | 16 .com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados. CONSIDERACIONES IMPORTANTES Timeout de la llamada de esta función Hay que tener en cuenta que el proceso de timbrado depende directamente del proceso de cancelación del SAT.sedeb2b.service.ediwinws. Este proceso no es tan inmediato como e tiempo de generación del timbrado.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.service. Se recomienda utilizar para esta llamada un timeout no inferior a 2 minutos para evitar que venza la llamada por timeout y se pierda la respuesta de la petición del servicio.apache.w3.xmlsoap. WSCFDI EDICOM | 2.ediwinws. el tiempo de respuesta de esta función no depende del servicio de cancelación de EDICOM.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. Por tanto.edicom. sedeb2b. devuelve un objeto soapenv:Fault en la respuesta del servicio.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiResponse xmlns="http://cfdi.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.w3.w3. <?xml version="1. La respuesta errónea del servicio de EDICOM.WSCFDI EDICOM Gestión de errores.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados. Dentro de este acuse de recibo se encuentran los códigos de ejecución de la cancelación del comprobante por parte del SAT.org/axis/">cfdiws.xmlsoap.xmlsoap. Ejemplo de una respuesta de cancelación de CFDI satisfactoria.CFDiException: No se ha podido cancelar los UUIDs especificados.apache.org/soap/envelope/" xmlns:xsd="http://www. como se puede ver en el ejemplo anterior. <?xml version="1.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml. Más concretamente en el objeto ack dentro del cancelaCFDiReturn.cfdi.org/2001/XMLSchema" xmlns:xsi="http://www.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> La respuesta que devuelve el SAT está contenida dentro de la respuesta correcta del servicio de EDICOM..service.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. Ejemplo de una respuesta de error del servicio de EDICOM.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.ediwinws.userException</faultcode> <faultstring>com. En la ejecución de esta llamada hay que distinguir correctamente los códigos de error que genera el servicio de cancelación de EDICOM y los códigos de validación que devuelve el SAT en el acuse de recibo.org/soap/envelope/" xmlns:xsd="http://www. Este objeto contiene un objeto ns1:cod con el código de error que proporciona EDICOM para la ejecución del servicio.w3.com"> <cancelaCFDiReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. Estos códigos de ejecución del SAT están contemplados en el Anexo 20.ediwinws.service.edicom.edicom.Funciones | 17 .service.ediwinws..] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> WSCFDI EDICOM | 2.org/2001/XMLSchema" xmlns:xsi="http://www.w3. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado el cambio correctamente. • newPassword: Nueva contraseña que quiere utilizar el usuario para realizar las conexiones al servicio. String newPassword) PARÁMETROS: • user: Usuario que va realizar la conexión. el servicio devolverá una Excepción.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiReturn> </cancelaCFDiResponse> </soapenv:Body> </soapenv:Envelope> Ambos códigos son totalmente independientes. EJEMPLOS WSCFDI EDICOM | 2. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.Funciones | 18 . • password: Contraseña del usuario que va realizar la conexión. LLAMADA: public boolean changePassword(String user. el usuario debe autentificarse como usuario del servicio CFDi e indicar el nuevo password para hacer el cambio. 2.4.. y no deben confundirse ya que corresponden a códigos de EDICOM y del SAT respectivamente. Para poder implementar la llamada. String password. CAMBIAR PASSWORD DE ACCESO AL SERVICIO DE CFDI changePassword Permite al usuario cambiar el password de acceso al servicio CFDi. • Respuesta de error: En caso de que haya algún error en el proceso de cambio de error.. el servicio devolverá un resultado correcto (true).WSCFDI EDICOM <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [. printStackTrace().org/2001/XMLSchema-instance"> <soapenv:Body> <changePasswordResponse xmlns="http://cfdi.toString()).w3. } catch (RemoteException Re) { Re. try { result = cfdiService.org/2001/XMLSchema" xmlns:xsi="http://www. newPass). } return result.ediwinws.println("Exception: " + e. System. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. } catch (Exception e) { e.changePassword(user.getText()).printStackTrace().0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.0" encoding="UTF-8"?> WSCFDI EDICOM | 2.WSCFDI EDICOM Código del cliente: public boolean changePassword(String user.toString()).ediwinws.Funciones | 19 .org/soap/envelope/" xmlns:cfdi="http://cfdi. } catch (CFDiException CFDIe) { CFDIe. pass. String pass.service.out.out.edicom. String newPass) { boolean result = false.org/soap/envelope/" xmlns:xsd="http://www.println("CFDiExcepcion: " + CFDIe.com"> <changePasswordReturn>true</changePasswordReturn> </changePasswordResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error.out.edicom. System. System.w3.com"> <soapenv:Header/> <soapenv:Body> <cfdi:changePassword> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:newPassword>xxxxxx</cfdi:newPassword> </cfdi:changePassword> </soapenv:Body> </soapenv:Envelope> Respuesta SOAP: El siguiente ejemplo es una respuesta de cambio de password satisfactorio <?xml version="1.printStackTrace().println("RemoteExcepcion: " + Re. } Petición SOAP: <?xml version="1.service.xmlsoap.xmlsoap. LLAMADA: public byte[] getCfdiTest(String user.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. Estas validaciones omitidas permiten que se puedan hacer pruebas de funcionamiento con un juego reducido de comprobantes firmados sin necesidad de ir generando continuamente comprobantes timbrados. por lo que al enviar varias veces el mismo documento se generan distintos timbres de TEST.</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml. Funciona exactamente igual que la función getCfdi. Validaciones omitidas en el entorno de TEST: • No se validan las 72 horas de tiempo entre la fecha del comprobante y la generación del timbre. y no envía el CFDI al SAT.ediwinws.org/2001/XMLSchema" xmlns:xsi="http://www. PARÁMETROS: • user: Usuario que va realizar la conexión WSCFDI EDICOM | 2.service.Funciones | 20 . String password.WSCFDI EDICOM <soapenv:Envelope xmlns:soapenv="http://schemas.org/soap/envelope/" xmlns:xsd="http://www.edicom.com"> <ns1:cod>200</ns1:cod> <ns1:text>La contraseña no puede ser la misma que la que habÃa anteriormente.w3.ediwinws. • No se tiene en cuenta el documento enviado.org/axis/">cfdiws.5.userException</faultcode> <faultstring>com.CFDiException: La contraseña no puede ser la misma que la que habÃa anteriormente.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.cfdi.apache.xmlsoap.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.sedeb2b. La ejecución de esta llamada no tiene en cuenta la limitaciones del servicio en producción para poder ser mas flexible a la hora de que se hagan las pruebas de conectividad con el webservice final. genera un CFDI con un timbre no válido. GENERACIÓN DEL CFDI EN TEST getCfdiTest Permite realizar el timbrado del comprobante firmado por el cliente en modo de prueba y devuelve el comprobante timbrado.edicom.service.w3. Se trata de una llamada de TEST para poder hacer pruebas del funcionamiento del servicio. pero en caso de que el CFDI pase todas las validaciones que implementa el servicio. byte[] file). 2. System.edicom.WSCFDI EDICOM • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante firmados por el usuario. o que no se haya enviado el fichero ZIP con el CFDI. byte[] file) { try { cfdiService.toString()). System.Funciones | 21 .printStackTrace(). } catch (CFDiException CFDIe) { CFDIe. fecha y hora de certificación y sello digital del CFDI. String pass. • Respuesta satisfactoria: En caso de que se haya realizado la firma digital. el servicio devolverá un documento comprimido en formato ZIP con el CFDI firmado con todos los datos generados. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. • Respuesta de error: En caso de que haya algún error en el proceso de firma digital del CFDI.println("Exception: " + e.println("CFDiExcepcion: " + CFDIe.getText()). se dará respuesta al contribuyente incorporando un complemento sobre el documento.printStackTrace(). Puede enviarse también comprimido en en formato ZIP. EJEMPLOS Código del cliente: public byte[] getCfdiTest(String user.org/soap/envelope/" xmlns:cfdi="http://cfdi.service. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. Este complemento incluye el número de folio asignado por el SAT. pass.out. file). System. Se trata del XML con la información del comprobante. } catch (RemoteException Re) { Re. } catch (Exception e) { e.println("RemoteExcepcion: " + Re. Dentro del mensaje SOAP. o que el CFDI enviado no es correcto sintácticamente según el esquema del SAT.xmlsoap.printStackTrace().out. } } Petición SOAP: <?xml version="1. y el sello del SAT. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.out. RESPUESTA: Si el CFDI cumple con las validaciones especificadas anteriormente.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdiTest> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd WSCFDI EDICOM | 2.toString()).getCfdiTest(user.ediwinws. . El código del fichero en base64 ha sido resumido [.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> WSCFDI EDICOM | 2.Funciones | 22 .0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..w3.service.> no ha sido expedido por el Servicio de Administración Tributaria</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.userException</faultcode> <faultstring>com.org/2001/XMLSchema" xmlns:xsi="http://www.service.xmlsoap.cfdi.com"> <ns1:cod>308</ns1:cod> <ns1:text>El certificado &lt.apache..org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.com"> <getCfdiTestReturn>UEsDBBQACAAIANV9ND4AAAAAAAAAAAAAAAAjAAAAU0lHTl9zaW5fdGltYnJhcl 9fWE1MSW1wXzQ3MzIwOS54bWztWNly67gRfU9V/oGlp6RcFhctllzjmQJJUCTNRVy1vKS4ifsikhIp/cF 8Sr5jfiygZN/re8eZTB5TuayiYaEbjdONA3SDP/3S5xl2DuomLouXETkmRlhQeKUfF+HLyDK [.xmlsoap. <?xml version="1.] LPx2hwQfDj8YH5NQX5OlHyLeJYKNmrPNa1C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJk mD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIAAAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54b Wx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA==</cfdi:file> </cfdi:getCfdiTest> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiTestResponse xmlns="http://cfdi.org/soap/envelope/" xmlns:xsd="http://www. <?xml version="1.WSCFDI EDICOM [.edicom.sedeb2b.] Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de CFDi en test satisfactoria.CFDiException: El certificado &lt.org/axis/">cfdiws.w3.w3..> no ha sido expedido por el Servicio de Administración Tributaria</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema" xmlns:xsi="http://www.] AAAAAAAAAAAAAAAAAAAAAU0lHTl9zaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWxQSwUGAAAAAAEA AQBRAAAAPgkAAAAA</getCfdiTestReturn> </getCfdiTestResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error.ediwinws..w3.service.ediwinws.ediwinws.edicom.org/soap/envelope/" xmlns:xsd="http://www.. Se trata del XML con la información del comprobante. se dará respuesta al contribuyente con el timbre de la firma digital.WSCFDI EDICOM </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. el servicio devolverá un documento comprimido en formato ZIP con el timbre del CFDI con todos los datos generados. fecha y hora de certificación y sello digital del CFDI.6. Funciona exactamente igual que la función getTimbreCfdi. PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante firmados por el usuario. genera un CFDI con un timbre no válido. WSCFDI EDICOM | 2. Se trata de una llamada de TEST para poder hacer pruebas del funcionamiento del servicio. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. y no envía el comprobante al SAT. GENERACIÓN DEL TIMBRE DEL CFDI EN TEST getTimbreCfdiTest Permite realizar el timbrado del comprobante firmado por el cliente en modo de prueba y devuelve el timbre del comprobante timbrado. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. pero en caso de que el CFDI pase todas las validaciones que implementa el servicio. RESPUESTA: Si el CFDI cumple con las validaciones especificadas anteriormente. Este timbre incluye el número de folio asignado por el SAT. Estas validaciones omitidas permiten que se puedan hacer pruebas de funcionamiento con un juego reducido de comprobantes firmados sin necesidad de ir generando continuamente comprobantes timbrados. Validaciones omitidas en el entorno de TEST: • No se validan las 72 horas de tiempo entre la fecha del comprobante y la generación del timbre. 2. • Respuesta satisfactoria: En caso de que se haya realizado la firma digital.Funciones | 23 . LLAMADA: public byte[] getTimbreCfdiTest(String user. La ejecución de esta llamada no tiene en cuenta la limitaciones del servicio en producción para poder ser mas flexible a la hora de que se hagan las pruebas de conectividad con el webservice final. byte[] file). Puede enviarse también comprimido en en formato ZIP. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI. por lo que al enviar varias veces el mismo documento se generan distintos timbres de TEST. String password. Dentro del mensaje SOAP. y el sello del SAT. • No se tiene en cuenta el documento enviado. } catch (RemoteException Re) { Re..toString()).printStackTrace(). o que no se haya enviado el fichero ZIP con el CFDI.printStackTrace().ediwinws.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getTimbreCfdiTest> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hNTEltcF80Nz MyMDkueG1sfu1W2ZKjyhF991cQerKjY8SipVsdt+NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7 /OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTokqxQcAAFUSAAqxQcAAFUSAAqxQcAAFUSAA [.out.getTimbreCfdiTest(user.getText()).Funciones | 24 . file).WSCFDI EDICOM • Respuesta con error: En caso de que haya algún error en el proceso de firma digital del CFDI. EJEMPLOS Código del cliente: public byte[] getTimbreCfdiTest(String user. El código del fichero en base64 ha sido resumido [.out. pass. System.xmlsoap.println("CFDiExcepcion: " + CFDIe.] JkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIAAAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS5 4bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA== </cfdi:file> </cfdi:getTimbreCfdiTest> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.] Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de timbre de CFDI en test satisfactoria..toString()). } catch (CFDiException CFDIe) { CFDIe.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..println("Exception: " + e.out.printStackTrace(). } } Petición SOAP: <?xml version="1. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. byte[] file) { try { cfdiService.println("RemoteExcepcion: " + Re. o que el CFDI enviado no es correcto sintácticamente según el esquema del SAT.service.. System. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. } catch (Exception e) { e.org/soap/envelope/" xmlns:cfdi="http://cfdi. WSCFDI EDICOM | 2. String pass. System. WSCFDI EDICOM | 2.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.service.cfdi.Funciones | 25 .. el usuario debe autentificarse como usuario del servicio de CFDi y enviar el mismo comprobante que se envió previamente a timbrar. Para poder implementar la llamada.edicom.service.w3.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.org/axis/">cfdiws.ediwinws.service.WSCFDI EDICOM <?xml version="1.org/2001/XMLSchema" xmlns:xsi="http://www.sedeb2b.org/soap/envelope/" xmlns:xsd="http://www.w3.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. COMPROBACIÓN DEL TIMBRADO CFDI getUUID Permite comprobar si un comprobante ha sido timbrado previamente y devuelve el UUID del comprobante timbrado.D63558240D3051448088CED185C0832038A8735C></ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.org/2001/XMLSchema-instance"> <soapenv:Body> <getTimbreCfdiTestResponse xmlns="http://cfdi.edicom.7.ediwinws.SE1> ya ha sido firmado &lt.edicom.SE1> ya ha sido firmado &lt.D63558240D3051448088CED185C0832038A8735C></faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. <?xml version="1.apache.xmlsoap.xmlsoap..com"> <getTimbreCfdiTestReturn>UEsDBBQACAAIANV9ND4AAAAAAAAAAAAAAAAjAAAAU0lHTl9zaW5fdGlt YnJhcl9fWE1MSW1wXzQ3MzIwOS54bWztWNly67gRfU9V/oGlp6RcFhctllzjmQJJUCTNRVy1vKS4ifsik hIp/cF8Sr5jfiygZN/re8eZTB5TuayiYaEbjdONA3SDP/3S5xl2DuomLouXETkmRlhQeKUfF [. 2.w3.w3.com"> <ns1:cod>307</ns1:cod> <ns1:text>El documento &lt.org/soap/envelope/" xmlns:xsd="http://www.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.ediwinws.userException</faultcode> <faultstring>com.org/2001/XMLSchema" xmlns:xsi="http://www.] AAAAAAAAAAAAAAAAAAAAAU0lHTl9zaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWxQSwUGAAAAAAEA AQBRAAAAPgkAAAAA</getTimbreCfdiTestReturn> </getTimbreCfdiTestResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error.CFDiException: El documento &lt. • password: Contraseña del usuario que va realizar la conexión.println("CFDiExcepcion: " + CFDIe. LLAMADA: public String getUUID(String user.getText()). System.out.println("Exception: " + e.getUUID(user. por lo que sólo busca el comprobante timbrado dentro de las 72 horas siguientes a la generación del timbre. } catch (RemoteException Re) { Re.toString()). • Respuesta con errores: En caso de que haya algún error en el proceso de búsqueda del comprobante timbrado.WSCFDI EDICOM Esta función está destinada a verificar que el timbre se ha generado correctamente. Pasado este tiempo. pass. String password.println("RemoteExcepcion: " + Re. devolverá una cadena de texto en blanco indicando que no hay ningún UUID que se corresponda con el comprobante enviado.printStackTrace().out. EJEMPLOS Código del cliente: public String getUUID(String user. devolverá el UUID del comprobante timbrado. } return uuid.printStackTrace(). System. file). byte[] file) { String uuid = null. try { uuid = cfdiService. el servicio devolverá el UUID del comprobante generado.toString()). • Respuesta satisfactoria: En caso de que se haya comprobado que el comprobante se ha timbrado.printStackTrace(). Dentro del mensaje SOAP. } WSCFDI EDICOM | 2. } catch (Exception e) { e. Puede enviarse también comprimido en en formato ZIP. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. byte[] file). Si no se ha timbrado el comprobante. RESPUESTA: En caso de que el comprobante haya sido timbrado. Se trata del XML con la información del comprobante. PARÁMETROS: • user: Usuario que va realizar la conexión. } catch (CFDiException CFDIe) { CFDIe.out. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. • file: Fichero con los datos del comprobante firmados por el usuario. En cada llamada se puede enviar un único comprobante para obtener un único UUID. System. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. no se puede recuperar el UUID del timbre y por tanto no devuelve nada.Funciones | 26 . String pass. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. o que no se haya enviado el fichero ZIP con el CFDI. edicom.xmlsoap.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getUUID> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [.</ns1:text> </ns1:fault> WSCFDI EDICOM | 2.w3.w3.service.. El siguiente ejemplo es una respuesta de error.ediwinws.service.] Respuesta SOAP: El siguiente ejemplo es una respuesta satisfactoria de la obtención de un UUID <soapenv:Envelope xmlns:soapenv="http://schemas.Funciones | 27 .com"> <getUUIDReturn>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</getUUIDReturn> </getUUIDResponse> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo de código no son reales.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.CFDiException: No se ha podido comprobar el UUID del comprobante.xmlsoap.] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getUUID> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.org/soap/envelope/" xmlns:cfdi="http://cfdi.xmlsoap.org/2001/XMLSchema-instance"> <soapenv:Body> <getUUIDResponse xmlns="http://cfdi.org/2001/XMLSchema" xmlns:xsi="http://www..w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.. El código del fichero en base64 ha sido resumido [.edicom.WSCFDI EDICOM Petición SOAP: <?xml version="1. <soapenv:Envelope xmlns:soapenv="http://schemas..ediwinws.w3.userException</faultcode> <faultstring>com.ediwinws.ediwinws.service.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/soap/envelope/" xmlns:xsd="http://www.org/2001/XMLSchema" xmlns:xsi="http://www.cfdi.edicom.edicom.service.org/soap/envelope/" xmlns:xsd="http://www.com"> <ns1:cod>202</ns1:cod> <ns1:text>No se ha podido comprobar el UUID del comprobante. • file: Fichero con los datos del comprobante firmados por el usuario. 2.WSCFDI EDICOM <ns2:hostname xmlns:ns2="http://xml. Se trata del XML con la información del comprobante. Puede enviarse también comprimido en en formato ZIP. el servicio devolverá el UUID del comprobante generado en el entorno de pruebas. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP.8. Para poder implementar la llamada. • password: Contraseña del usuario que va realizar la conexión. no se pueden asignar los UUIDs directamente a los ficheros originales ya que un fichero podría tener varios UUIDs disponibles. Dentro del mensaje SOAP. RESPUESTA: En caso de que el comprobante haya sido timbrado en el entorno de pruebas. Esta función está destinada a verificar que la implementación de la función getUUID funciona correctamente.apache. Por tanto.Funciones | 28 . byte[] file). el usuario debe autentificarse como usuario del servicio de CFDi y enviar el mismo comprobante que se envió previamente a timbrar en el entorno de pruebas. LLAMADA: public String getUUIDTest(String user. En cada llamada se puede enviar un único comprobante para obtener un único UUID. WSCFDI EDICOM | 2. en el que se permiten generar distintos timbres de un mismo comprobante firmado. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. COMPROBACIÓN DEL TIMBRADO CFDI EN TEST getUUIDTest Permite comprobar si un comprobante ha sido timbrado previamente en el entorno de pruebas de EDICOM y devuelve el UUID del comprobante timbrado en el entorno de pruebas.org/axis/">cfdipr01a</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: En este ejemplo concreto se presenta un error "202" No se ha podido comprobar el UUID del comprobante. la funcionalidad de esta llamada al webservice está limitada de forma que esta función nunca devolverá un UUID de un timbre de TEST. Si no se ha timbrado el comprobante en el entorno de pruebas. • Respuesta satisfactoria: En caso de que se haya comprobado que el comprobante se ha timbrado en el entorno de pruebas. devolverá una cadena de texto en blanco indicando que no hay ningún UUID que se corresponda con el comprobante enviado. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2010 [1]. devolverá el UUID del comprobante timbrado en el entorno de pruebas. Por la naturaleza del servicio de TEST. PARÁMETROS: • user: Usuario que va realizar la conexión. String password. . } catch (RemoteException Re) { Re. Se obtiene el UUID de pruebas. try { uuid = cfdiService.println("RemoteExcepcion: " + Re.. } catch (CFDiException CFDIe) { CFDIe.. } return uuid.toString()).] Respuesta SOAP: El siguiente ejemplo es una respuesta satisfactoria.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getUUIDTest> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [. System.org/soap/envelope/" xmlns:cfdi="http://cfdi.edicom.Funciones | 29 . byte[] file) { String uuid = null. System.out. pass.. String pass.service. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema.xmlsoap.printStackTrace(). } Petición SOAP: <?xml version="1. } catch (Exception e) { e. WSCFDI EDICOM | 2.getText()). System. EJEMPLOS Código del cliente: public String getUUIDTest(String user. o que no se haya enviado el fichero ZIP con el CFDI.println("CFDiExcepcion: " + CFDIe.out.] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getUUIDTest> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.printStackTrace().WSCFDI EDICOM • Respuesta con errores: En caso de que haya algún error en el proceso de búsqueda del comprobante timbrado en el entorno de pruebas.getUUIDTest(user. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. file).println("Exception: " + e.printStackTrace().toString()).ediwinws. El código del fichero en base64 ha sido resumido [.out. service.edicom.org/soap/envelope/" xmlns:xsd="http://www.service.userException</faultcode> <faultstring>com.CFDiException: No se ha podido comprobar el UUID del comprobante. 2. <soapenv:Envelope xmlns:soapenv="http://schemas. el cliente tiene que implementar la petición de cancelación de los timbres que quieren cancelar y firmarla. En este caso. el usuario debe autentificarse como usuario del servicio CFDi.edicom.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.service.ediwinws.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.Funciones | 30 .</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.w3.xmlsoap.ediwinws.org/soap/envelope/" xmlns:xsd="http://www. CANCELAR CFDI FIRMADO cancelaCFDiSigned Permite cancelar comprobantes timbrados. Para poder implementar la llamada.apache.com"> <ns1:cod>202</ns1:cod> <ns1:text>No se ha podido comprobar el UUID del comprobante.com"> <getUUIDTestReturn>13EDFE98-7E57-4455-9C316661C4A5A71D</getUUIDTestReturn> </getUUIDTestResponse> </soapenv:Body> </soapenv:Envelope> Nota: El UUID reflejado en este ejemplo es un UUID como el obtenido en entorno de pruebas.org/2001/XMLSchema-instance"> <soapenv:Body> <getUUIDTestResponse xmlns="http://cfdi.org/axis/">cfdipr01a</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: En este ejemplo concreto se presenta un error "202" No se ha podido comprobar el UUID del comprobante Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.edicom. El segundo grupo es siempre "7E57" ("TEST") El siguiente ejemplo es una respuesta de error.w3.cfdi.xmlsoap. Esta petición firmada se envía directamente al webservice para que genere la petición de cancelación a partir de esos datos firmados WSCFDI EDICOM | 2.WSCFDI EDICOM <soapenv:Envelope xmlns:soapenv="http://schemas.ediwinws.9.org/2001/XMLSchema" xmlns:xsi="http://www. • ack: Confirmación que devuelve el servicio del SAT como que la petición se ha realizado. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. System. o que no se haya enviado el certificado del usuario.println("Exception: " + e. EJEMPLOS Código del cliente: public CancelaResponse cancelaCFDiSigned(String user. }return cancelaResponse. • Respuesta con errores: En caso de que haya algún error en el proceso de cancelación de los CFDI. System. Dentro del mensaje SOAP. se enviarán los datos de la cancelación codificados en Base64 dentro del sobre de la llamada SOAP. Una vez decodificado. } catch (CFDiException CFDIe) { CFDIe.printStackTrace(). System.Funciones | 31 . Está codificado en base 64 y contiene el acuse de recibo expedido por el SAT para la cancelación. } WSCFDI EDICOM | 2.println("RemoteExcepcion: " + Re. incluyendo los códigos de ejecución del servicio por parte del SAT especificados en el Anexo 20. el servicio devolverá un listado de datos derivados de la cancelación: • uuids: Listado de CFDI que se han cancelado en la petición.println("CFDiExcepcion: " + CFDIe. • sign: Petición de cancelación firmada por el propio cliente. PARÁMETROS: • user: Usuario que va realizar la conexión. } catch (RemoteException Re) { Re. try { cancelaResponse = cfdiService. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.toString()).cancelaCFDiSigned(user. String password.getText()). pass. • password: Contraseña del usuario que va realizar la conexión. String pass.out. este acuse contiene el xml con la información de la petición de cancelación solicitada al SAT por parte de EDICOM. byte[] sign) { CancelaResponse cancelaResponse = null.toString()). devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. } catch (Exception e) { e.out.WSCFDI EDICOM LLAMADA: public CancelaResponse cancelaCFDiSigned(String user. sign).printStackTrace(). RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la cancelación Satisfactoria de los comprobantes. byte[] sign).printStackTrace().out. edicom.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiSignedResponse xmlns="http://cfdi.ediwinws..service.org/2001/XMLSchema" xmlns:xsi="http://www.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas...edicom. El código del fichero en base64 ha sido resumido [..service.com"> <cancelaCFDiSignedReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [..ediwinws.WSCFDI EDICOM Petición SOAP: <?xml version="1. <?xml version="1.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiSignedReturn> </cancelaCFDiSignedResponse> </soapenv:Body> </soapenv:Envelope> WSCFDI EDICOM | 2.org/soap/envelope/" xmlns:xsd="http://www.com"> <soapenv:Header/> <soapenv:Body> <cfdi:cancelaCFDiSigned> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:sign>PENhbmNlbGFjaW9uIEZlY2hhPSIyMDExLTA3LTEzVDE3OjIzOjQ0LjU4OVoiIFJmY0VtaX Nvcj0iWlVOMTAwNjIzNjYzIiB4bWxucz0iaHR0cDovL2NhbmNlbGFjZmQuc2F0LmdvYi5teCIgeG1sbnM 6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHR[.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.Funciones | 32 .w3.w3..xmlsoap.] rS3FtdU1vTU9QaVcyYWQ1cEF3UlpKL0JBcmMrODBqTWNWZ1VkNEtSdVdMOG4vc05jNUhsTEd5Q3RvMTRZ UXhHUDkwdkNiV2xlUT09PC9YNTA5Q2VydGlmaWNhdGU+PC9YNTA5RGF0YT48L0tleUluZm8+PC9TaWduY XR1cmU+PC9DYW5jZWxhY2lvbj4=</cfdi:sign> </cfdi:cancelaCFDiSigned> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.] Respuesta SOAP: Ejemplo de una respuesta de cancelación de CFDI firmada satisfactoria.xmlsoap..org/soap/envelope/" xmlns:cfdi="http://cfdi..] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [. <?xml version="1.WSCFDI EDICOM Ejemplo de una respuesta de error. Este objeto contiene un objeto ns1:cod con el código de error que proporciona EDICOM para la ejecución del servicio.w3. Gestión de errores.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml. sino que depende directamente del tiempo de proceso de los servidores del SAT. Por defecto. CONSIDERACIONES IMPORTANTES Timeout de la llamada de esta función Hay que tener en cuenta que el proceso de timbrado depende directamente del proceso de cancelación del SAT. devuelve un objeto soapenv:Fault en la respuesta del servicio.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados.service.xmlsoap.org/axis/">cfdiws. que puede llegar a ser insuficiente para la correcta ejecución de esta función. por lo que es necesario que se utilice un timeout considerable para estas peticiones de cancelación.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.CFDiException: No se ha podido cancelar los UUIDs especificados. Se recomienda utilizar para esta llamada un timeout no inferior a 2 minutos para evitar que venza la llamada por timeout y se pierda la respuesta de la petición del servicio.ediwinws.Funciones | 33 . Este proceso no es tan inmediato como e tiempo de generación del timbrado.cfdi. La respuesta errónea del servicio de EDICOM.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.apache. En la ejecución de esta llamada hay que distinguir correctamente los códigos de error que genera el servicio de cancelación de EDICOM y los códigos de validación que devuelve el SAT en el acuse de recibo.w3. como se puede ver en el ejemplo anterior.service.userException</faultcode> <faultstring>com.org/2001/XMLSchema" xmlns:xsi="http://www. <?xml version="1. el tiempo de respuesta de esta función no depende del servicio de cancelación de EDICOM.org/soap/envelope/" xmlns:xsd="http://www. los clientes de webservice suelen tener un timeout de 30 segundos. Por tanto.edicom.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.edicom.sedeb2b.ediwinws.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.0" encoding="UTF-8"?> WSCFDI EDICOM | 2. Ejemplo de una respuesta de error del servicio de EDICOM. ediwinws.w3.cfdi.org/axis/">cfdiws.com"> <cancelaCFDiReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.org/2001/XMLSchema" xmlns:xsi="http://www.WSCFDI EDICOM <soapenv:Envelope xmlns:soapenv="http://schemas..org/2001/XMLSchema" xmlns:xsi="http://www. Dentro de este acuse de recibo se encuentran los códigos de ejecución de la cancelación del comprobante por parte del SAT.w3.sedeb2b...xmlsoap.apache.org/soap/envelope/" xmlns:xsd="http://www.service.edicom.w3.ediwinws.w3.org/soap/envelope/" xmlns:xsd="http://www.userException</faultcode> <faultstring>com.service.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> La respuesta que devuelve el SAT está contenida dentro de la respuesta correcta del servicio de EDICOM.edicom.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.service. Estos códigos de ejecución del SAT están contemplados en el Anexo 20. Ejemplo de una respuesta de cancelación de CFDI satisfactoria.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml.] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [.Funciones | 34 .edicom..xmlsoap.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiResponse xmlns="http://cfdi.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiReturn> </cancelaCFDiResponse> </soapenv:Body> WSCFDI EDICOM | 2. <?xml version="1.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados. Más concretamente en el objeto ack dentro del cancelaCFDiReturn.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.ediwinws.CFDiException: No se ha podido cancelar los UUIDs especificados.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. getCfdiAck(user.Funciones | 35 . OBTENCIÓN DEL ACK(ACUSE) DEL TIMBRADO getCfdiAck Permite obtener el acuse (Acknowledge o ACK. } catch (CFDiException CFDIe) { CFDIe. String[] uuid) { try { cfdiService.println("CFDiExcepcion: " + CFDIe. String pass. String password.WSCFDI EDICOM </soapenv:Envelope> Ambos códigos son totalmente independientes. Para poder implementar la llamada. de los timbrados. • password: Contraseña del usuario que va realizar la conexión. uuid).printStackTrace(). WSCFDI EDICOM | 2.out. LLAMADA: public byte[] getCfdiAck(String user.println("RemoteExcepcion: " + Re.out.toString()). y no deben confundirse ya que corresponden a códigos de EDICOM y del SAT respectivamente. el usuario debe autentificarse como usuario del servicio de CFDi y especificar cuales son los UUIDs de los que quiere obtener el ACK.getText()).) generado por el SAT en el momento de timbrar el comprobante. System. • uuid: Listado de UUIDs de los que se quieren obtener los ACKs. 2. En cada llamada se pueden obtener varios ACKs. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido.printStackTrace(). } catch (RemoteException Re) { Re. String[] uuid). Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. pass. EJEMPLOS Código del cliente: public byte[] getCfdiAck(String user. PARÁMETROS: • user: Usuario que va realizar la conexión. el servicio devolverá un fichero comprimido en formato ZIP con los distintos ACKs de los UUIDs pertenecientes al usuario que se hayan especificado en la petición. System. o que no se haya enviado ningún UUID en la petición. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la petición correcta.10. • Respuesta con errores: En caso de que haya algún error en el proceso de obtención de los ACKs. <?xml version="1.service.. System.] El siguiente ejemplo es una respuesta de error.toString()).w3.userException</faultcode> WSCFDI EDICOM | 2.edicom. <?xml version="1.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.xmlsoap.Funciones | 36 .printStackTrace(). } } Petición SOAP: <?xml version="1.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdiAck> <cfdi:user>xxxxx</cfdi:user> <cfdi:password>xxxxxxx</cfdi:password> <cfdi:uuid>9D4B22C9-654F-4D58-BD8D-2F6481432AF5</cfdi:uuid> </cfdi:getCfdiAck> </soapenv:Body> </soapenv:Envelope> Respuesta SOAP: El siguiente ejemplo es una respuesta de obtención de ACKs satisfactoria.ediwinws. El código del fichero en base64 ha sido resumido [..0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/soap/envelope/" xmlns:xsd="http://www...org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiAckResponse xmlns="http://cfdi.service.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema" xmlns:xsi="http://www.com"> <getCfdiAckReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9GaXJtYV9PS18xLlh NTN1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh9zgdR91fdq7ngc 4QjbHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/23gle2CQ [.xmlsoap.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.WSCFDI EDICOM } catch (Exception e) { e.w3.println("Exception: " + e.] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getCfdiAckReturn> </getCfdiAckResponse> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.edicom.org/soap/envelope/" xmlns:cfdi="http://cfdi.org/soap/envelope/" xmlns:xsd="http://www.w3.out.ediwinws.org/2001/XMLSchema" xmlns:xsi="http://www.w3. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. PARÁMETROS: • user: Usuario que va realizar la conexión.edicom. el servicio devolverá un fichero comprimido en formato ZIP con los comprobantes timbrados de los UUIDs pertenecientes al usuario que se hayan especificado en la petición.sedeb2b.service. o que no se haya enviado ningún UUID en la petición. LLAMADA: public byte[] getCfdiFromUUID(String user.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.cfdi. • rfc: RFC del emisor del comprobante.WSCFDI EDICOM <faultstring>com.ediwinws.Funciones | 37 . • Respuesta con errores: En caso de que haya algún error en el proceso de obtención de los comprobantes timbrados. el usuario debe autentificarse como usuario del servicio de CFDi y especificar su RFC y los UUIDs de los comprobantes timbrados que quiere recuperar. WSCFDI EDICOM | 2. • password: Contraseña del usuario que va realizar la conexión. String[] uuid).ediwinws. 2.11. String rfc.org/axis/">cfdiws. Para poder implementar la llamada. • uuid: Listado de UUIDs de los que se quieren obtener los comprobantes timbrados.edicom. OBTENCIÓN DEL TIMBRE A PARTIR DEL UUID.service. GetCfdiFromUUID Permite obtener comprobante timbrado anteriormente. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.apache. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la petición correcta. String password..CFDiException: No se ha podido obtener la respuesta de la petición de generación del comprobante.com"> <ns1:cod>203</ns1:cod> <ns1:text>No se ha podido obtener la respuesta de la petición de generación del comprobante. println("RemoteExcepcion: " + Re.service.toString()).w3.out.org/soap/envelope/" xmlns:xsd="http://www. System.WSCFDI EDICOM EJEMPLOS Código del cliente: public byte[] getCfdiFromUUID(String user. } } Petición SOAP: <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..out.w3.xmlsoap.org/2001/XMLSchema" xmlns:xsi="http://www.getCfdiFrom UUID(user. } catch (RemoteException Re) { Re.ediwinws.printStackTrace(). } catch (CFDiException CFDIe) { CFDIe. <?xml version="1. pass.com"> <getCfdiFromUUIDReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9GaXJtYV9PS1 8xLlhNTN1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh9zgdR91fd q7ngc4QjbHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/23gle2CQ [.out. } catch (Exception e) { e. String rfc.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdiFromUUID> <cfdi:user>xxxxx</cfdi:user> <cfdi:password>xxxxx</cfdi:password> <cfdi:rfc>xxxxx</cfdi:rfc> <cfdi:uuid>9D4B22C9-654F-4D58-BD8D-2F6481432AF5</cfdi:uuid> </cfdi:getCfdiFromUUID> </soapenv:Body> </soapenv:Envelope> Respuesta SOAP: El siguiente ejemplo es una respuesta de obtención de los comprobantes timbrados satisfactoria.Funciones | 38 .printStackTrace().service.toString()).getText())..ediwinws.edicom. String[] uuid) { try { cfdiService.println("CFDiExcepcion: " + CFDIe.println("Exception: " + e. rfc. uuid).printStackTrace().0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiFromUUIDResponse xmlns="http://cfdi.xmlsoap.org/soap/envelope/" xmlns:cfdi="http://cfdi.edicom. System.] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getCfdiFromUUIDReturn> WSCFDI EDICOM | 2. String pass. System. service. WSCFDI EDICOM | 2.. En cada llamada se puede generar un CFDI. byte[] file).</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.com"> <ns1:cod>203</ns1:cod> <ns1:text>No se ha podido obtener el comprobante de los UUIDs enviados.org/soap/envelope/" xmlns:xsd="http://www.cfdi.xmlsoap.service.] El siguiente ejemplo es una respuesta de error.apache.sedeb2b. <?xml version="1. String password. 2.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.ediwinws.org/axis/">cfdiws.w3.edicom. El código del fichero en base64 ha sido resumido [.Funciones | 39 . el usuario debe autentificarse como usuario del servicio de CFDi y especificar cuales son los datos del comprobante de retenciones electrónicas para poder generar así la firma digital. LLAMADA: public byte[] getCfdiRetenciones(String user.12. GENERACIÓN DEL CFDI DE RETENCIONES ELECTRÓNICAS getCfdiRetenciones Permite realizar el timbrado del comprobante de retenciones electrónicas firmado por el cliente y devuelve el comprobante de retenciones electrónicas timbrado.org/2001/XMLSchema" xmlns:xsi="http://www. PARÁMETROS: • user: Usuario que va realizar la conexión.w3.WSCFDI EDICOM </getCfdiFromUUIDResponse> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.userException</faultcode> <faultstring>com.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.CFDiException: No se ha podido obtener el comprobante de los UUIDs enviados.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. Para poder implementar la llamada..ediwinws.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.edicom. printStackTrace(). Se trata del XML con la información del comprobante. } catch (RemoteException Re) { Re. el servicio devolverá un documento comprimido en formato ZIP con el CFDI de retenciones electrónicas con todos los datos generados. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1] . e integra el certificado del contribuyente expedido por el SAT. Este complemento incluye el número de folio asignado por el SAT. se dará respuesta al contribuyente incorporando un complemento sobre el documento según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1]. empleado en la construcción del “Sello Digital del Comprobante”. EJEMPLOS Código del cliente: public byte[] getCfdiRetenciones(String user. Si el CFDI de retenciones electrónicas cumple con las validaciones especificadas anteriormente. WSCFDI EDICOM | 2. Validaciones que contiene el servicio: • Verifica que el período de tiempo entre la fecha de envío del documento y la de recepción del documento para su certificación no exceda de 72 horas. • file: Fichero con los datos del comprobante de retenciones electrónicas firmados por el usuario. que el Certificado de Sello Digital (CSD) del contribuyente esté vigente en la fecha de generación del comprobante. como PSECFDI recibe a través del webservice el Comprobante del contribuyente para realizar todas las validaciones exigidas por el SAT y someterlo posteriormente al proceso de certificación final. • Verifica igualmente que el documento no haya sido certificado previamente.out.getText()). devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido.WSCFDI EDICOM • password: Contraseña del usuario que va realizar la conexión. y el sello del SAT. • Finalmente constata que la estructura del documento cumple con las especificaciones técnicas conforme a la Resolución Miscelánea Fiscal para 2014 y sucesivas modificaciones. file).printStackTrace(). • Respuesta satisfactoria: En caso de que se haya realizado la firma digital. o que no se haya enviado el fichero ZIP con el CFDI de retenciones electrónicas.Funciones | 40 . y que efectivamente corresponda dicho CSD al contribuyente que emite el documento. • Respuesta con errores: En caso de que haya algún error en el proceso de firma digital del CFDI de retenciones electrónicas. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. pass. } catch (CFDiException CFDIe) { CFDIe. String pass. fecha y hora de certificación y sello digital del CFDI de retenciones electrónicas. o que el CFDI de retenciones electrónicas enviado no es correcto sintácticamente según el esquema del SAT.getCfdiRetenciones(user. Edicom. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. RESPUESTA: El comprobante que se enviará al webservice es un XML que contiene la información de la factura. Dentro del mensaje SOAP. byte[] file) { try { cfdiService. System. Puede enviarse también comprimido en en formato ZIP.println("CFDiExcepcion: " + CFDIe. xmlsoap.ediwinws. El código del fichero en base64 ha sido resumido [.. System..org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiRetencionesResponse xmlns="http://cfdi.] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getCfdiRetenciones> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.] WSCFDI EDICOM | 2. } } Petición SOAP: <?xml version="1..toString()).service..w3..out.Funciones | 41 .ediwinws.service.org/2001/XMLSchema" xmlns:xsi="http://www.com"> <getCfdiRetencionesReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9GaXJtYV9 PS18xLlhNTN1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh9zgdR9 1fdq7ngc4QjbHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/23gle2 CQ [.org/soap/envelope/" xmlns:cfdi="http://cfdi.] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getCfdiRetencionesReturn> </getCfdiRetencionesResponse> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdiRetenciones> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [.edicom. <?xml version="1.WSCFDI EDICOM System. El código del fichero en base64 ha sido resumido [.out.org/soap/envelope/" xmlns:xsd="http://www. } catch (Exception e) { e.println("Exception: " + e.edicom.toString()).0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.println("RemoteExcepcion: " + Re.xmlsoap.printStackTrace().] Respuesta SOAP: El siguiente ejemplo es una respuesta de un envío de CFDI de retenciones electrónicas satisfactorio...w3.. Funciones | 42 .referencia> no está codificado en UTF8</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.apache. WSCFDI EDICOM | 2.sedeb2b.w3. <?xml version="1.org/axis/">cfdiws.w3.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: En este ejemplo concreto se presenta un error "301" indicando que el documento no está codificado en UTF-8.org/2001/XMLSchema" xmlns:xsi="http://www.WSCFDI EDICOM El siguiente ejemplo es una respuesta de error.com"> <ns1:cod>301</ns1:cod> <ns1:text>El documento &lt.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.ediwinws.SE3> no está codificado en UTF-8</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.userException</faultcode> <faultstring>com.xmlsoap.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.edicom.cfdi.service.service.ediwinws.CFDiException: El documento &lt.edicom.org/soap/envelope/" xmlns:xsd="http://www. PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante de retenciones electrónicas firmados por el usuario. • Verifica igualmente que el documento no haya sido certificado previamente. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI. y el sello del SAT. e integra el certificado del contribuyente expedido por el SAT. GENERACIÓN ELECTRÓNICAS DEL TIMBRE DEL CFDI DE RETENCIONES getTimbreCfdiRetenciones Permite realizar el timbrado del comprobante de retenciones electrónicas firmado por el cliente y devuelve el timbre del comprobante de retenciones electrónicas timbrado. byte[] file). Si el CFDI de retenciones electrónicas cumple con las validaciones especificadas anteriormente.WSCFDI EDICOM 2. LLAMADA: public byte[] getTimbreCfdiRetenciones(String user. que el Certificado de Sello Digital (CSD) del contribuyente esté vigente en la fecha de generación del comprobante. el usuario debe autentificarse como usuario del servicio de CFDi y especificar cuales son los datos del comprobante para poder generar así la firma digital. empleado en la construcción del “Sello Digital del Comprobante” según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1] . se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. fecha y hora de certificación y sello digital del CFDI. se dará respuesta al contribuyente con el timbre de la firma digital según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1]. RESPUESTA: El comprobante de retenciones electrónicas que se enviará al webservice es un XML que contiene la información de la factura. Dentro del mensaje SOAP. String password. Se trata del XML con la información del comprobante de retenciones electrónicas. Para poder implementar la llamada. y que efectivamente corresponda dicho CSD al contribuyente que emite el documento. WSCFDI EDICOM | 2. En cada llamada se puede generar un CFDI de retenciones electrónicas. como PSECFDI recibe a través del webservice el Comprobante de retenciones electrónicas del contribuyente para realizar todas las validaciones exigidas por el SAT y someterlo posteriormente al proceso de certificación final. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1].Funciones | 43 .13. Edicom. Validaciones que contiene el servicio: • Verifica que el período de tiempo entre la fecha de envío del documento y la de recepción del documento para su certificación no exceda de 72 horas. • Finalmente constata que la estructura del documento cumple con las especificaciones técnicas conforme a la Resolución Miscelánea Fiscal para 2014 y sucesivas modificaciones. Este timbre incluye el número de folio asignado por el SAT. Puede enviarse también comprimido en en formato ZIP. toString()).edicom. } catch (CFDiException CFDIe) { CFDIe. String pass.. System.printStackTrace().println("Exception: " + e.toString()). } catch (RemoteException Re) { Re.ediwinws. o que no se haya enviado el fichero ZIP con el CFDI de retenciones electrónicas.println("RemoteExcepcion: " + Re. el servicio devolverá un documento comprimido en formato ZIP con el timbre del CFDI de retenciones electrónicas firmado con todos los datos generados.println("CFDiExcepcion: " + CFDIe.printStackTrace(). } catch (Exception e) { e..] WSCFDI EDICOM | 2.printStackTrace(). System.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getTimbreCfdiRetenciones> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [.Funciones | 44 .out. byte[] file) { try { cfdiService.. • Respuesta con errores: En caso de que haya algún error en el proceso de firma digital del CFDI de retenciones electrónicas. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido.out.out.getText()). EJEMPLOS Código del cliente: public byte[] getTimbreCfdiRetenciones(String user. file). } } Petición SOAP: <?xml version="1.getTimbreCfdiRetenciones(user.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. El código del fichero en base64 ha sido resumido [.xmlsoap.. pass.] C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIA AAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA= =</cfdi:file> </cfdi:getTimbreCfdiRetenciones> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales. o que el CFDI de retenciones electrónicas enviado no es correcto sintácticamente según el esquema del SAT.org/soap/envelope/" xmlns:cfdi="http://cfdi. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema.service.WSCFDI EDICOM • Respuesta satisfactoria: En caso de que se haya realizado la firma digital. System. WSCFDI EDICOM Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de timbre satisfactoria.w3.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.ediwinws.w3. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/2001/XMLSchema-instance"> <soapenv:Body> <getTimbreCfdiRetencionesResponse xmlns="http://cfdi.com"> <ns1:cod>301</ns1:cod> <ns1:text>El documento &lt.sedeb2b.w3.service.SE3> no está codificado en UTF8</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml. 2.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.ediwinws.com"> <getTimbreCfdiRetencionesReturn>UEsDBBQACAAIAOxtfj0AAAAAAAAAAAAAAAATAAAAU0lHTl9Ga XJtYV9PS18xLlhNTN1Y2ZKryBF9d4T/gdCDXxQtsbS29u2ZYCkQEoUEArS8ONgESCxqQID4A3+Kf8GPnh 9zgdR91fdq7ngc4QjbHdGNlJWVdfJk5dJ8+bmKQqxw0yxI4tcO0cM7mBvbiRPE3mtH1/incefnn/74hy/ 23gle2CQ [.14.ediwinws. GENERACIÓN DEL CFDI DE RETENCIONES ELECTRÓNICAS EN TEST getCfdiRetencionesTest WSCFDI EDICOM | 2.org/soap/envelope/" xmlns:xsd="http://www.apache.service.org/axis/">cfdiws.edicom. <?xml version="1.SE3> no está codificado en UTF-8</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.userException</faultcode> <faultstring>com...CFDiException: El documento &lt.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.] mnvqtOHAGOdsvaUcv+wpHGUn1eygepprtwr5WvTT581Lu7+/1VdBvpURr8E1BLBwiieLVx4QkAAJ4UAAB QSwECFAAUAAgACADsbX49oni1ceEJAACeFAAAEwAAAAAAAAAAAAAAAAAAAAAAU0lHTl9GaXJtYV9PS18x LlhNTFBLBQYAAAAAAQABAEEAAAAiCgAAAAA=</getTimbreCfdiRetencionesReturn> </getTimbreCfdiRetencionesResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error.Funciones | 45 .cfdi.w3.org/2001/XMLSchema" xmlns:xsi="http://www.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.service.org/2001/XMLSchema" xmlns:xsi="http://www.edicom. String password. La ejecución de esta llamada no tiene en cuenta la limitaciones del servicio en producción para poder ser mas flexible a la hora de que se hagan las pruebas de conectividad con el webservice final. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1]. o que el CFDI de retenciones electrónicas enviado no es correcto sintácticamente según el esquema del SAT. RESPUESTA: Si el CFDI de retenciones electrónicas cumple con las validaciones especificadas anteriormente. Se trata de una llamada de TEST para poder hacer pruebas del funcionamiento del servicio. LLAMADA: public byte[] getCfdiRetencionesTest(String user. Validaciones omitidas en el entorno de TEST: • No se validan las 72 horas de tiempo entre la fecha del comprobante y la generación del timbre.WSCFDI EDICOM Permite realizar el timbrado del comprobante de retenciones electrónicas firmado por el cliente en modo de prueba y devuelve el comprobante timbrado. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. y no envía el CFDI de retenciones electrónicas al SAT.Funciones | 46 . Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI. fecha y hora de certificación y sello digital del CFDI. pero en caso de que el CFDI de retenciones electrónicas pase todas las validaciones que implementa el servicio. Se trata del XML con la información del comprobante de retenciones electrónicas. Dentro del mensaje SOAP. Estas validaciones omitidas permiten que se puedan hacer pruebas de funcionamiento con un juego reducido de comprobantes firmados sin necesidad de ir generando continuamente comprobantes timbrados. byte[] file). • Respuesta satisfactoria: En caso de que se haya realizado la firma digital. • Respuesta de error: En caso de que haya algún error en el proceso de firma digital del CFDI de retenciones electrónicas. por lo que al enviar varias veces el mismo documento se generan distintos timbres de TEST. Puede enviarse también comprimido en en formato ZIP. el servicio devolverá un documento comprimido en formato ZIP con el CFDI de retenciones electrónicas firmado con todos los datos generados. • No se tiene en cuenta el documento enviado. EJEMPLOS WSCFDI EDICOM | 2. se dará respuesta al contribuyente incorporando un complemento sobre el documento. Funciona exactamente igual que la función getCfdiRetenciones. PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante de retenciones electrónicas firmados por el usuario. genera un CFDI de retenciones electrónicas con un timbre no válido. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. Este complemento incluye el número de folio asignado por el SAT. o que no se haya enviado el fichero ZIP con el CFDI de retenciones electrónicas. y el sello del SAT. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. println("CFDiExcepcion: " + CFDIe.. pass.service.println("Exception: " + e.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getCfdiRetencionesTest> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hN+ +NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7/OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTok y4Ti037j1s2nVxDhFECTuyJIRJFHhffVN/7vzp7RsO68MogkmV2UUem8T2VEmmJnWFeMVflqhZCZYEDVd [.printStackTrace().] LPx2hwQfDj8YH5NQX5OlHyLeJYKNmrPNa1C2Qy59xh/9sq4/ZB2RfEvjSuv3+L1BLAQIUCxQAAAAIAOJk mD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIAAAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54b Wx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA==</cfdi:file> </cfdi:getCfdiRetencionesTest> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales. } } Petición SOAP: <?xml version="1. <?xml version="1.getCfdiRetencionesTest(user.xmlsoap.ediwinws. byte[] file) { try { cfdiService.org/soap/envelope/" xmlns:cfdi="http://cfdi.WSCFDI EDICOM Código del cliente: public byte[] getCfdiRetencionesTest(String user.w3.toString())..service. El código del fichero en base64 ha sido resumido [.edicom.out.org/soap/envelope/" xmlns:xsd="http://www. file). System.printStackTrace().] Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de CFDi en test satisfactoria..println("RemoteExcepcion: " + Re.out.ediwinws. String pass.getText()). System. } catch (Exception e) { e.w3.toString()).org/2001/XMLSchema" xmlns:xsi="http://www..org/2001/XMLSchema-instance"> <soapenv:Body> <getCfdiRetencionesTestResponse xmlns="http://cfdi.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. System. } catch (RemoteException Re) { Re.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. } catch (CFDiException CFDIe) { CFDIe.edicom.out.com"> WSCFDI EDICOM | 2.Funciones | 47 .xmlsoap.printStackTrace(). org/axis/">cfdiws.sedeb2b..userException</faultcode> <faultstring>com.CFDiException: El certificado &lt.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. genera un CFDI de retenciones electrónicas con un timbre no válido.w3. Funciona exactamente igual que la función getTimbreCfdiRetenciones.service.ediwinws.edicom.cfdi. pero en caso de que el CFDI de retenciones electrónicas pase todas las validaciones que implementa el servicio.> no ha sido expedido por el Servicio de Administración Tributaria</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.WSCFDI EDICOM <getCfdiRetencionesTestReturn>UEsDBBQACAAIANV9ND4AAAAAAAAAAAAAAAAjAAAAU0lHTl9zaW5 fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWztWNly67gRfU9V/oGlp6RcFhctllzjmQJJUCTNRVy1vKS4 ifsikhIp/cF8Sr5jfiygZN/re8eZTB5TuayiYaEbjdONA3SDP/3S5xl2DuomLouXETkmRlhQeKUfF+HLy DK [.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.edicom.15.ediwinws.apache.Funciones | 48 . GENERACIÓN DEL ELECTRÓNICAS EN TEST TIMBRE DEL CFDI DE RETENCIONES getTimbreCfdiRetencionesTest Permite realizar el timbrado del comprobante de retenciones electrónicas firmado por el cliente en modo de prueba y devuelve el timbre del comprobante de retenciones electrónicas timbrado.service.com"> <ns1:cod>308</ns1:cod> <ns1:text>El certificado &lt.org/2001/XMLSchema" xmlns:xsi="http://www.xmlsoap.] AAAAAAAAAAAAAAAAAAAAAU0lHTl9zaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWxQSwUGAAAAAAEA AQBRAAAAPgkAAAAA</getCfdiRetencionesTestReturn> </getCfdiRetencionesTestResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error. WSCFDI EDICOM | 2..> no ha sido expedido por el Servicio de Administración Tributaria</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. 2. Se trata de una llamada de TEST para poder hacer pruebas del funcionamiento del servicio.org/soap/envelope/" xmlns:xsd="http://www.w3. y no envía el comprobante de retenciones electrónicas al SAT. <?xml version="1. Se trata del XML con la información del comprobante de retenciones electrónicas. según lo especificado en el Anexo 20 de la Resolución Miscelánea Fiscal de 2014 [1]. PARÁMETROS: • user: Usuario que va realizar la conexión • password: Contraseña del usuario que va realizar la conexión • file: Fichero con los datos del comprobante de retenciones electrónicas firmados por el usuario. RESPUESTA: Si el CFDI de retenciones electrónicas cumple con las validaciones especificadas anteriormente. se enviarán los datos del fichero codificados en Base64 dentro del sobre de la llamada SOAP. fecha y hora de certificación y sello digital del CFDI de retenciones electrónicas. byte[] file) { try { cfdiService. file). pass. } catch (CFDiException CFDIe) { WSCFDI EDICOM | 2. Dentro del mensaje SOAP. y el sello del SAT. • Respuesta con error: En caso de que haya algún error en el proceso de firma digital del CFDI de retenciones electrónicas. o que no se haya enviado el fichero ZIP con el CFDI de retenciones electrónicas. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. EJEMPLOS Código del cliente: public byte[] getTimbreCfdiRetencionesTest(String user. por lo que al enviar varias veces el mismo documento se generan distintos timbres de TEST. Se adhiere igualmente como parte del complemento el número de serie del certificado digital del SAT con el que se realizó del certificación del CFDI. byte[] file).Funciones | 49 . Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. String pass. • No se tiene en cuenta el documento enviado. Validaciones omitidas en el entorno de TEST: • No se validan las 72 horas de tiempo entre la fecha del comprobante y la generación del timbre. el servicio devolverá un documento comprimido en formato ZIP con el timbre del CFDI de retenciones electrónicas con todos los datos generados. se dará respuesta al contribuyente con el timbre de la firma digital. • Respuesta satisfactoria: En caso de que se haya realizado la firma digital.getTimbreCfdiRetencionesTest(user. Estas validaciones omitidas permiten que se puedan hacer pruebas de funcionamiento con un juego reducido de comprobantes firmados sin necesidad de ir generando continuamente comprobantes timbrados. LLAMADA: public byte[] getTimbreCfdiRetencionesTest(String user. String password. Puede enviarse también comprimido en en formato ZIP.WSCFDI EDICOM La ejecución de esta llamada no tiene en cuenta la limitaciones del servicio en producción para poder ser mas flexible a la hora de que se hagan las pruebas de conectividad con el webservice final. Este timbre incluye el número de folio asignado por el SAT. o que el CFDI de retenciones electrónicas enviado no es correcto sintácticamente según el esquema del SAT. w3..ediwinws..org/soap/envelope/" xmlns:cfdi="http://cfdi.com"> <soapenv:Header/> <soapenv:Body> <cfdi:getTimbreCfdiRetencionesTest> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:file>UEsDBBQAAAAIAOJkmD0CMccqxQcAAFUSAAAfAAAAc2luX3RpbWJyYXJfX1hNTEltcF80Nz MyMDkueG1sfu1W2ZKjyhF991cQerKjY8SipVsdt+NAgoBzSJWgV4cbALEKkAC6Q/8Kf6O+2MupJ4ZzWI7 /OoYRaCSKrOyTh5OVeZvfwxFjp2jpk2r8m1CTokqxQcAAFUSAAqxQcAAFUSAAqxQcAAFUSAA [.println("RemoteExcepcion: " + Re.xmlsoap.toString()).xmlsoap.org/2001/XMLSchema" xmlns:xsi="http://www.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.toString()).edicom.. } catch (Exception e) { e.println("CFDiExcepcion: " + CFDIe.out. El código del fichero en base64 ha sido resumido [.getText()).com"> <getTimbreCfdiRetencionesTestReturn>UEsDBBQACAAIANV9ND4AAAAAAAAAAAAAAAAjAAAAU0lHT l9zaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWztWNly67gRfU9V/oGlp6RcFhctllzjmQJJUCTNRV y1vKS4ifsikhIp/cF8Sr5jfiygZN/re8eZTB5TuayiYaEbjdONA3SDP/3S5xl2DuomLouXETkmRlhQeKU fF [.out.out.Funciones | 50 .edicom..printStackTrace().] Respuesta SOAP: El siguiente ejemplo es una respuesta de generación de timbre de CFDI de retenciones electrónicas en test satisfactoria.service.] JkmD0CMccqxQcAAFUSAAAfAAAAAAAAAAEAIAAAAAAAAABzaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS5 4bWx+UEsFBgAAAAABAAEATQAAAAIIAAAAAA== </cfdi:file> </cfdi:getTimbreCfdiRetencionesTest> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.printStackTrace(). <?xml version="1...0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. } catch (RemoteException Re) { Re.ediwinws. } } Petición SOAP: <?xml version="1.println("Exception: " + e.org/soap/envelope/" xmlns:xsd="http://www. System. System. System.w3.service.org/2001/XMLSchema-instance"> <soapenv:Body> <getTimbreCfdiRetencionesTestResponse xmlns="http://cfdi.] AAAAAAAAAAAAAAAAAAAAAU0lHTl9zaW5fdGltYnJhcl9fWE1MSW1wXzQ3MzIwOS54bWxQSwUGAAAAAAEA AQBRAAAAPgkAAAAA</getTimbreCfdiRetencionesTestReturn> WSCFDI EDICOM | 2.WSCFDI EDICOM CFDIe.printStackTrace(). xmlsoap. byte[] pfx. String rfc.edicom.userException</faultcode> <faultstring>com.sedeb2b.16.D63558240D3051448088CED185C0832038A8735C></faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. Para poder implementar la llamada.D63558240D3051448088CED185C0832038A8735C></ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml. PARÁMETROS: • user: Usuario que va realizar la conexión WSCFDI EDICOM | 2.w3. String[] uuid. String password.edicom. el usuario debe autentificarse como usuario del servicio CFDi y especificar cuales son los comprobantes de retenciones electrónicas que quiere cancelar mediante los UUIDs de los comprobantes firmados digitalmente.org/soap/envelope/" xmlns:xsd="http://www.service.service.WSCFDI EDICOM </getTimbreCfdiRetencionesTestResponse> </soapenv:Body> </soapenv:Envelope> El siguiente ejemplo es una respuesta de error. LLAMADA: public CancelaResponse cancelaCFDiRetenciones(String user.apache.cfdi. 2. <?xml version="1.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. CANCELAR COMPROBANTES DE RETENCIONES ELECTRÓNICAS cancelaCFDiRetenciones Permite cancelar comprobantes de retenciones electrónicas timbrados.ediwinws.com"> <ns1:cod>307</ns1:cod> <ns1:text>El documento &lt.w3.org/axis/">cfdiws.SE1> ya ha sido firmado &lt.org/2001/XMLSchema" xmlns:xsi="http://www. En cada llamada se pueden cancelar varios comprobantes.Funciones | 51 .0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.SE1> ya ha sido firmado &lt.CFDiException: El documento &lt.ediwinws.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. String pfxPassword). System. • pfx: Certificado del cliente que quiere cancelar los CFDI. String pass.WSCFDI EDICOM • password: Contraseña del usuario que va realizar la conexión • rfc: RFC del usuario que está cancelando los CFDI • uuid: Lista de uuids que identifican los CFDI de retenciones electrónicas que quiere cancelar el usuario. uuid. Strind pfxPassword) { CancelaResponse cancelaResponse = null.printStackTrace(). String[] uuid. } catch (CFDiException CFDIe) { CFDIe.printStackTrace().toString()). pfxPassword). } catch (Exception e) { e.out.getText()). • PxfPassword: Password del certificado para poder realizar la firma de la petición con el certificado del usuario. se enviarán los datos del fichero pfx codificados en Base64 dentro del sobre de la llamada SOAP. EJEMPLOS Código del cliente: public CancelaResponse cancelaCFDiRetenciones(String user. Ejemplos de este tipo de excepciones sería por ejemplo que el usuario no se haya autentificado correctamente en el sistema. Dentro del mensaje SOAP.toString()).printStackTrace(). este acuse contiene el xml con la información de la petición de cancelación solicitada al SAT por parte de EDICOM.println("Exception: " + e. } catch (RemoteException Re) { Re. el servicio devolverá un listado de datos derivados de la cancelación: • uuids: Listado de CFDI que se han cancelado en la petición.out. Una vez decodificado. rfc. • Respuesta con errores: En caso de que haya algún error en el proceso de cancelación de los comprobantes de retenciones electrónicas. pfx. try { cancelaResponse = cfdiService.out. }return cancelaResponse. } WSCFDI EDICOM | 2. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la cancelación Satisfactoria de los comprobantes. • ack: Confirmación que devuelve el servicio del SAT como que la petición se ha realizado.println("CFDiExcepcion: " + CFDIe. System.Funciones | 52 . pass. Está codificado en base 64 y contiene el acuse de recibo expedido por el SAT para la cancelación. System. byte[] pfx.println("RemoteExcepcion: " + Re. incluyendo los códigos de ejecución del servicio por parte del SAT especificados en el Anexo 20. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. String rfc. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. o que no se haya enviado el certificado del usuario.cancelaCFDiRetenciones(user. ] Respuesta SOAP: Ejemplo de una respuesta de cancelación de comprobantes de retenciones electrónicas satisfactoria..ediwinws.service.org/soap/envelope/" xmlns:xsd="http://www.w3.w3.] Hzl11kfETcJiuMUNa5hOx5CiB2WqAg/tV9MDOdUZEkN4E+N9xxSxPAkSw75RvvVfRPW4JFXbmfs7c230a PodMQP58PfaJilI/Nm8cvAQXIEwRugMSUwIwYJKoZIhvcNAQkVMRYEFBlCuYgPj26y+M2HK9s6Tpe2Jmg CMDEwITAJBgUrDgMCGgUABBSz8OKBcbpiR69Tw0UJ1d1D2xW0EQQIar9uSxM7uToCAggA</cfdi:pfx> <cfdi:pfxPassword>qwertyuio</cfdi:pfxPassword> </cfdi:cancelaCFDiRetenciones> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales..] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> WSCFDI EDICOM | 2.xmlsoap.com"> <cancelaCFDiRetencionesReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.org/2001/XMLSchema" xmlns:xsi="http://www. El código del fichero en base64 ha sido resumido [.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiRetencionesResponse xmlns="http://cfdi..WSCFDI EDICOM Petición SOAP: <?xml version="1.xmlsoap.Funciones | 53 .edicom.com"> <soapenv:Header/> <soapenv:Body> <cfdi:cancelaCFDiRetenciones> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:rfc>RFC</cfdi:rfc> <cfdi:uuid>UUID1</cfdi:uuid> <cfdi:pfx>MIIJuQIBAzCCCX8GCSqGSIb3DQEHAaCCCXAEgglsMIIJaDCCBB8GCSqGSIb3DQEHBqCCBBA wggQMAgEAMIIEBQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIkI0BwQTfWEQCAggAgIID2DzPnHdO A4XWGeanHoCuRitvCJJecEBSkqvg8ohliY7IiVp8qF3agvOqt32kbEDXHfrLpVVhlPnjrZo4 [..org/soap/envelope/" xmlns:cfdi="http://cfdi.edicom.ediwinws...service.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas..] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [. <?xml version="1. Funciones | 54 . el tiempo de respuesta de esta función no depende del servicio de cancelación de EDICOM. En la ejecución de esta llamada hay que distinguir correctamente los códigos de error que genera el servicio de cancelación de EDICOM y los códigos de validación que devuelve el SAT en el acuse de recibo.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml. como se puede ver en el ejemplo anterior.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. Este proceso no es tan inmediato como el tiempo de generación del timbrado.service.xmlsoap.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. por lo que es necesario que se utilice un timeout considerable para estas peticiones de cancelación. CONSIDERACIONES IMPORTANTES Timeout de la llamada de esta función Hay que tener en cuenta que el proceso de cancelación depende directamente del proceso de cancelación del SAT. Por defecto.userException</faultcode> <faultstring>com.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.w3.org/2001/XMLSchema" xmlns:xsi="http://www.WSCFDI EDICOM </cancelaCFDiRetencionesReturn> </cancelaCFDiRetencionesResponse> </soapenv:Body> </soapenv:Envelope> Ejemplo de una respuesta de error.ediwinws. Gestión de errores. <?xml version="1. Se recomienda utilizar para esta llamada un timeout no inferior a 2 minutos para evitar que venza la llamada por timeout y se pierda la respuesta de la petición del servicio.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.w3.apache.org/soap/envelope/" xmlns:xsd="http://www.CFDiException: No se ha podido cancelar los UUIDs especificados.edicom.sedeb2b. que puede llegar a ser insuficiente para la correcta ejecución de esta función. Por tanto.service.edicom. los clientes de webservice suelen tener un timeout de 30 segundos.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados. WSCFDI EDICOM | 2. devuelve un objeto soapenv:Fault en la respuesta del servicio. sino que depende directamente del tiempo de proceso de los servidores del SAT.cfdi.org/axis/">cfdiws.ediwinws. La respuesta errónea del servicio de EDICOM. Este objeto contiene un objeto ns1:cod con el código de error que proporciona EDICOM para la ejecución del servicio. com"> <cancelaCFDiRetencionesReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.org/soap/envelope/" xmlns:xsd="http://www. Dentro de este acuse de recibo se encuentran los códigos de ejecución de la cancelación del comprobante por parte del SAT.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. Ejemplo de una respuesta de cancelación de comprobantes de retenciones electrónicas satisfactoria. Más concretamente en el objeto ack dentro del cancelaCFDiReturn..ediwinws.w3.WSCFDI EDICOM Ejemplo de una respuesta de error del servicio de EDICOM.org/axis/">cfdiws.userException</faultcode> <faultstring>com.xmlsoap. Estos códigos de ejecución del SAT están contemplados en el Anexo 20.org/2001/XMLSchema" xmlns:xsi="http://www.sedeb2b.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml.edicom.] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [..edicom.CFDiException: No se ha podido cancelar los UUIDs especificados.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiRetencionesResponse xmlns="http://cfdi...org/2001/XMLSchema" xmlns:xsi="http://www.ediwinws.xmlsoap.service.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.w3. <?xml version="1.org/soap/envelope/" xmlns:xsd="http://www.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> WSCFDI EDICOM | 2.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> La respuesta que devuelve el SAT está contenida dentro de la respuesta correcta del servicio de EDICOM. <?xml version="1.cfdi.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados.apache.Funciones | 55 .service.w3.service.ediwinws.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. PARÁMETROS: • user: Usuario que va realizar la conexión. • password: Contraseña del usuario que va realizar la conexión. el usuario debe autentificarse como usuario del servicio CFDi.WSCFDI EDICOM </uuids> </cancelaCFDiRetencionesReturn> </cancelaCFDiRetencionesResponse> </soapenv:Body> </soapenv:Envelope> Ambos códigos son totalmente independientes. Dentro del mensaje SOAP. Está codificado en base 64 y contiene el acuse de recibo expedido por el SAT para la cancelación. y no deben confundirse ya que corresponden a códigos de EDICOM y del SAT respectivamente. Ejemplos de este tipo de excepciones sería por WSCFDI EDICOM | 2. Esta petición firmada se envía directamente al webservice para que genere la petición de cancelación a partir de esos datos firmados LLAMADA: public CancelaResponse cancelaCFDiRetencionesSigned(String user. • sign: Petición de cancelación de comprobantes de retenciones electrónicas firmada por el propio cliente. el cliente tiene que implementar la petición de cancelación de los comprobantes de retenciones electrónicas timbrados que quieren cancelar y firmarla.Funciones | 56 . En este caso. • Respuesta con errores: En caso de que haya algún error en el proceso de cancelación de los comprobantes de retenciones electrónicas. RESPUESTA: • Respuesta satisfactoria: En caso de que se haya realizado la cancelación satisfactoria de los comprobantes. byte[] sign). • ack: Confirmación que devuelve el servicio del SAT como que la petición se ha realizado. se enviarán los datos de la cancelación codificados en Base64 dentro del sobre de la llamada SOAP. incluyendo los códigos de ejecución del servicio por parte del SAT especificados en el Anexo 20. este acuse contiene el xml con la información de la petición de cancelación solicitada al SAT por parte de EDICOM. Para poder implementar la llamada. 2. devolverá una excepción que contendrá un código de error y un mensaje de texto con el error producido. Una vez decodificado. el servicio devolverá un listado de datos derivados de la cancelación: • uuids: Listado de comprobantes de retenciones electrónicas que se han cancelado en la petición. String password.17. CANCELAR COMPROBANTES DE RETENCIONES ELECTRÓNICAS FIRMADO cancelaCFDiRetencionesSigned Permite cancelar comprobantes de retenciones electrónicas timbrados. o que no se haya enviado el certificado del usuario.edicom. System. } catch (Exception e) { e. System.printStackTrace(). try { cancelaResponse = cfdiService. byte[] sign) { CancelaResponse cancelaResponse = null. } catch (CFDiException CFDIe) { CFDIe. System.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.com"> <soapenv:Header/> <soapenv:Body> <cfdi:cancelaCFDiRetencionesSigned> <cfdi:user>xxxxxx</cfdi:user> <cfdi:password>xxxxxx</cfdi:password> <cfdi:sign>PENhbmNlbGFjaW9uIEZlY2hhPSIyMDExLTA3LTEzVDE3OjIzOjQ0LjU4OVoiIFJmY0VtaX Nvcj0iWlVOMTAwNjIzNjYzIiB4bWxucz0iaHR0cDovL2NhbmNlbGFjZmQuc2F0LmdvYi5teCIgeG1sbnM 6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHR[. WSCFDI EDICOM | 2.toString()). El código del fichero en base64 ha sido resumido [..println("Exception: " + e. } catch (RemoteException Re) { Re.. EJEMPLOS Código del cliente: public CancelaResponse cancelaCFDiRetencionesSigned(String user.out.println("RemoteExcepcion: " + Re.printStackTrace().out. Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error.ediwinws.out. pass..] Respuesta SOAP: Ejemplo de una respuesta de cancelación de comprobantes de retenciones electrónicas firmada satisfactoria.printStackTrace().getText()).WSCFDI EDICOM ejemplo que el usuario no se haya autentificado correctamente en el sistema. String pass.] rS3FtdU1vTU9QaVcyYWQ1cEF3UlpKL0JBcmMrODBqTWNWZ1VkNEtSdVdMOG4vc05jNUhsTEd5Q3RvMTRZ UXhHUDkwdkNiV2xlUT09PC9YNTA5Q2VydGlmaWNhdGU+PC9YNTA5RGF0YT48L0tleUluZm8+PC9TaWduY XR1cmU+PC9DYW5jZWxhY2lvbj4=</cfdi:sign> </cfdi:cancelaCFDiRetencionesSigned> </soapenv:Body> </soapenv:Envelope> Nota: Los datos que aparecen en este ejemplo no son reales.Funciones | 57 . sign).cancelaCFDiRetencionesSigned(user.service.org/soap/envelope/" xmlns:cfdi="http://cfdi. } return cancelaResponse.println("CFDiExcepcion: " + CFDIe.xmlsoap.. } Petición SOAP: <?xml version="1.toString()). ediwinws..w3.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiRetencionesSignedReturn> </cancelaCFDiRetencionesSignedResponse> </soapenv:Body> </soapenv:Envelope> Ejemplo de una respuesta de error.WSCFDI EDICOM <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/soap/envelope/" xmlns:xsd="http://www.w3.w3.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Nota: Para ver una lista completa de los posibles códigos de error y respuestas asociadas consultar el punto Lista de Códigos de Error. WSCFDI EDICOM | 2.com"> <cancelaCFDiRetencionesSignedReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [...org/axis/">cfdiws.org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiRetencionesSignedResponse xmlns="http://cfdi.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.sedeb2b.service.cfdi..apache.edicom.ediwinws.xmlsoap.Funciones | 58 .service. <?xml version="1.org/2001/XMLSchema" xmlns:xsi="http://www.w3.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados.edicom.edicom.CFDiException: No se ha podido cancelar los UUIDs especificados.] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [.xmlsoap.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml.userException</faultcode> <faultstring>com.service.ediwinws.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.org/2001/XMLSchema" xmlns:xsi="http://www.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi.org/soap/envelope/" xmlns:xsd="http://www. Funciones | 59 . Dentro de este acuse de recibo se encuentran los códigos de ejecución de la cancelación del comprobante por parte del SAT. el tiempo de respuesta de esta función no depende del servicio de cancelación de EDICOM.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. los clientes de webservice suelen tener un timeout de 30 segundos.ediwinws.CFDiException: No se ha podido cancelar los UUIDs especificados. Gestión de errores.org/soap/envelope/" xmlns:xsd="http://www. por lo que es necesario que se utilice un timeout considerable para estas peticiones de cancelación.</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. sino que depende directamente del tiempo de proceso de los servidores del SAT. Este objeto contiene un objeto ns1:cod con el código de error que proporciona EDICOM para la ejecución del servicio. Estos códigos de ejecución del SAT están contemplados en el Anexo 20.service. WSCFDI EDICOM | 2.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. como se puede ver en el ejemplo anterior. La respuesta errónea del servicio de EDICOM.WSCFDI EDICOM CONSIDERACIONES IMPORTANTES Timeout de la llamada de esta función Hay que tener en cuenta que el proceso de cancelación depende directamente del proceso de cancelación del SAT. En la ejecución de esta llamada hay que distinguir correctamente los códigos de error que genera el servicio de cancelación de EDICOM y los códigos de validación que devuelve el SAT en el acuse de recibo.apache.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> La respuesta que devuelve el SAT está contenida dentro de la respuesta correcta del servicio de EDICOM.xmlsoap.com"> <ns1:cod>201</ns1:cod> <ns1:text>No se ha podido cancelar los UUIDs especificados.ediwinws. Por defecto.cfdi. que puede llegar a ser insuficiente para la correcta ejecución de esta función.org/axis/">cfdiws.sedeb2b. Ejemplo de una respuesta de error del servicio de EDICOM.userException</faultcode> <faultstring>com. Este proceso no es tan inmediato como e tiempo de generación del timbrado.</ns1:text> </ns1:fault> <ns2: xmlns:ns2="http://xml. Se recomienda utilizar para esta llamada un timeout no inferior a 2 minutos para evitar que venza la llamada por timeout y se pierda la respuesta de la petición del servicio. <?xml version="1.edicom. Por tanto.w3.service.org/2001/XMLSchema" xmlns:xsi="http://www. Más concretamente en el objeto ack dentro del cancelaCFDiReturn. devuelve un objeto soapenv:Fault en la respuesta del servicio. edicom.w3..xmlsoap.] +PC9hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNF bWlzb3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlb GFDRkRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</ack> <text>1c550dd7-2209-4c45-acdf -b86b6cf3723e~PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB 4bWxuczpzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT4Q [..org/2001/XMLSchema" xmlns:xsi="http://www.service.Funciones | 60 .ediwinws..org/2001/XMLSchema-instance"> <soapenv:Body> <cancelaCFDiRetencionesSignedResponse xmlns="http://cfdi. WSCFDI EDICOM | 2.org/soap/envelope/" xmlns:xsd="http://www. y no deben confundirse ya que corresponden a códigos de EDICOM y del SAT respectivamente.. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.w3.WSCFDI EDICOM Ejemplo de una respuesta de cancelación de comprobantes de retenciones electrónicas satisfactoria.com"> <cancelaCFDiRetencionesSignedReturn> <ack>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48czpFbnZlbG9wZSB4bWxuczpz PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHM6Qm9keT48Q2FuY2VsY UNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5vcmcvIj48Q2FuY2VsYUNGRF [.] hOkFjdXNlRm9saW9zPjwvYTpGb2xpb3M+PGE6U2VsbG9TQVQgaTpuaWw9InRydWUiLz48YTpyZmNFbWlz b3I+U0FULTI4MDkxMC0wMDE8L2E6cmZjRW1pc29yPjwvQ2FuY2VsYUNGRFJlc3VsdD48L0NhbmNlbGFDR kRSZXNwb25zZT48L3M6Qm9keT48L3M6RW52ZWxvcGU+</text> <uuids> <uuids>1c550dd7-2209-4c45-acdf-b86b6cf3723e</uuids> </uuids> </cancelaCFDiRetencionesSignedReturn> </cancelaCFDiRetencionesSignedResponse> </soapenv:Body> </soapenv:Envelope> Ambos códigos son totalmente independientes. 304 El CSD del emisor ha sido revocado. • La fecha de emisión del comprobante no puede ser anterior al 01 de Enero de 2011. 302 El sello del emisor no es válido. • Error al verificar la firma del documento <referencia>. • El certificado <serialRfc> ya no es válido para la fecha del documento <referencia> <fecha_documento>. Código Error 301 El comprobante no cumple con el estándar XML (Conforme al W3C) o con la estructura XML (XSD y complementos aplicables). • El documento <referencia> ya ha sido timbrado previamente por algún PAC con UUID <uuid>. El CFDi fue firmado de manera incorrecta. • El documento <referencia> contiene Addenda.1. • El certificado <serialRfc> no ha sido expedido por el Servicio de Administración Tributaria. 402 El RFC no existe conforme al régimen autorizado (Lista de validación de régimen) LCO. El RFC <emisorRfc> no está autorizado a firmar (según LCO). La fecha es posterior a la actual. Han pasado más de 72 horas desde su generación. INTRODUCCIÓN El SAT ha publicado una lista estándar de códigos de error (códigos del 301 al 403) aplicables a las respuestas no satisfactorias. • No puede firmarse el documento <referencia> con fecha <fecha>. y también otras situaciones de error directamente relacionadas con la aplicación de Edicom. • Error al verificar la firma del documento <referencia>. 403 La fecha de emisión es anterior al 01 de Enero de 2011. El servicio CFDi de Edicom detecta estos errores. 306 La llave utilizada para sellar corresponde a un FIEL (no a un CSD). 401 La fecha de generación es mayor a 72 horas de la emisión del timbre.Lista de Códigos de Error | 61 . • El documento <referencia> no está firmado. no es un CSD. 303 El CSD del emisor no corresponde al RFC que viene como emisor en el comprobante. • El documento no es correcto sintácticamente. Se indican también las posibles respuestas literales causadas de estos errores. utilizando la lista de LCO. • El documento <referencia> no esta codificado en UTF-8. 307 Contiene un timbre previo. • El certificado <serialRfc> es de tipo FIEL. • El certificado <serialRfc> todavía no es válido para la fecha del documento <referencia> <fecha_documento>. 305 La fecha de emisión no está dentro de la vigencia del CSD del emisor. CÓDIGOS DEFINIDOS POR EL SAT Estos códigos han sido definidos como códigos de error estándar por el SAT. LISTA DE CÓDIGOS DE ERROR 3. 308 El CSD del emisor no ha sido firmado por un certificado de autoridad del SAT. WSCFDI EDICOM | 3. • No puede firmarse el documento <referencia> con fecha <fecha>.WSCFDI EDICOM 3. • El documento <referencia> ya ha sido firmado <hash>. • El certificado <serialRfc> del RFC <emisorRfc> ha sido revocado (según LCO). El CFDi fue firmado de manera incorrecta. • El certificado <serialRfc> con el que se ha firmado el documento <referencia> no pertenece al rfc <emisorRfc>. • No se ha podido comprobar el UUID del comprobante. • La contraseña no puede ser la misma que la que había anteriormente.service.sedeb2b.org/axis/">cfdiws.org/2001/XMLSchema" xmlns:xsi="http://www.SE3> no está codificado en UTF-8</faultstring> <detail> <ns1:fault xmlns:ns1="http://cfdi. • No se ha podido obtener los acuses de envío de los UUIDs especificados. • El usuario <username> no es un usuario válido. EJEMPLO DE UNA RESPUESTA DE ERROR <?xml version="1. • No se ha podido obtener los CFDi de los UUIDs especificados.CFDiException: El documento &lt.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server. 201 No se ha podido cancelar los comprobantes. • Se han producido errores al ejecutar el servicio de CFDi. 404 Error de autentificación en el servicio.WSCFDI EDICOM CÓDIGOS DEFINIDOS POR EDICOM Estos códigos afectan a errores relacionados con la aplicación de EDICOM. Código Error 200 No se ha podido cambiar el password del usuario.Lista de Códigos de Error | 62 .ediwinws. • No se ha podido cancelar los UUIDs especificados. • No se ha enviado ningún rfc para ejecutar el servicio de búsqueda de comprobantes.cfdi. Compruebe que el documento a firmar sea correcto. • No se ha enviado ningún UUID para ejecutar el servicio de obtención de acuses de los comprobantes. 300 Error genérico de la aplicación.com"> <ns1:cod>301</ns1:cod> <ns1:text>El documento &lt. 202 No se ha podido comprobar el UUID del comprobante.com</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> WSCFDI EDICOM | 3. • No se ha enviado ningún UUID para ejecutar el servicio de búsqueda de comprobantes.ediwinws.service.edicom.userException</faultcode> <faultstring>com. 203 No se ha podido obtener la respuesta de la petición de generación del comprobante.apache.xmlsoap. • Se ha producido un error al intentar cambiar el password.w3.org/soap/envelope/" xmlns:xsd="http://www.referencia> no está codificado en UTF8</ns1:text> </ns1:fault> <ns2:hostname xmlns:ns2="http://xml. Se indican también los posibles escenarios en que se presentan estos errores.edicom.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas. • La contraseña no cumple las restricciones avanzadas. 204 No se ha podido obtener el comprobante de los UUIDs enviados. edicom.ediwinws. 2006 (06:55:48 PDT)--> <wsdl:types> <schema elementFormDefault="qualified" targetNamespace="http://cfdi.com" xmlns:intf="http://cfdi.org/2001/XMLSchema"> <element name="getUUID"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getUUIDResponse"> <complexType> <sequence> <element name="getUUIDReturn" type="xsd:string"/> </sequence> </complexType> </element> <complexType name="CFDiException"> <sequence> <element name="cod" type="xsd:int"/> <element name="text" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="fault" type="impl:CFDiException"/> <element name="changePassword"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> WSCFDI EDICOM | 4.WSCFDI EDICOM 4.com" xmlns:apachesoap="http://xml.service.edicom.service. ANEXO: WSDL 4.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://cfdi.w3.org/wsdl/" xmlns:wsdlsoap="http://schemas.ediwinws.ediwinws.com" xmlns:wsdl="http://schemas.org/wsdl/soap/" xmlns:xsd="http://www.1.com" xmlns="http://www.Anexo: WSDL | 63 .edicom.xmlsoap.service.org/2001/XMLSchema"> <!--WSDL created by Apache Axis version: 1.edicom. WSDL WEBSERVICE CFDI El contenido del WSDL del servicio es el siguiente: <?xml version="1.xmlsoap.apache.4 Built on Apr 22.ediwinws.service.org/xml-soap" xmlns:impl="http://cfdi.w3. WSCFDI EDICOM <element name="newPassword" type="xsd:string"/> </sequence> </complexType> </element> <element name="changePasswordResponse"> <complexType> <sequence> <element name="changePasswordReturn" type="xsd:boolean"/> </sequence> </complexType> </element> <element name="getTimbreCfdiRetencionesTest"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getTimbreCfdiRetencionesTestResponse"> <complexType> <sequence> <element name="getTimbreCfdiRetencionesTestReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdi"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiResponse"> <complexType> <sequence> <element name="getCfdiReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getTimbreCfdiTest"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> WSCFDI EDICOM | 4.Anexo: WSDL | 64 . WSCFDI EDICOM <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getTimbreCfdiTestResponse"> <complexType> <sequence> <element name="getTimbreCfdiTestReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDiRetenciones"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="rfc" type="xsd:string"/> <element maxOccurs="unbounded" name="uuid" type="xsd:string"/> <element name="pfx" type="xsd:base64Binary"/> <element name="pfxPassword" type="xsd:string"/> </sequence> </complexType> </element> <element name="cancelaCFDiRetencionesResponse"> <complexType> <sequence> <element name="cancelaCFDiRetencionesReturn" type="impl:CancelaResponse"/> </sequence> </complexType> </element> <complexType name="ArrayOf_xsd_string"> <sequence> <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:string"/> </sequence> </complexType> <complexType name="CancelaResponse"> <sequence> <element name="ack" nillable="true" type="xsd:string"/> <element name="text" nillable="true" type="xsd:string"/> <element name="uuids" nillable="true" type="impl:ArrayOf_xsd_string"/> </sequence> </complexType> <element name="getCfdiRetencionesTest"> <complexType> <sequence> WSCFDI EDICOM | 4.Anexo: WSDL | 65 . Anexo: WSDL | 66 .WSCFDI EDICOM <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiRetencionesTestResponse"> <complexType> <sequence> <element name="getCfdiRetencionesTestReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDiRetencionesSigned"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="sign" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDiRetencionesSignedResponse"> <complexType> <sequence> <element name="cancelaCFDiRetencionesSignedReturn" type="impl:CancelaResponse"/> </sequence> </complexType> </element> <element name="exportCfdi"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="rfc" type="xsd:string"/> <element name="iniDate" type="xsd:dateTime"/> <element name="endDate" type="xsd:dateTime"/> </sequence> </complexType> </element> <element name="exportCfdiResponse"> <complexType> <sequence> <element name="exportCfdiReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> WSCFDI EDICOM | 4. Anexo: WSDL | 67 .WSCFDI EDICOM <element name="getUUIDTest"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getUUIDTestResponse"> <complexType> <sequence> <element name="getUUIDTestReturn" type="xsd:string"/> </sequence> </complexType> </element> <element name="getTimbreCfdi"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getTimbreCfdiResponse"> <complexType> <sequence> <element name="getTimbreCfdiReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiTest"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiTestResponse"> <complexType> <sequence> <element name="getCfdiTestReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDi"> WSCFDI EDICOM | 4. WSCFDI EDICOM <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="rfc" type="xsd:string"/> <element maxOccurs="unbounded" name="uuid" type="xsd:string"/> <element name="pfx" type="xsd:base64Binary"/> <element name="pfxPassword" type="xsd:string"/> </sequence> </complexType> </element> <element name="cancelaCFDiResponse"> <complexType> <sequence> <element name="cancelaCFDiReturn" type="impl:CancelaResponse"/> </sequence> </complexType> </element> <element name="getTimbreCfdiRetenciones"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getTimbreCfdiRetencionesResponse"> <complexType> <sequence> <element name="getTimbreCfdiRetencionesReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDiSigned"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="sign" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="cancelaCFDiSignedResponse"> <complexType> <sequence> WSCFDI EDICOM | 4.Anexo: WSDL | 68 . WSCFDI EDICOM <element name="cancelaCFDiSignedReturn" type="impl:CancelaResponse"/> </sequence> </complexType> </element> <element name="getCfdiRetenciones"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="file" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiRetencionesResponse"> <complexType> <sequence> <element name="getCfdiRetencionesReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiFromUUID"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element name="rfc" type="xsd:string"/> <element maxOccurs="unbounded" name="uuid" type="xsd:string"/> </sequence> </complexType> </element> <element name="getCfdiFromUUIDResponse"> <complexType> <sequence> <element name="getCfdiFromUUIDReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> <element name="getCfdiAck"> <complexType> <sequence> <element name="user" type="xsd:string"/> <element name="password" type="xsd:string"/> <element maxOccurs="unbounded" name="uuid" type="xsd:string"/> </sequence> </complexType> </element> WSCFDI EDICOM | 4.Anexo: WSDL | 69 . WSCFDI EDICOM <element name="getCfdiAckResponse"> <complexType> <sequence> <element name="getCfdiAckReturn" type="xsd:base64Binary"/> </sequence> </complexType> </element> </schema> </wsdl:types> <wsdl:message name="getTimbreCfdiTestResponse"> <wsdl:part element="impl:getTimbreCfdiTestResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiRetencionesResponse"> <wsdl:part element="impl:cancelaCFDiRetencionesResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiFromUUIDResponse"> <wsdl:part element="impl:getCfdiFromUUIDResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getUUIDResponse"> <wsdl:part element="impl:getUUIDResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiRetencionesResponse"> <wsdl:part element="impl:getTimbreCfdiRetencionesResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiResponse"> <wsdl:part element="impl:getCfdiResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiTestResponse"> <wsdl:part element="impl:getCfdiTestResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiTestRequest"> <wsdl:part element="impl:getTimbreCfdiTest" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getUUIDRequest"> <wsdl:part element="impl:getUUID" name="parameters"> </wsdl:part> WSCFDI EDICOM | 4.Anexo: WSDL | 70 . WSCFDI EDICOM </wsdl:message> <wsdl:message name="cancelaCFDiSignedRequest"> <wsdl:part element="impl:cancelaCFDiSigned" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiRequest"> <wsdl:part element="impl:getTimbreCfdi" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiSignedResponse"> <wsdl:part element="impl:cancelaCFDiSignedResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiRetencionesTestRequest"> <wsdl:part element="impl:getCfdiRetencionesTest" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiResponse"> <wsdl:part element="impl:cancelaCFDiResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiResponse"> <wsdl:part element="impl:getTimbreCfdiResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiTestRequest"> <wsdl:part element="impl:getCfdiTest" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getUUIDTestResponse"> <wsdl:part element="impl:getUUIDTestResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="changePasswordRequest"> <wsdl:part element="impl:changePassword" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="exportCfdiRequest"> <wsdl:part element="impl:exportCfdi" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiRetencionesRequest"> <wsdl:part element="impl:getTimbreCfdiRetenciones" name="parameters"> </wsdl:part> WSCFDI EDICOM | 4.Anexo: WSDL | 71 . WSCFDI EDICOM </wsdl:message> <wsdl:message name="cancelaCFDiRetencionesSignedRequest"> <wsdl:part element="impl:cancelaCFDiRetencionesSigned" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiRetencionesRequest"> <wsdl:part element="impl:cancelaCFDiRetenciones" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="CFDiException"> <wsdl:part element="impl:fault" name="fault"> </wsdl:part> </wsdl:message> <wsdl:message name="getUUIDTestRequest"> <wsdl:part element="impl:getUUIDTest" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiRequest"> <wsdl:part element="impl:cancelaCFDi" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiRetencionesTestResponse"> <wsdl:part element="impl:getCfdiRetencionesTestResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiAckResponse"> <wsdl:part element="impl:getCfdiAckResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiAckRequest"> <wsdl:part element="impl:getCfdiAck" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiRetencionesResponse"> <wsdl:part element="impl:getCfdiRetencionesResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="exportCfdiResponse"> <wsdl:part element="impl:exportCfdiResponse" ame="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiRequest"> <wsdl:part element="impl:getCfdi" name="parameters"> </wsdl:part> WSCFDI EDICOM | 4.Anexo: WSDL | 72 . Anexo: WSDL | 73 .WSCFDI EDICOM </wsdl:message> <wsdl:message name="getCfdiFromUUIDRequest"> <wsdl:part element="impl:getCfdiFromUUID" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getCfdiRetencionesRequest"> <wsdl:part element="impl:getCfdiRetenciones" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="changePasswordResponse"> <wsdl:part element="impl:changePasswordResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiRetencionesTestRequest"> <wsdl:part element="impl:getTimbreCfdiRetencionesTest" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="getTimbreCfdiRetencionesTestResponse"> <wsdl:part element="impl:getTimbreCfdiRetencionesTestResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="cancelaCFDiRetencionesSignedResponse"> <wsdl:part element="impl:cancelaCFDiRetencionesSignedResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:portType name="CFDi"> <wsdl:operation name="getUUID"> <wsdl:input message="impl:getUUIDRequest" name="getUUIDRequest"> </wsdl:input> <wsdl:output message="impl:getUUIDResponse" name="getUUIDResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="changePassword"> <wsdl:input message="impl:changePasswordRequest" name="changePasswordRequest"> </wsdl:input> <wsdl:output message="impl:changePasswordResponse" name="changePasswordResponse"> </wsdl:output> WSCFDI EDICOM | 4. WSCFDI EDICOM <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiRetencionesTest"> <wsdl:input message="impl:getTimbreCfdiRetencionesTestRequest" name="getTimbreCfdiRetencionesTestRequest"> </wsdl:input> <wsdl:output message="impl:getTimbreCfdiRetencionesTestResponse" name="getTimbreCfdiRetencionesTestResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdi"> <wsdl:input message="impl:getCfdiRequest" name="getCfdiRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiResponse" name="getCfdiResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiTest"> <wsdl:input message="impl:getTimbreCfdiTestRequest" name="getTimbreCfdiTestRequest"> </wsdl:input> <wsdl:output message="impl:getTimbreCfdiTestResponse" name="getTimbreCfdiTestResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiRetenciones"> <wsdl:input message="impl:cancelaCFDiRetencionesRequest" name="cancelaCFDiRetencionesRequest"> </wsdl:input> <wsdl:output message="impl:cancelaCFDiRetencionesResponse" name="cancelaCFDiRetencionesResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiRetencionesTest"> WSCFDI EDICOM | 4.Anexo: WSDL | 74 . Anexo: WSDL | 75 .WSCFDI EDICOM <wsdl:input message="impl:getCfdiRetencionesTestRequest" name="getCfdiRetencionesTestRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiRetencionesTestResponse" name="getCfdiRetencionesTestResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiRetencionesSigned"> <wsdl:input message="impl:cancelaCFDiRetencionesSignedRequest" name="cancelaCFDiRetencionesSignedRequest"> </wsdl:input> <wsdl:output message="impl:cancelaCFDiRetencionesSignedResponse" name="cancelaCFDiRetencionesSignedResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="exportCfdi"> <wsdl:input message="impl:exportCfdiRequest" name="exportCfdiRequest"> </wsdl:input> <wsdl:output message="impl:exportCfdiResponse" name="exportCfdiResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getUUIDTest"> <wsdl:input message="impl:getUUIDTestRequest" name="getUUIDTestRequest"> </wsdl:input> <wsdl:output message="impl:getUUIDTestResponse" name="getUUIDTestResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdi"> <wsdl:input message="impl:getTimbreCfdiRequest" name="getTimbreCfdiRequest"> </wsdl:input> <wsdl:output message="impl:getTimbreCfdiResponse" name="getTimbreCfdiResponse"> </wsdl:output> WSCFDI EDICOM | 4. Anexo: WSDL | 76 .WSCFDI EDICOM <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiTest"> <wsdl:input message="impl:getCfdiTestRequest" name="getCfdiTestRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiTestResponse" name="getCfdiTestResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDi"> <wsdl:input message="impl:cancelaCFDiRequest" name="cancelaCFDiRequest"> </wsdl:input> <wsdl:output message="impl:cancelaCFDiResponse" name="cancelaCFDiResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiRetenciones"> <wsdl:input message="impl:getTimbreCfdiRetencionesRequest" name="getTimbreCfdiRetencionesRequest"> </wsdl:input> <wsdl:output message="impl:getTimbreCfdiRetencionesResponse" name="getTimbreCfdiRetencionesResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiSigned"> <wsdl:input message="impl:cancelaCFDiSignedRequest" name="cancelaCFDiSignedRequest"> </wsdl:input> <wsdl:output message="impl:cancelaCFDiSignedResponse" name="cancelaCFDiSignedResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiRetenciones"> WSCFDI EDICOM | 4. WSCFDI EDICOM <wsdl:input message="impl:getCfdiRetencionesRequest" name="getCfdiRetencionesRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiRetencionesResponse" name="getCfdiRetencionesResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiFromUUID"> <wsdl:input message="impl:getCfdiFromUUIDRequest" name="getCfdiFromUUIDRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiFromUUIDResponse" name="getCfdiFromUUIDResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiAck"> <wsdl:input message="impl:getCfdiAckRequest" name="getCfdiAckRequest"> </wsdl:input> <wsdl:output message="impl:getCfdiAckResponse" name="getCfdiAckResponse"> </wsdl:output> <wsdl:fault message="impl:CFDiException" name="CFDiException"> </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:binding name="CFDiSoapBinding" type="impl:CFDi"> <wsdlsoap:binding style="document" transport="http://schemas.Anexo: WSDL | 77 .org/soap/http"/> <wsdl:operation name="getUUID"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getUUIDRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getUUIDResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="changePassword"> <wsdlsoap:operation soapAction=""/> WSCFDI EDICOM | 4.xmlsoap. Anexo: WSDL | 78 .WSCFDI EDICOM <wsdl:input name="changePasswordRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="changePasswordResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiRetencionesTest"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getTimbreCfdiRetencionesTestRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getTimbreCfdiRetencionesTestResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdi"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getCfdiRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiTest"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getTimbreCfdiTestRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getTimbreCfdiTestResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiRetenciones"> <wsdlsoap:operation soapAction=""/> WSCFDI EDICOM | 4. Anexo: WSDL | 79 .WSCFDI EDICOM <wsdl:input name="cancelaCFDiRetencionesRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="cancelaCFDiRetencionesResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiRetencionesTest"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getCfdiRetencionesTestRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiRetencionesTestResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiRetencionesSigned"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="cancelaCFDiRetencionesSignedRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="cancelaCFDiRetencionesSignedResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="exportCfdi"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="exportCfdiRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="exportCfdiResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getUUIDTest"> <wsdlsoap:operation soapAction=""/> WSCFDI EDICOM | 4. Anexo: WSDL | 80 .WSCFDI EDICOM <wsdl:input name="getUUIDTestRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getUUIDTestResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdi"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getTimbreCfdiRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getTimbreCfdiResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiTest"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getCfdiTestRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiTestResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDi"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="cancelaCFDiRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="cancelaCFDiResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getTimbreCfdiRetenciones"> <wsdlsoap:operation soapAction=""/> WSCFDI EDICOM | 4. WSCFDI EDICOM <wsdl:input name="getTimbreCfdiRetencionesRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getTimbreCfdiRetencionesResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="cancelaCFDiSigned"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="cancelaCFDiSignedRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="cancelaCFDiSignedResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiRetenciones"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getCfdiRetencionesRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiRetencionesResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiFromUUID"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getCfdiFromUUIDRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiFromUUIDResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="getCfdiAck"> <wsdlsoap:operation soapAction=""/> WSCFDI EDICOM | 4.Anexo: WSDL | 81 . Anexo: WSDL | 82 .sedeb2b.sedeb2b.com/EdiwinWS/services/CFDi"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Para acceder a la última versión de la WSDL a través de Internet: https://cfdiws.com/EdiwinWS/services/CFDi?wsdl WSCFDI EDICOM | 4.WSCFDI EDICOM <wsdl:input name="getCfdiAckRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="getCfdiAckResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> <wsdl:fault name="CFDiException"> <wsdlsoap:fault name="CFDiException" use="literal"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="CFDiService"> <wsdl:port binding="impl:CFDiSoapBinding" name="CFDi"> <wsdlsoap:address location="https://cfdiws.
Copyright © 2024 DOKUMEN.SITE Inc.