Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de usuario
Revisión, Aprobación
Historial de cambios
Este archivo PDF puede contener tipos de letra incrustados. De acuerdo con la política de licencia de Adobe, este archivo
puede ser impreso o visto, pero no se editará a menos que los tipos de letra incrustados estén autorizados e instalados en la
computadora que realiza la edición. Descargando este archivo, las partes aceptan la responsabilidad de no infringir la política
de licencia de Adobe. EDICOM No acepta ninguna responsabilidad en esta área.
Los detalles de los productos de software utilizados para crear este archivo PDF se pueden encontrar en la Información
General relativa al archivo; La creación de PDF Los parámetros se optimizaron para la impresión. En el caso improbable de
que se encuentre un problema relacionado con él, comuníquelo lo antes posible a la dirección que figura a continuación.
support@edicomgroup.com
LAS FUNCIONALIDADES Y OPCIONES DESCRITAS EN ESTE MANUAL PUEDEN VARIAR SEGUN LA VERSIÓN DE LA
APLICACIÓN A LA QUE USTED TIENE ACCESO. ESTE DOCUMENTO PUEDE SER MODIFICADO EN CUALQUIER MOMENTO A
DISCRECIÓN DE LA EMPRESA, CON O SIN NOTIFICACION A USTED. SE RECOMIENDA OBTENER SIEMPRE LA VERSIÓN MÁS
ACTUALIZADA A TRAVÉS DE LA PROPIA APLICACIÓN.
support@edicomgroup.com
Todos los derechos reservados. A menos que se especifique lo contrario, ninguna parte de esta publicación puede ser
reproducida o utilizada de ninguna forma o por ningún medio, electrónico o mecánico, incluyendo fotocopias, o publicación
en Internet o intranet, sin permiso previo por escrito. El permiso se puede solicitar a EDICOM en la dirección abajo :
support@edicomgroup.com
Índice de contenido
1. CFDi Client.....................................................................................................................................................................7
1.1. Introducción............................................................................................................................................................................................7
1.1.1. Acceso al servicio...........................................................................................................................................................................7
1.1.2. Paquetes del API de programación................................................................................................................................................7
1.1.3. Funciones del cliente webservice CFDi..........................................................................................................................................8
2. API de programación....................................................................................................................................................10
2.1. Introducción..........................................................................................................................................................................................10
2.2. Paquete com.edicom.ediwinws.cfdi.client.....................................................................................................................................10
2.2.1. Objeto CfdiClient..........................................................................................................................................................................10
2.2.2. Excepción CfdiException..............................................................................................................................................................13
3.2. Ejecutables............................................................................................................................................................................................18
3.2.1. GetCfdi.exe...................................................................................................................................................................................19
3.2.2. GetTimbreCfdi.exe.......................................................................................................................................................................21
3.2.3. CancelCfdi.exe..............................................................................................................................................................................22
3.2.4. GetCfdiFromUUID.exe..................................................................................................................................................................23
3.2.5. GetUUID.exe................................................................................................................................................................................24
3.2.6. GetCfdiACK.exe............................................................................................................................................................................25
3.2.7. CancelCfdiSigned.exe...................................................................................................................................................................26
3.2.8. GetCfdiRetenciones.exe...............................................................................................................................................................26
3.2.9. GetTimbreCfdiRetenciones.exe...................................................................................................................................................28
3.2.10. CancelCfdiRetenciones.exe........................................................................................................................................................29
3.2.11. CancelCfdiRetencionesSigned.exe.............................................................................................................................................30
3.2.12. GetCfdiStatus.exe......................................................................................................................................................................31
4.1. introducción..........................................................................................................................................................................................34
4.1.1. Generación de la clase webservice cliente..................................................................................................................................34
4.1.2. Autorizar el certificado de la conexión https...............................................................................................................................34
4.1.3. Lectura de un fichero en un array de bytes.................................................................................................................................35
4.1.4. Escritura del resultado en un fichero..........................................................................................................................................35
4.1.5. Aplicación de ejemplo.................................................................................................................................................................35
Índice de Imágenes
Imagen 3.1: Vista en el directorio C:\ una vez instalado......................................................................................................................................16
Imagen 4.1: Certificados de la autoridad certificadora ACEDICOM.....................................................................................................................33
1. CFDi Client
1.1. Introducción
CFDi es la plataforma webservice de EDICOM para generar los Comprobantes Fiscales
Digitales a través de Internet. Esta plataforma acredita a EDICOM como Proveedor
Autorizado de CFD por el Servicio de Administración Tributaria, convirtiéndose así en
Proveedor de Servicios de Expedición de Comprobante Fiscal Digital a través de Internet
(PSECFDI), conforme a los nuevos requerimientos especificados para realiza todas las
validaciones de los CFDi exigidas por el SAT.
Este documento ofrece el enlace a la WSDL del servicio pero además Edicom ofrece a sus
clientes la herramienta CFDiClient, pensado para facilitar el uso del servicio Web Service
CFDi a los usuarios. La herramienta CFDiClient ofrece:
●
API de programación: Se ofrece un API de programación desarrollado en el lenguaje
de programación JAVA que permite invocar de forma fácil y sencilla las funciones
ofrecidas por el webservice CFDi.
● Clientes pregenerados: Se ofrece también un par de clientes ya generados
destinados a que los usuarios puedan invocar directamente el servicio desde su
ordenador utilizando el sistema operativo Windows.
https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi
La implementación del servicio se realiza a través del protocolo https. De esta forma, se
utiliza un canal de comunicaciones seguro con el Proveedor de Servicios de Emisión de
CFDI (PSECFDI).
El API está estructurado en tres paquetes de objetos que conforman tres partes
diferenciadas de este API de programación:
Paquete Descripción ver.
com.edicom.ediwinws.cfdi.client Contiene el cliente necesario para poder invocar el servicio de 1.0
timbrado. A partir de la ejecución de este cliente, se puede
gestionar los timbres obtenidos conforme necesite el cliente.
Los objetos contenidos en este paquete son:
●
Objecto CfdiClient.
● Excepción CfdiExcepction.
comando.
● Objeto GetUUID. Ejecutable en modo comando.
● Objeto GetCfdiAck. Ejecutable en modo comando.
comando.
● Objeto GetCfdiRetenciones. Ejecutable en modo
comando.
● Objeto GetTimbreCfdiRetenciones. Ejecutable en modo
comando.
● Objeto CancelCfdiRetenciones. Ejecutable en modo
comando.
● Objeto CancelCfdiRetencionesSigned. Ejecutable en
modo comando.
● Objeto GetCfdiStatus. Ejecutable en modo comando.
getCfdi Generación de CFDi. Permite realizar el timbrado del comprobante firmado por el 1.0
cliente y devuelve el comprobante timbrado.
getTimbreCfdi Generación del timbre de CFDi. Permite realizar el timbrado del comprobante 1.0
firmado por el cliente y devuelve el timbre del comprobante timbrado. (Solo el
timbre).
cancelCfdi Cancelación de CFDi. Permite realizar la cancelación de comprobantes 2.0
timbrados previamente.
NOTA: La versión 2.0 deja de funcionar el 01/11/2018, se debe actualizar el
cliente y revisar la documentación del punto siguiente para ver su nuevo uso
cancelCfdi Cancelación de CFDi. Permite realizar la cancelación de un comprobante 3.0
timbrado previamente.
getUUID Obtención del UUID. Permite obtener el UUID del comprobante firmado por el 1.0
cliente.
getCfdiFromUUID Obtención de los CFDi a partir de los UUIDs. Permite obtener los 1.0
comprobante timbrados a partir de los UUIDs especificados.
getCfdiAck Obtención de ACKs de los CFDi. Permite obtener los ACKs de los envíos de 1.0
los comprobantes timbrados al SAT.
2. API de programación
2.1. Introducción
El CFDiClient incluye un API de programación en el lenguaje de programación JAVA para
poder acceder al servicio. Se trata de la librería cfdiClient.jar situada en el directorio del
cliente. Esta librería utiliza las librerías externas situadas en el directorio lib para
implementar las llamadas SOAP necesarias para invocar el servicio.
En la carpeta docs del cliente, está toda la documentación del API de programación en
formato java-docs. El fichero index.html contiene el índice de este API.
El API está estructurado en tres paquetes de objetos que conforman tres partes
diferenciadas de este API de programación:
●
Paquete com.edicom.ediwinws.cfdi.client
●
Paquete com.edicom.ediwinws.cfdi.service
●
Paquete com.edicom.ediwinws.cfdi
El constructor de este cliente está sobrecargado para poder invocar el servicio directamente
sobre la URL estándar del servicio, o si fuera necesario, se puede especificar la URL del
servicio.
Constructores:
●
CfdiClient(): Crea la instancia del cliente para acceder al servicio de CFDi con la
URL por defecto.
Nota: URL por defecto: https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi
●
CfdiClient(java.lang.String wsUrl): Crea la instancia del cliente para acceder
al servicio de CFDi especificando la URL de acceso al servicio.
Una vez inicializado el cliente, lo único que hace falta es invocar el método correspondiente
a la función del servicio que queremos invocar.
Métodos:
●
byte[] getCfdi(java.lang.String usuario, java.lang.String pass, byte[] zipFile)
throws CfdiException: Genera la petición de timbrado del comprobante al
webService. En caso de que la ejecución se realice correctamente, devolverá el
●
byte[] getTimbreCfdiRetencionesTest(java.lang.String usuario, java.lang.String
pass, byte[] zipFile) throws CfdiException: Genera la petición de timbrado del
comprobante de retenciones electrónicas al webService en modo de prueba y
devuelve únicamente el timbre del comprobante timbrado, en vez del comprobante
completo. Ejecutar el servicio en modo de prueba significa que el timbre generado
no es válido y que no se envía al SAT. En caso de que la ejecución se realice
correctamente, devolverá el comprobante timbrado como un byte[] que contendrá el
fichero zip con el contenido del nodo del timbre del comprobante de retenciones
electrónicas timbrado. En caso de que haya algún error en la ejecución, la llamada
devolverá una excepción CfdiException que contendrá un código con el tipo de error
y un texto con la explicación del error.
●
CancelaResponse cancelCfdiRetenciones(java.lang.String usuario,
java.lang.String pass, String rfc, String[] uuidList, byte[] pfxFile, String
pfxPassword, java.lang.String motivo, java.lang.String sustitucion) throws
CfdiException: Genera la petición de cancelación de comprobantes de retenciones
electrónicas timbrados al webService. Para identificar los comprobantes a cancelar,
ha que especificarlos a partir de sus UUIDs. En caso de que la ejecución se realice
correctamente, devolverá un listado con los comprobantes cancelados y la
respuesta del servicio del SAT ante esta petición de cancelación. En caso de que
haya algún error en la ejecución, la llamada devolverá una excepción CfdiException
que contendrá un código con el tipo de error y un texto con la explicación del error.
●
CancelaResponse cancelCfdiRetencionesSigned(java.lang.String usuario,
java.lang.String pass, byte[] cancelSign) throws CfdiException: Genera la
petición de cancelación de comprobantes de retenciones electrónicas timbrados al
webService. Para identificar los comprobantes a cancelar, se tiene que enviar la
petición de cancelación generada y firmada por el usuario. En caso de que la
ejecución se realice correctamente, devolverá un listado con los comprobantes
cancelados y la respuesta del servicio del SAT ante esta petición de cancelación. En
caso de que haya algún error en la ejecución, la llamada devolverá una excepción
CfdiException que contendrá un código con el tipo de error y un texto con la
explicación del error.
●
CancelQueryData getCfdiStatus(java.lang.String usuario, java.lang.String pass,
java.lang.String rfcEmisor, java.lang.String rfcReceptor, java.lang.String UUID,
double total, boolean test) throws CfdiException: Genera una consulta sobre el
estado de cancelación de un comprobante timbrado al webService. Para identificar
el comprobante a consultar se requieren el RFC del emisor, RFC del receptor, el
UUID del comprobante y el Total del comprobante. En caso de que la ejecución se
realice correctamente, devolverá la respuesta del servicio del SAT ante esta
consulta. En caso de que haya algún error en la ejecución, la llamada devolverá una
excepción CfdiException que contendrá un código con el tipo de error y un texto con
la explicación del error.
Métodos:
●
int getCod(): Devuelve el código del error.
●
java.lang.String getText(): Devuelve el texto del error.
●
java.lang.String getTextCode(): Devuelve una explicación del tipo de error
obtenido.
http://axis.apache.org/
Interfaces:
●
CFDi: Interfaz de ejecución del servicio.
●
CFDiService: Interfaz de conexión del servicio.
Classes:
Métodos:
●
String getAck(): Devuelve el acuse del SAT, codificado en B64.
●
String getText(): Devuelve los UUIDs cancelados (separados por ;) y
concatena el acuse devuelto por el SAT (codificado en B64).
●
String[] getUuids(): Devuelve el listado con los UUIDs de los comprobantes
cancelados.
Métodos:
●
String getStatusCode(): Devuelve el código del estado del CFDI
consultado.
● String getStatus(): Devuelve el estado del CFDI consultado.
●
String getIsCancelable(): Indica si el CFDI consultado es cancelable
o no.
● String getCancelStatus(): Devuelve el estado de la cancelación de
un CFDI consultado.
Métodos:
●
String getAck(): Devuelve el acuse del SAT, codificado en B64.
●
CancelQueryData cancelQueryData(): Devuelve el objeto
CancelQueryData.
● String getRfcE(): Devuelve el RFC del Emisor del comprobante cancelado.
●
String getStatus(): Devuelve el estado de la cancelación.
●
String getStatusCode(): Devuelve el código del estado de la cancelación.
●
String getUuid(): Devuelve el UUID del comprobante cancelado.
Excepciones:
●
CFDiException: Objeto encargado de devolver la información del error que
se haya producido en la invocación del servicio CFDi de EDICOM.
Implementa el cliente para obtener el ACK del envío del comprobante al SAT.
3.1. Introducción
El paquete CfdiClient contiene un conjunto de comandos ejecutables desde la línea de
comandos para invocar el servicio.
3.1.1. Instalación
Para instalar el CfdiClient solo hay que ejecutar el fichero CfdiClient.exe que creará un
directorio CfdiClient y descomprimirá los archivos de la aplicación. Podrá acceder a dicho
directorio desde el Procesador de comandos de su sistema. Es también recomendable
configurar debidamente los parámetros por defecto para facilitar el uso de las funciones.
(Ver apartado "Parámetros configurables").
Debe permitir el acceso seguro al servicio CFDi de EDICOM en su ordenador. Este servicio
se accede a través de una conexión a internet, a través de una conexión segura HTTPS
(puerto 443) en la URL del web-service CFDi de EDICOM.
https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi
3.2. Ejecutables
Los ejecutables que incluye el cliente CfdiClient son los siguientes:
GetCfdi Generación de CFDI. Permite obtener los comprobantes timbrados a partir de 1.0
los comprobantes firmados. El cliente GetCfdi se invoca para timbrar los
comprobantes ya firmados por el usuario. Devuelve los comprobantes
timbrados enviados al SAT.
GetTimbreCfdi Generación de timbre de CFDI. Permite obtener el timbre del comprobante 1.0
timbrado a partir del comprobante firmado. El cliente GetTimbreCfdi se
3.2.1. GetCfdi.exe
Permite obtener los comprobantes timbrados a partir de los comprobantes firmados por el
usuario. El cliente GetCfdi.exe se invoca para timbrar los comprobantes a través del servicio
CFDi de Edicom y devolver los comprobantes timbrados enviados al SAT en forma de
archivos xml.
Llamada:
GetCfdi.exe
Nota: Los comandos deben ejecutarse desde el procesador de línea de comandos o mediante
ficheros de proceso por lotes (ficheros.bat)
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario del servicio.
●
-p, --wsPass: Contraseña de acceso al servicio.
●
-i, --inputDir: Directorio de entrada, donde se encuentra los comprobantes firmados
por el usuario.
●
-o, --outputDir: Directorio de salida , donde se reciben los comprobantes una vez
timbrados.
● -h, --help: Muestra la ayuda.
●
-t, --test: Ejecuta el webservice en modo TEST. Posibles valores: true/false. En caso
de que no sea ninguno de estos valores, siempre se tomará el webservice en modo
TEST.
● -d, --deleteInputFiles: Elimina los comprobantes timbrados de la carpeta de
entrada después de timbrarlos. Posibles valores: true/false. En caso de que no sea
ninguno de estos valores, siempre se tomará como que no borra los ficheros de
entrada.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
Datos:
● ficheroComprobante: Nombre del fichero o máscara que contendrá los ficheros
que formarán los comprobantes a timbrar. Puede contener la ruta completa junto
con el nombre del fichero, en este caso, el directorio de entrada. no se tendrá en
cuenta.
Respuesta:
●
Respuesta satisfactoria: Devuelve los comprobantes timbrados enviados al
SAT en la carpeta especificada como directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando los
comprobantes que no se han podido enviar al SAT. En caso de que alguno
de los comprobantes seleccionados por la máscara se haya enviado
correctamente, su comprobante timbrado estará disponible en la carpeta de
salida del cliente.
3.2.2. GetTimbreCfdi.exe
Permite obtener la información de timbrado de los comprobantes timbrados a partir de los
comprobantes firmados por el usuario. El cliente GetTimbreCfdi.exe se invoca para timbrar
el comprobante a través del servicio CFDi de Edicom y devolver en un archivo el timbre del
comprobante timbrado (no los comprobantes timbrados) en formato XML.
Llamada:
GetTimbreCfdi.exe
Modo de empleo:
Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario
●
-p, --wsPass: Password
●
-i, --inputDir: Directorio de entrada, donde se encuentra los comprobantes firmados
por el usuario.
● -o, --outputDir: Directorio de salida , donde se reciben, en el caso de GetTimbreCfdi
los timbres de los comprobantes.
●
-h, --help: Muestra la ayuda.
● -t, --test: Ejecuta el webservice en modo TEST. Posibles valores: true/false. En caso
de que no sea ninguno de estos valores, siempre se tomará el webservice en modo
TEST.
●
-d, --deleteInputFiles: Elimina los comprobantes timbrados de la carpeta de entrada
después de timbrarlos. Posibles valores: true/false. En caso de que no sea ninguno
de estos valores, siempre se tomará como que no borra los ficheros de entrada.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
Datos:
●
ficheroComprobante: Nombre del fichero o máscara que contendrá los ficheros
que formarán los comprobantes a timbrar. Por ejemplo fileComprobante=*.xml
usará todos los ficheros con extensión ".xml" del directorio de entrada. Puede
contener la ruta completa junto con el nombre del fichero. En este caso, el directorio
de entrada no se tendrá en cuenta.
Respuesta:
3.2.3. CancelCfdi.exe
Permite cancelar comprobantes timbrados a partir de los uuids de los comprobantes
timbrados por el usuario. El cliente CancelCfdi.exe se invoca para cancelar comprobantes a
través del servicio CFDi de Edicom. Devuelve un listado de UUIDs cancelados y la
respuesta del SAT a la petición de cancelación de los comprobantes.
Llamada:
CancelCfdi.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario.
● -p, --wsPass: Password
●
-o, --outputDir: Directorio de salida , donde se reciben los ACKs de la petición de
cancelación.
●
-h, --help: Muestra la ayuda.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
● --rfc: Rfc del emisor del comprobante.
● --rfcR: Rfc del receptor del comprobante.
●
--total: Total del comprobante del comprobante.
●
-t, --test: Ejecuta el webservice en modo TEST.
●
--filePfx: Certificado (en formato PFX) con el que se va a firmar la petición .
●
--pfxPass: Password del certificado con el que se va a firmar la petición.
●
--motivo: Motivo de la cancelación.
●
--sustitucion: UUID que sustituye al folio fiscal cancelado.
Datos:
●
uuid: UUID del comprobante que se quiere cancelar.
Respuesta:
●
Respuesta satisfactoria: Devuelve la confirmación del SAT de la respuesta
de la cancelación. Estos datos se guardan en la carpeta especificada como
directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando el motivo del
error.
3.2.4. GetCfdiFromUUID.exe
Permite obtener los comprobantes previamente timbrados a partir de los UUIDs
comprobantes firmados por el usuario. El cliente GetCfdiFromUUID.exe se invoca
para obtener los comprobantes previamente timbrados a través del servicio CFDi de
Edicom. Devuelve estos comprobantes timbrados en forma de archivos xml.
Llamada:
GetCfdiFromUUID.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
● -o, --outputDir: Directorio de salida para generar los comprobantes que devuelva la
respuesta de la petición.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-h, --help: Muestra la ayuda.
●
--rfc: RFC del emisor del comprobante.
Datos:
●
uuids: Listado de UUIDs que se quieren recuperar. Tienen que estar separados por
comas o espacios en blanco.
Respuesta:
●
Respuesta satisfactoria: Devuelve los comprobantes timbrados que previamente
se han enviado al SAT en la carpeta especificada como directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando el error producido al
obtener los comprobantes timbrados.
3.2.5. GetUUID.exe
Permite obtener los UUIDs de los comprobantes previamente timbrados a partir de los
comprobantes firmados por el usuario. El cliente GetUUID.exe se invoca para verificar si un
comprobante firmado ha sido previamente enviado al servicio de timbrado de EDICOM.
Devuelve el UUID del comprobante si ya ha sido timbrado.
Llamada:
GetUUID.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
●
-i, --inputDir: Directorio donde se encuentran los comprobantes.
● -h, --help: Muestra la ayuda.
● -t, --test: Ejecuta el webservice en modo TEST.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-d, --deleteInputFiles: Elimina los comprobantes firmados de la carpeta de entrada
después de obtener el UUID.
Datos:
●
ficheroComprobante: Nombre del fichero o máscara que contendrá los ficheros
que formarán los comprobantes a timbrar. Por ejemplo fileComprobante=*.xml
usará todos los ficheros con extensión ".xml" del directorio de entrada. Puede
contener la ruta completa junto con el nombre del fichero. En este caso, el directorio
de entrada no se tendrá en cuenta.
Respuesta:
●
Respuesta satisfactoria: Devuelve los UUIDs de los comprobantes firmados que
previamente se han enviado al servicio de timbrado de EDICOM.
●
Respuesta de error: Devolverá un mensaje de error indicando el error producido al
obtener los comprobantes timbrados.
3.2.6. GetCfdiACK.exe
Permite obtener los acuses de recibo de los comprobante timbrados a partir de sus
UUIDs. El cliente GetCfdiACK.exe se invoca para obtener el acuse del envío del
comprobante timbrado al SAT por parte de EDICOM. Devuelve un fichero XML con la
respuesta que el SAT da a EDICOM cuando se realiza el envío del comprobante al
SAT.
Llamada:
GetCfdiACK.exe
Modo de empleo:
Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
●
-o, --outputDir: Directorio de salida para generar los ACKs de los timbres que
devuelva la respuesta de la petición.
● -l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-h, --help: Muestra la ayuda.
Datos:
●
uuids: Listado de UUIDs de los comprobantes timbrados que se quieren recuperar
sus ACKs. Tienen que estar separados por comas o espacios en blanco.
Respuesta:
●
Respuesta satisfactoria: Devuelve los ACKs de los envíos de los comprobantes
timbrados que previamente se han enviado al SAT en la carpeta especificada como
directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando el error producido al
obtener los comprobantes timbrados.
3.2.7. CancelCfdiSigned.exe
Permite cancelar comprobantes timbrados a partir de la petición de cancelación creada y
firmada por el propio usuario. El cliente CancelCfdiSigned.exe se invoca para cancelar
comprobantes a través del servicio CFDi de Edicom. Devuelve un listado de UUIDs
cancelados y la respuesta del SAT a la petición de cancelación de los comprobantes.
Llamada:
CancelCfdiSigned.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
● -i, --inputDir: Directorio donde se encuentra el fichero de la cancelación firmado
para la petición de cancelación.
●
-o, --outputDir: Directorio de salida para la respuesta de la peticion de cancelación.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-h, --help: Muestra la ayuda.
Datos:
●
fileCancel: Fichero con los datos de la cancelación que se enviará al servicio.
Estará previamente firmado por el cliente. Puede contener la ruta completa junto con
el nombre del fichero. En este caso, el directorio de entrada no se tiene en cuenta.
Respuesta:
●
Respuesta satisfactoria: Devuelve un listado de los UUIDs cancelados. También
devuelve la confirmación del SAT de la respuesta de la cancelación. Estos datos se
guardan en la carpeta especificada como directorio de salida.
● Respuesta de error: Devolverá un mensaje de error indicando el error producido al
obtener los comprobantes timbrados.
3.2.8. GetCfdiRetenciones.exe
Llamada:
GetCfdiRetenciones.exe
Nota: Los comandos deben ejecutarse desde el procesador de línea de comandos o mediante
ficheros de proceso por lotes (ficheros.bat)
Modo de empleo:
Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario del servicio.
● -p, --wsPass: Contraseña de acceso al servicio.
●
-i, --inputDir: Directorio de entrada, donde se encuentra los comprobantes de
retenciones electrónicas firmados por el usuario.
● -o, --outputDir: Directorio de salida, donde se reciben los comprobantes de
retenciones electrónicas una vez timbrados.
●
-h, --help: Muestra la ayuda.
●
-t, --test: Ejecuta el webservice en modo TEST. Posibles valores: true/false. En caso
de que no sea ninguno de estos valores, siempre se tomará el webservice en modo
TEST.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-d, --deleteInputFiles: Elimina los comprobantes de retenciones electrónicas
timbrados de la carpeta de entrada después de timbrarlos. Posibles valores:
true/false. En caso de que no sea ninguno de estos valores, siempre se tomará
como que no borra los ficheros de entrada.
Datos:
●
ficheroComprobante: Nombre del fichero o máscara que contendrá los ficheros
que formarán los comprobantes de retenciones electrónicas a timbrar. Puede
contener la ruta completa junto con el nombre del fichero, en este caso, el directorio
de entrada. no se tendrá en cuenta.
Respuesta:
●
Respuesta satisfactoria: Devuelve los comprobantes de retenciones electrónicas
timbrados enviados al SAT en la carpeta especificada como directorio de salida.
● Respuesta de error: Devolverá un mensaje de error indicando los comprobantes de
retenciones electrónicas que no se han podido enviar al SAT. En caso de que alguno
de los comprobantes de retenciones electrónicas seleccionados por la máscara se
haya enviado correctamente, su comprobante timbrado estará disponible en la
carpeta de salida del cliente.
3.2.9. GetTimbreCfdiRetenciones.exe
Permite obtener la información de timbrado de los comprobantes de retenciones
electrónicas timbrados a partir de los comprobantes de retenciones electrónicas firmados
por el usuario. El cliente GetTimbreCfdiRetenciones.exe se invoca para timbrar el
comprobante de retenciones electrónicas a través del servicio CFDi de Edicom y devolver en
un archivo el timbre del comprobante de retenciones electrónicas timbrado (no los
comprobantes timbrados) en formato XML.
Llamada:
GetTimbreCfdiRetenciones.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario
●
-p, --wsPass: Password
● -i, --inputDir: Directorio de entrada, donde se encuentra los comprobantes de
retenciones electrónicas firmados por el usuario.
●
-o, --outputDir: Directorio de salida, donde se reciben los timbres de los
comprobantes de retenciones electrónicas.
● -h, --help: Muestra la ayuda.
● -t, --test: Ejecuta el webservice en modo TEST. Posibles valores: true/false. En caso
de que no sea ninguno de estos valores, siempre se tomará el webservice en modo
TEST.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
● -d, --deleteInputFiles: Elimina los comprobantes de retenciones electrónicas
timbrados de la carpeta de entrada después de timbrarlos. Posibles valores:
true/false. En caso de que no sea ninguno de estos valores, siempre se tomará
como que no borra los ficheros de entrada.
Datos:
●
ficheroComprobante: Nombre del fichero o máscara que contendrá los ficheros
que formarán los comprobantes de retenciones electrónicas a timbrar. Por ejemplo
fileComprobante=*.xml usará todos los ficheros con extensión ".xml" del directorio
de entrada. Puede contener la ruta completa junto con el nombre del fichero. En
este caso, el directorio de entrada no se tendrá en cuenta.
Respuesta:
●
Respuesta satisfactoria: Devuelve los timbres de los comprobantes de retenciones
electrónicas timbrados enviados al SAT en la carpeta especificada como directorio
de salida.
● Respuesta de error: Devolverá un mensaje de error indicando los comprobantes de
retenciones electrónicas que no se han podido enviar al SAT. En caso de que alguno
de los comprobantes de retenciones electrónicas seleccionados por la máscara se
haya enviado correctamente, su timbre correspondiente al comprobante timbrado
estará disponible en la carpeta de salida del cliente.
3.2.10. CancelCfdiRetenciones.exe
Permite cancelar comprobantes de retenciones electrónicas timbrados a partir de los uuids
de los comprobantes de retenciones electrónicas timbrados por el usuario. El cliente
CancelCfdiRetenciones.exe se invoca para cancelar comprobantes de retenciones
electrónicas a través del servicio CFDi de Edicom. Devuelve un listado de UUIDs
cancelados y la respuesta del SAT a la petición de cancelación de los comprobantes.
Llamada:
CancelCfdiRetenciones.exe
Modo de empleo:
Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
●
-i, --inputDir: Directorio de entrada, donde se encuentra el certificado del usuario
necesario para invocar el servicio.
● -o, --outputDir: Directorio de salida , donde se reciben los ACKs de la petición de
cancelación.
●
-h, --help: Muestra la ayuda.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
--rfc: Rfc del emisor del comprobante.
●
--filePfx: Certificado (en formato PFX) con el que se va a firmar la petición de
cancelación de los comprobantes de retenciones electrónicas. Puede contener la
ruta completa junto con el nombre del fichero del certificado. En este caso, el
directorio de entrada no se tendrá en cuenta.
● --pfxPass: Password del certificado con el que se va a firmar la petición de
cancelación de los comprobantes de retenciones electrónicas.
●
--motivo: Motivo de la cancelación.
●
--sustitucion: UUID que sustituye al folio fiscal cancelado.
Datos:
●
uuids: Listado de UUIDs que se quieren cancelar. Tienen que estar separados por
comas o espacios en blanco.
Respuesta:
●
Respuesta satisfactoria: Devuelve un listado de los UUIDs introducidos en el
webservice en el que indica si se han cancelado o no. También devuelve la
confirmación del SAT de la respuesta de la cancelación. Estos datos se guardan en
la carpeta especificada como directorio de salida.
● Respuesta de error: Devolverá un mensaje de error indicando el motivo del error.
3.2.11. CancelCfdiRetencionesSigned.exe
Permite cancelar comprobantes de retenciones electrónicas timbrados a partir de la
petición de cancelación creada y firmada por el propio usuario. El cliente
CancelCfdiRetencionesSigned.exe se invoca para cancelar comprobantes de
retenciones electrónicas a través del servicio CFDi de Edicom. Devuelve un listado
de UUIDs cancelados y la respuesta del SAT a la petición de cancelación de los
comprobantes.
Llamada:
CancelCfdiRetencionesSigned.exe
Modo de empleo:
Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
●
-i, --inputDir: Directorio donde se encuentra el fichero de la cancelación firmado
para la petición de cancelación.
● -o, --outputDir: Directorio de salida para la respuesta de la peticion de cancelación.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
-h, --help: Muestra la ayuda.
Datos:
●
fileCancel: Fichero con los datos de la cancelación que se enviará al servicio.
Estará previamente firmado por el cliente. Puede contener la ruta completa junto con
el nombre del fichero. En este caso, el directorio de entrada no se tiene en cuenta.
Respuesta:
● Respuesta satisfactoria: Devuelve un listado de los UUIDs cancelados. También
devuelve la confirmación del SAT de la respuesta de la cancelación. Estos datos se
guardan en la carpeta especificada como directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando el error producido al
obtener los comprobantes timbrados.
3.2.12. GetCfdiStatus.exe
Permite consultar el estado de cancelación de un comprobantes CFDi timbrado a partir de
los datos propios del comprobante solicitados por el SAT. Devuelve la respuesta del SAT
sobre la petición de consulta del estado de cancelación que se ha realizado.
Llamada:
GetCfdiStatus.exe
Modo de empleo:
Parámetros:
●
-w, --wsUrl: Url de acceso al servicio.
●
-u, --wsUser: Nombre de usuario.
●
-p, --wsPass: Password
●
-o, --outputDir: Directorio de salida, donde se escribe el fichero de respuesta.
●
-h, --help: Muestra la ayuda.
●
-l, --logTime: Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores, no se
registrarán los tiempos en el fichero de log.
●
--rfc: Rfc del emisor del comprobante.
●
--rfcR: Rfc del receptor del comprobante.
●
--total: Total del comprobante.
● -t, --test: Ejecuta el webservice en modo TEST.
Datos:
● uuid: UUID del comprobante a consultar.
Respuesta:
● Respuesta satisfactoria: Devuelve la respuesta del SAT sobre la consulta del
estado de cancelación además de indicar si el comprobante es cancelable o no.
Estos datos se guardan en la carpeta especificada como directorio de salida.
●
Respuesta de error: Devolverá un mensaje de error indicando el motivo del error.
Nota: El valor de fileComprobante puede ser una ruta absoluta con o sin máscara.
●
test. Permite indicar si se ejecuta el cliente en el entorno de pruebas o en el
entorno de envío de comprobantes al SAT. Si se especifica test = false, los
comprobantes se enviaran al SAT, mientras que si se especifica test = true,
los comprobantes no se enviarán el SAT. Por defecto, en caso de que no se
indique nada en este parámetro, se trabaja en entorno de pruebas sin enviar
los comprobantes timbrados al SAT.
●
logTime. Muestra en el fichero de log los tiempos de ejecución del servicio.
Posibles valores: true/false. En caso de que no sea ninguno de estos valores,
no se registrarán los tiempos en el fichero de log.
● rfc. Es el rfc del emisor del comprobante.
●
filePfx. Es el certificado (en formato PFX) con el que se va a firmar la
petición de cancelación de los comprobantes. Tiene que tener por lo menos
la clave privada del usuario para poder firmar la petición de cancelación del
webservice de cancelación del SAT.
Nota: El valor de filePfx puede ser una ruta absoluta o relativa a inputDir.
●
pfxPass. Es el password del certificado con el que se va a firmar la petición
de cancelación de los comprobantes.
● motivo. Es el motivo de la cancelación de los comprobantes.
●
sustitucion. Es el UUID que sustituye al folio fiscal cancelado.
CfdiClient.properties:
wsUrl=https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi
WsUser=XXX000000XXX
wsPass=XXXXXXXXXXXXXXX
inputDir=C:\\CfdiClient\\DATOS\\in
outputDir=C:\\CfdiClient\\DATOS\\out
fileComprobante=*.xml
test=true (o false)
logTime=false (o true)
deleteInputFiles=false (o true)
4. Ejemplo de Cliente C#
4.1. introducción
A continuación se va describir como implementar un cliente de acceso al CFDI desde la
plataforma de desarrollo C#. Los pasos necesarios son los siguientes:
wsdl.exe https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi?wsdl
Utilidad de lenguaje de descripción de servicios Web de Microsoft (R)
[Microsoft (R) .NET Framework, Version 4.0.30319.33440]
Copyright (C) Microsoft Corporation. All rights reserved.
Escribiendo el archivo CFDiService.cs.
●
Gestionar la validez del certificado desde el lenguaje de programación C#. Para ello
es necesario asignar a una función del callback, la validación del certificado
{
ServicePointManager.ServerCertificateValidationCallback =
ValidateCertificate;
. . . . . . . .
}
Para leer el contenido de un fichero, y asignarlo aún array de bytes, se puede utilizar la
función de C# File.ReadAllBytes(input_file).
result = cfdiService.getTimbreCfdiTest(
user,
password,
File.ReadAllBytes(input_file));
using System;
using System.IO;
using System.Net;
using System.Text;
using System.ServiceModel;
using System.Web.Services.Protocols;
using System.Security.Cryptography.X509Certificates;
using CFDI.CFDIClient; //namesapce asignado al cliente generado por la utilidad wsdl.exe
namespace cfdicmd {
class CFDICmdClass {
public static void Main (string[] args) {
ServicePointManager.ServerCertificateValidationCallback =
ValidateCertificate;
CFDiService cfdiService;
if (url.Length==0) {
cfdiService = new CFDiService();
}
else {
cfdiService = new CFDiService(url);
}
Console.WriteLine ("Operations:");
Console.WriteLine ("1: getCfdiTest");
Console.WriteLine ("2: getTimbreCfdiTest");
Console.WriteLine ("3: getUUIDTest");
Console.Write ("Operation: ");
Int32 operation = Convert.ToInt32(Console.ReadLine());
byte[] result;
string output_file;
try {
switch (operation) {
case 1:
Console.Write ("output file :");
output_file = Console.ReadLine();
result =cfdiService.getCfdiTest(user, password,
File.ReadAllBytes(input_file));
File.WriteAllBytes (output_file, result);
break;
case 2:
Console.Write ("output file :");
output_file = Console.ReadLine();
result = cfdiService.getTimbreCfdiTest(user, password,
File.ReadAllBytes(input_file));
File.WriteAllBytes (output_file, result);
break;
case 3:
Console.WriteLine ( "Result : " +
cfdiService.getUUID(user, password,
File.ReadAllBytes(input_file))
);
break;
default:
Console.WriteLine ("INVALID OPERATION");
break;
}
}
catch (SoapException ex) {
Console.WriteLine ("SOAP EXCEPTION : " +
ex.GetBaseException().Message);
Console.WriteLine ("SOAP EXCEPTION : " + ex.GetType());
}
catch (FaultException ex) {
Console.WriteLine ("FAULT EXCEPTION : " +
ex.GetBaseException().Message);
Console.WriteLine ("FAULT EXCEPTION : " + ex.GetType());
}
}
namespace CFDI.CFDIClient {
/// <remarks/>
[System.Web.Services.WebServiceBinding(Name="CFDi",
Namespace="http://cfdi.service.ediwinws.edicom.com")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class CFDiService : System.Web.Services.Protocols.SoapHttpClientProtocol {