Está en la página 1de 38

CFDi Client

Manual de usuario

3.3 Revisión – 12/01/2022


Título del documento: CFDi Client
Nombre del fichero: ES CFDi WS Client Manual de Usuario.odt
Versión: 3.3
Estado: REVISADO
Fecha: 27/01/2020
Autor: Oscar Albert

Revisión, Aprobación

Revisado por: Alexei Lescaylle Fecha: 12/01/2022


Aprobado por: Oscar Albert Fecha: 12/01/2022
CFDi Client Manual de usuario

Historial de cambios

Versió Fecha Autor Descripción de la acción Sección/Página


n
1.0 28/02/2011 oalbert Versión inicial. todas

2.0 04/08/2011 oalbert Añadido cliente CancelCfdi. 5,7,8,9,10,11,13,1


4,15

2.1 20/10/2011 oalbert Añadido parámetro –deleteInputFiles a los 2,10,11,12,14


clientes GetCfdi y GetTimbreCfdi.

2.2 18/01/2012 oalbert Añadidos los clientes GetCfdiAck, 2, 5, 7-13, 15-19


GetCfdiFromUUID, GetUUID y
CancelCfdiSigned
2.3 30/01/2014 oalbert Añadido anexo ejemplo de creación de un 34
cliente en C#
2.4 04/12/2014 oalbert Servicio de timbrado de comprobantes de 5, 8, 9, 11-14, 21-
retenciones electrónicas 23
2.5 23/01/2015 oalbert Añadido parámetro -logTime a todos los 14-25
clientes
2.6 11/02/2015 oalbert Servicio de cancelación de comprobantes de 5-6, 10, 12-15,
retenciones electrónicas 25-27
3.0 19/09/2018 oalbert Nuevo servicio de consulta de estatus de 5-8, 10-14, 17, 26
comprobantes (GetCfdiStatus), actualización
del servicio de cancelación (CancelCfdi) y
cambios en la estructura de paquetes del
proyecto
3.1 11/10/2018 oalbert Se informa de la existencia opción TEST para 17, 26
las llamadas GetCfdiStatus y CancelCfdi
3.2 27/01/2020 sperez Se informa de la existencia de la clase 14
CancelData, se documentan los métodos de
la misma además de los de
CancelaResponse y CancelQueryData
3.3 07/01/2022 alescaylle Añadidos los parámetros “motivo” y 11, 13, 22, 23, 29,
“sustitucion” a la función CancelCFDi y 30, 33
CancelCFDiRetenciones por cambio en
normativa del SAT

| 3 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

PDF - Declaración de Exención de responsabilidad.

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.

Adobe es una marca comercial de Adobe Systems Incorporated.

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.

En el caso de incidencia o sugerencia, comuníquelo a la dirección que figura a continuación.

support@edicomgroup.com

© EDICOM 2020– Todos los derechos reservados

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

| 4 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

Í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

2.3. Paquete com.edicom.ediwinws.cfdi.service..................................................................................................................................14


2.3.1. Objetos petición SOAP.................................................................................................................................................................14

2.4. Paquete com.edicom.ediwinws.cfdi................................................................................................................................................15


2.4.1. Objeto GetCfdi.............................................................................................................................................................................15
2.4.2. Objeto GetTimbreCfdi..................................................................................................................................................................15
2.4.3. Objeto CancelCfdi........................................................................................................................................................................15
2.4.4. Objeto GetCfdiFromUUID............................................................................................................................................................15
2.4.5. Objeto GetUUID...........................................................................................................................................................................15
2.4.6. Objeto GetCfdiAck.......................................................................................................................................................................15
2.4.7. Objeto CancelCfdiSigned.............................................................................................................................................................16
2.4.8. Objeto GetCfdiRetenciones.........................................................................................................................................................16
2.4.9. Objeto GetTimbreCfdiRetenciones..............................................................................................................................................16
2.4.10. Objeto CancelCfdiRetenciones..................................................................................................................................................16
2.4.11. Objeto CancelCfdiRetencionesSigned.......................................................................................................................................16
2.4.12. Objeto GetCfdiStatus.................................................................................................................................................................16

3. Cliente en modo comando...........................................................................................................................................17


3.1. Introducción..........................................................................................................................................................................................17
3.1.1. Instalación....................................................................................................................................................................................17
3.1.2. Archivos Importantes...................................................................................................................................................................17

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

3.3. Parámetros Confi gurables..................................................................................................................................................................32


3.3.1. Descripción general.....................................................................................................................................................................32
3.3.2. Ejemplo de una parametrización correcta..................................................................................................................................33

4. Ejemplo de Cliente C#..................................................................................................................................................34

| 5 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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

| 6 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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.

EDICOM proporciona servicios de timbrado de comprobantes firmados a través de su


servicio ASP (Application Service Provider) y también a través de web-service.

El servicio CFDi de EDICOM permite la generación y obtención del comprobante timbrado o


del timbre, directamente a partir del comprobante previamente firmado por el cliente.

Cuando un cliente contrata el servicio CFDi de Edicom recibe:



La URL del servicio y la documentación necesaria para ser utilizada.

Su Usuario de acceso al servicio.
● Su Contraseña de acceso al servicio.

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.

1.1.1. Acceso al servicio


La URL de acceso al webservice CFDi de Edicom es la siguiente:

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).

1.1.2. Paquetes del API de programación


La herramienta 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.

| 7 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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.

com.edicom.ediwinws.cfdi.service Contiene los objetos que contienen la lógica de implementación 3.0


de la petición SOAP del cliente necesaria para poder invocar el
servicio de timbrado. Estos objetos son autogenerados por la
herramienta Wsdl2Java de Axis, y por tanto no se van a explicar
en detalle.
com.edicom.ediwinws.cfdi Contiene los objetos que forman los ejecutables del cliente en 3.0
modo comando ofrecido dentro de este cliente. Los objetos
contenidos en este paquete son:
● Objeto GetCfdi. Ejecutable en modo comando.
● Objeto GetTimbreCfdi. Ejecutable en modo comando.
● Objeto CancelCfdi. Ejecutable en modo comando.

● Objeto GetCfdiFromUUID. Ejecutable en modo

comando.
● Objeto GetUUID. Ejecutable en modo comando.
● Objeto GetCfdiAck. Ejecutable en modo comando.

● Objeto CancelCfdiSigned. Ejecutable en modo

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.

1.1.3. Funciones del cliente webservice CFDi


La herramienta CfdiClient incluye dos ejecutables para invocar al servicio desde la línea de
comandos.

Función Descripción ver.

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.

| 8 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

cancelCfdiSigned Cancelación de CFDi del usuario. Permite realizar la cancelación de 1.0


comprobantes timbrados previamente a partir de los datos de cancelación
firmados por el usuario.
getCfdiRetenciones Generación de CFDi de retenciones electrónicas. Permite realizar el timbrado 1.0
del comprobante de retenciones electrónicas firmado por el cliente y devuelve el
comprobante timbrado.
getTimbreCfdiRete Generación del timbre de CFDi de retenciones electrónicas. Permite realizar 1.0
nciones el timbrado del comprobante de retenciones electrónicas firmado por el cliente
y devuelve el timbre del comprobante timbrado. (Solo el timbre).
cancelCfdiRetencio Cancelación de CFDi de retenciones electrónicas. Permite realizar la 2.0
nes cancelación de comprobantes de retenciones electrónicas timbrados
previamente.
CancelCfdiRetenci Cancelación de CFDi de retenciones electrónicas del usuario. Permite realizar 2.0
onesSigned la cancelación de comprobantes de retenciones electrónicas timbrados
previamente a partir de los datos de cancelación firmados por el usuario.
GetCfdiStatus Consulta del estado de un CFDi. Permite consultar si un comprobante es 3.0
cancelable o no, además de conocer el estado de cancelación del mismo.

| 9 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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

2.2. Paquete com.edicom.ediwinws.cfdi.client


Contiene el cliente necesario para poder invocar el servicio de timbrado. A partir de la
ejecución de este cliente, se puede gestionar los timbres obtenidos conforme necesite el
cliente.

2.2.1. Objeto CfdiClient.


El objeto CfdiClient es el encargado de gestionar todas las peticiones del cliente con el
servicio CFDi de EDICOM.

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

| 10 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

comprobante timbrado como un byte[] que contendrá el fichero zip con el


comprobante 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.

byte[] getCfdiTest(java.lang.String usuario, java.lang.String pass, byte[]
zipFile) throws CfdiException: Genera la petición de timbrado del comprobante al
webService en modo de prueba. 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 comprobante 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.

byte[] getTimbreCfdi(java.lang.String usuario, java.lang.String pass, byte[]
zipFile) throws CfdiException: Genera la petición de timbrado del comprobante al
webService y devuelve únicamente el timbre del comprobante timbrado, en vez del
comprobante completo. 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 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.

byte[] getTimbreCfdiTest(java.lang.String usuario, java.lang.String pass, byte[]
zipFile) throws CfdiException: Genera la petición de timbrado del comprobante 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 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.
● CancelData cancelCfdi(java.lang.String usuario, java.lang.String pass, String
rfc, String rfcR, String uuid, double total, boolean test, byte[] pfx,
java.lang.String pfxPassword, java.lang.String motivo, java.lang.String
sustitucion) throws CfdiException: Genera la petición 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 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.

byte[] getCfdiFromUUID(java.lang.String usuario, java.lang.String pass,
java.lang.String rfc, java.lang.String[] uuidList) throws CfdiException: Genera
la petición de obtención de timbres a partir del UUID del timbre generado
previamente por el webService. En caso de que la ejecución se realice
correctamente, devolverá los comprobantes timbrados como un byte[] que
contendrá el fichero zip con los comprobantes obtenidos de la petición. En caso de
que haya algún error en la ejecución, la llamada devolverá una excepción
● String getUUID(java.lang.String usuario, java.lang.String pass, byte[] zipFile)
throws CfdiException: Genera la petición de obtención del UUID del comprobante
timbrado correspondiente al comprobante firmado que le pasemos como parámetro.

| 11 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

En caso de que la ejecución se realice correctamente, devolverá el UUID del


comprobante timbrado que corresponda con el timbre de ese comprobante. 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.
● byte[] getCfdiAck(java.lang.String usuario, java.lang.String pass,
java.lang.String[] uuidList) throws CfdiException: Genera la petición de
obtención de los ACKs de los timbres a partir de los UUIDs que le especifiquemos
por el webService. En caso de que la ejecución se realice correctamente, devolverá
los ACKs como un byte[] que contendrá el fichero zip con los acuses de recibo
obtenidos de la petició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.
● CancelData cancelCfdiSigned(java.lang.String usuario, java.lang.String pass,
byte[] cancelSign) throws CfdiException: Genera la petición de cancelación de
comprobantes 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.
● byte[] getCfdiRetenciones(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 caso de que la
ejecución se realice correctamente, devolverá el comprobante de retenciones
electrónicas timbrado como un byte[] que contendrá el fichero zip con el
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.
● byte[] getCfdiRetencionesTest(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.
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 de retenciones electrónicas timbrado
como un byte[] que contendrá el fichero zip con el comprobante 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.

byte[] getTimbreCfdiRetenciones(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 y devuelve únicamente el
timbre del comprobante timbrado, en vez del comprobante completo. En caso de
que la ejecución se realice correctamente, devolverá el comprobante de retenciones
electrónicas 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.

| 12 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


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.

2.2.2. Excepción CfdiException.


El objeto CfdiException es el encargado de devolver la información del error que se haya
producido en la invocación del servicio CFDi de EDICOM.

Métodos:

int getCod(): Devuelve el código del error.

java.lang.String getText(): Devuelve el texto del error.

| 13 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


java.lang.String getTextCode(): Devuelve una explicación del tipo de error
obtenido.

2.3. Paquete com.edicom.ediwinws.cfdi.service


Contiene los objetos que contienen la lógica de implementación de la petición SOAP del
cliente necesaria para poder invocar el servicio de timbrado.

2.3.1. Objetos petición SOAP


Estos objetos son autogenerados por la herramienta Wsdl2Java de Axis, y por tanto no se
van a explicar en detalle.

http://axis.apache.org/

Interfaces:

CFDi: Interfaz de ejecución del servicio.

CFDiService: Interfaz de conexión del servicio.

Classes:

CancelaResponse: Objeto que contiene la respuesta de la/las cancelación/nes del servicio.

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.

CancelQueryData: Objeto que contiene la respuesta de la consulta de estado de


cancelación de un comprobante del servicio.

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.

CancelData: Objeto que contiene la respuesta de la cancelación del servicio.

Métodos:

| 14 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


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.

CFDiProxy: Objeto encargado de invocar de las peticiones SOAP del servicio.

CFDiServiceLocator: Objeto encargado de gestionar la URL donde invocar el servicio

CFDiSoapBindingStub: Objeto encargado de transformar los objetos de las peticiones al


formato SOAP, y la respuesta SOAP al formato de objetos del servicio.

Excepciones:

CFDiException: Objeto encargado de devolver la información del error que
se haya producido en la invocación del servicio CFDi de EDICOM.

2.4. Paquete com.edicom.ediwinws.cfdi


Contiene los objetos que forman los ejecutables del cliente en modo comando ofrecido
dentro de este cliente.

2.4.1. Objeto GetCfdi


Implementa el cliente para obtener el comprobante timbrado a partir del comprobante
firmado por el usuario.

2.4.2. Objeto GetTimbreCfdi


Implementa el cliente para obtener el timbre del comprobante timbrado a partir del
comprobante firmado por el usuario.

2.4.3. Objeto CancelCfdi


Implementa el cliente para cancelar un comprobante timbrado en el SAT.

2.4.4. Objeto GetCfdiFromUUID


Implementa el cliente para obtener los comprobante timbrados a partir del rfc del usuario y
los UUIDs que especifiquemos en la petición.

2.4.5. Objeto GetUUID


Implementa el cliente para obtener el UUID del comprobante timbrado a partir del
comprobante firmado por el usuario.

2.4.6. Objeto GetCfdiAck

| 15 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

Implementa el cliente para obtener el ACK del envío del comprobante al SAT.

2.4.7. Objeto CancelCfdiSigned


Implementa el cliente para cancelar los comprobantes timbrados en el SAT a partir de los
datos firmados por el cliente.

2.4.8. Objeto GetCfdiRetenciones


Implementa el cliente para obtener el comprobante de retenciones electrónicas timbrado a
partir del comprobante firmado por el usuario.

2.4.9. Objeto GetTimbreCfdiRetenciones


Implementa el cliente para obtener el timbre del comprobante de retenciones electrónicas
timbrado a partir del comprobante firmado por el usuario.

2.4.10. Objeto CancelCfdiRetenciones


Implementa el cliente para cancelar los comprobantes de retenciones electrónicas timbrados
en el SAT.

2.4.11. Objeto CancelCfdiRetencionesSigned


Implementa el cliente para cancelar los comprobantes de retenciones electrónicas timbrados
en el SAT a partir de los datos firmados por el cliente.

2.4.12. Objeto GetCfdiStatus


Implementa el cliente para consultar el estado de cancelación de un comprobante timbrado
en el SAT.

| 16 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

3. Cliente en modo comando

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").

Imagen 3.1: Vista en el directorio C:\ una vez instalado.

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.1.2. Archivos Importantes



CfdiClient.properties. Archivo de configuración de la herramienta. Los parámetros
de la herramienta pueden definirse por defecto en este documento o pueden
definirse en el momento de la llamada al ejecutable. Es recomendable definirlas en

| 17 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

el archivo de configuración aunque puntualmente se pueden sobrescribir los


parámetros escribiéndolos en el momento de la llamada.
● GetCfdi.exe. Ejecutable para la obtención de los comprobantes timbrados a partir
de los xmls de los comprobantes firmados por el cliente.

GetTimbreCfdi.exe. Ejecutable para la obtención de los timbres de los
comprobantes timbrados a partir de los xmls de los comprobantes firmados por el
cliente.

CancelCfdi.exe. Ejecutable para la cancelación de un comprobante timbrado.

GetCfdiFromUUID.exe. Ejecutable para la obtención de los comprobantes
timbrados a partir del RFC del cliente y de los UUIDs comprobantes timbrados
especificados por el cliente.

GetUUID.exe. Ejecutable para la obtención del UUID del comprobante timbrado a
partir de los xmls de los comprobantes firmados por el cliente.

GetCfdiAck.exe. Ejecutable para la obtención de los acuses de recibo de los envíos
de los comprobantes timbrados al SAT.

CancelCfdiSigned.exe. Ejecutable para la cancelación de comprobantes timbrados
a partir de los datos de cancelación firmados por el cliente.
● GetCfdiRetenciones.exe. Ejecutable para la obtención de los comprobantes de
retenciones electrónicas timbrados a partir de los xmls de los comprobantes de
retenciones electrónicas firmados por el cliente.
● GetTimbreCfdiRetenciones.exe. Ejecutable para la obtención de los timbres de los
comprobantes de retenciones electrónicas timbrados a partir de los xmls de los
comprobantes de retenciones electrónicas firmados por el cliente.
● CancelCfdiRetenciones.exe. Ejecutable para la cancelación de comprobantes de
retenciones electrónicas timbrados.

CancelCfdiRetencionesSigned.exe. Ejecutable para la cancelación de
comprobantes de rewtenciones electrónicas timbrados a partir de los datos de
cancelación firmados por el cliente.

GetCfdiStatus.exe. Ejecutable para la consulta del estado de cancelación de un
comprobante timbrado.
Nota: Los comandos deben ejecutarse desde el procesador de línea de comandos o mediante
ficheros de proceso por lotes (ficheros.bat)

3.2. Ejecutables
Los ejecutables que incluye el cliente CfdiClient son los siguientes:

Ejecutables Descripción ver.

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

| 18 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

invoca para timbrar los componentes ya firmados por el usuario.


Devuelve el timbre (solo el timbre) de los comprobantes timbrados
enviados al SAT.
CancelCfdi Cancelación de un comprobante timbrado de CFDI. Permite cancelar un 3.0
comprobante que especifiquemos a partir de los datos propios del
comprobante solicitados por el SAT. Devuelve para cada timbre si se ha
cancelad correctamente o no, y la respuesta del SAT sobre la petición de
timbrado que se ha realizado.
GetCfdiFromUUID Recuperación de CFDI. Permite obtener los comprobantes timbrados a 1.0
partir del RFC del cliente y los UUIDs de los comprobantes timbrados. El
cliente GetCfdi se invoca para recuperar los comprobantes ya timbrados
por el usuario. Devuelve los comprobantes timbrados enviados al SAT.
GetUUID Obtención del UUID del timbre de CFDI. Permite obtener el UUID del 1.0
timbre del comprobante timbrado a partir del comprobante firmado. El
cliente GetUUID se invoca para verificar si un comprobante firmado ha
sido timbrado por el usuario. Devuelve el UUID del comprobante timbrado
enviado al SAT. Es imprescindible que el comprobante timbrado no sufra
ningún tipo de modificación, ya que en este caso interpretaría que es un
comprobante distinto y no devolvería el UUID.
GetCfdiAck Recuperación del acuse de recibo del envío del comprobante timbrado al 1.0
SAT. Permite obtener el acuse de recibo de los comprobantes timbrados a
partir de los UUIDs de los comprobantes timbrados. Devuelve los ACKs
de los comprobantes timbrados enviados al SAT.
CancelCfdiSigned Cancelación de comprobantes timbrados de CFDI. Permite cancelar los 1.0
comprobantes que especifiquemos a partir de la estructura de
cancelación especificada por el SAT y firmada por el cliente con su propio
certificado. Devuelve cada timbre cancelado y la respuesta del SAT sobre
la petición de cancelación de timbrado que se ha realizado.
GetCfdiRetenciones Generación de CFDI de retenciones electrónicas. Permite obtener los 1.0
comprobantes de retenciones electrónicas timbrados a partir de los
comprobantes de retenciones electrónicas firmados. El cliente
GetCfdiRetenciones se invoca para timbrar los comprobantes de retenciones
electrónicas ya firmados por el usuario. Devuelve los comprobantes de
retenciones electrónicas timbrados enviados al SAT.
GetTimbreCfdiRetencio Generación de timbre de CFDI de retenciones electrónicas. Permite 1.0
nes obtener el timbre del comprobante de retenciones electrónicas timbrado a
partir del comprobante de retenciones electrónicas firmado. El cliente
GetTimbreCfdiRetenciones se invoca para timbrar los componentes de
retenciones electrónicas ya firmados por el usuario. Devuelve el timbre
(solo el timbre) de los comprobantes de retenciones electrónicas timbrados
enviados al SAT.
CancelCfdiRetenciones Cancelación de comprobantes de retenciones electrónicas timbrados de 2.0
CFDI. Permite cancelar los comprobantes de retenciones electrónicas que
especifiquemos a partir de sus UUIDs. Devuelve para cada timbre si se ha
cancelad correctamente o no, y la respuesta del SAT sobre la petición de
timbrado que se ha realizado.
CancelCfdiSigned Cancelación de comprobantes de retenciones electrónicas timbrados de 1.0
CFDI. Permite cancelar los comprobantes de retenciones electrónicas que
especifiquemos a partir de la estructura de cancelación especificada por
el SAT y firmada por el cliente con su propio certificado. Devuelve cada
timbre cancelado y la respuesta del SAT sobre la petición de cancelación
de timbrado que se ha realizado.
GetCfdiStatus Consulta del estado de cancelación de un comprobante CFDi timbrado. 3.0
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.

3.2.1. GetCfdi.exe

| 19 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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:

GetCfdi [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --wsPass}


password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-o, --outputDir}
outDir] [{-t, --test} test] [{-d, --deleteInputFiles}
deleteInputFiles] [{-l, --logTime} logTime] ficheroComprobante

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.

| 20 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


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:

GetTimbreCfdi [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-o, --
outputDir} outDir] [{-t, --test} test] [{-d, --deleteInputFiles}
deleteInputFiles] [{-l, --logTime} logTime] ficheroComprobante

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

| 21 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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


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 timbre correspondiente al comprobante timbrado estará
disponible en la carpeta de salida del cliente.

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:

CancelCfdi [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-h, --help}] [{-o, --outputDir} outDir] [{-l, --
logTime} logTime] [--rfc rfc] [--rfcR rfcR] [--total total] [{-t, --
test} test] [--filePfx pfx] [--pfxPass pfxPass] [--motivo motivo] [--
sustitucion sustitucion] uuid

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.

| 22 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


-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:

GetCfdiFromUUID [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-l, --logTime} logTime] [{-h, --help}] [{-o, --
outputDir} outDir] [--rfc rfc] uuids

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.

| 23 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


--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:

GetUUID[{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --wsPass}


password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-t, --test} test]
[{-l, --logTime} logTime] [{-d, --deleteInputFiles} deleteInputFiles]
ficheroComprobante

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

| 24 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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:

GetCfdiAck [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-l, --logTime} logTime] [{-h, --help}] [{-o, --
outputDir} outDir] uuids

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.

| 25 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


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:

CancelCfdiSigned [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-l, --logTime} logTime] [{-h, --help}] [{-i, --
inputDir} inDir] [{-o, --outputDir} outDir] uuids

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

| 26 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

Permite obtener los comprobantes de retenciones electrónicas timbrados a partir de los


comprobantes de retenciones electrónicas firmados por el usuario. El cliente
GetCfdiRetenciones.exe se invoca para timbrar los comprobantes de retenciones
electrónicas a través del servicio CFDi de Edicom y devolver los comprobantes de
retenciones electrónicas timbrados enviados al SAT en forma de archivos xml.

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:

GetCfdiRetenciones [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p,


--wsPass} password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-o, --
outputDir} outDir] [{-t, --test} test] [{-l, --logTime} logTime] [{-d,
--deleteInputFiles} deleteInputFiles] ficheroComprobante

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:

| 27 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


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:

GetTimbreCfdiRetenciones [{-w, --wsUrl} url] [{-u, --wsUser} usuario]


[{-p, --wsPass} password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-
o, --outputDir} outDir] [{-t, --test} test] [{-l, --logTime} logTime]
[{-d, --deleteInputFiles} deleteInputFiles] ficheroComprobante

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.

| 28 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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:

CancelCfdiRetenciones [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-


p, --wsPass} password ] [{-h, --help}] [{-i, --inputDir} inDir] [{-o,
--outputDir} outDir] [{-l, --logTime} logTime] [--rfc rfc] [--filePfx
pfx] [--pfxPass pfxPassword] [--motivo motivo] [--sustitucion
sustitucion] uuids

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.

| 29 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


-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:

CancelCfdiRetencionesSigned [{-w, --wsUrl} url] [{-u, --wsUser}


usuario] [{-p, --wsPass} password ] [{-l, --logTime} logTime] [{-h, --
help}] [{-i, --inputDir} inDir] [{-o, --outputDir} outDir] uuids

Parámetros:
● -w, --wsUrl: Url de acceso al servicio.
● -u, --wsUser: Nombre de usuario.

| 30 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual 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:

GetCfdiStatus [{-w, --wsUrl} url] [{-u, --wsUser} usuario] [{-p, --


wsPass} password ] [{-h, --help}] [{-o, --outputDir} outDir] [{-l, --
logTime} logTime] [--rfc rfc] [--rfcR rfcR] [--total total] [{-t, --
test} test] uuid

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.

| 31 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario


-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.

3.3. Parámetros Configurables


Los parámetros globales que utilizan todas las funciones de la herramienta están recogidos
en un solo archivo cfdiClient.properties. Es recomendable completar este archivo con los
valores por defecto aunque es posible sobreescribirlos en la propia llamada.

3.3.1. Descripción general



wsUrl. Permite indicar la URL de acceso al servicio web-service de EDICOM.
Nota: La URL del servicio es https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi

wsUser. Permite indicar el nombre de usuario del servicio CFDi. Normalmente este
dato es el RFC de la empresa.
● wsPass. Permite indicar la contraseña de acceso al servicio CFDi. Este dato es
comunicado de manera confidencial al cliente.

inputDir. Permite indicar el directorio de origen por defecto de los ficheros utilizados
como origen de datos de los ejecutables del cliente. Pueden ser orígenes de
comprobantes firmados en formato xml o del certificado del usuario necesario para
hacer la cancelación. Cuando se ejecutan las aplicaciones, se buscarán en este
directorio los ficheros a procesar.
● outputDir. Permite indicar el directorio de destino donde se depositan los ficheros
que el servicio devuelve como respuesta. Pueden ser los comprobantes timbrados,
los timbres o los ACKs de las peticiones resultantes de las llamadas a los
ejecutables.

fileComprobante. Permite indicar el comprobante a enviar, o una máscara para
seleccionar los ficheros específicos a enviar en el cliente. Por ejemplo, "*.xml"
permite que se seleccionen todos los archivos con extensión .xml que existan en
ese momento en el inputDir.

| 32 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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.

3.3.2. Ejemplo de una parametrización correcta


Si no se indica lo contrario, para fileComprobante se entiende que todos los archivos se
obtienen dentro de inputDir, y se generan en outputDir. inputDir y outputDir pueden ser el
mismo directorio. Aunque no se recomienda.

Si no se indica lo contrario, para filePfx se entiende que se encuentra dentro de la carpeta


inputDir.
Nota: La descripción de los parámetros aparecerá al llamar a una función si falta algún parámetro
obligatorio por configurar.

EL dato wsUrl no debe ser modificado.

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)

Nota: La información del RFC en el ejemplo es ficticia

| 33 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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:

Paso 1. Generar la clase webService cliente utilizando la utilidad wsdl.exe

Paso 2. Autorizar el certificado de la conexión https

Paso 3. Leer el fichero en un array de bytes

Paso 4. Escribir el resultado, un array de bytes, en un fichero.

4.1.1. Generación de la clase webservice cliente


El SDK de la plataforma de desarrollo .NET proporciona la utilidad wsdl.exe, que permitirá
generar la clase cliente webService, para realizar operaciones contra el servicio de CFDI.

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.

En el fichero CFDIServices.cs, se habrán generado todas las operaciones que proporciona


el servicio de CFDI.

4.1.2. Autorizar el certificado de la conexión https


Un aspecto importante, a la hora de comunicarse con el servicio del CFDI, y la autorización
del certificado de la conexión HTTPS. Para ello existen dos opciones:

Cargar el certificado del servicio, en el almacén de certificados de Windows.

Imagen 4.1: Certificados de la autoridad certificadora ACEDICOM


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

public static void Main (string[] args)

| 34 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

{
ServicePointManager.ServerCertificateValidationCallback =
ValidateCertificate;

. . . . . . . .
}

private static bool ValidateCertificate(object sender, X509Certificate


cert, X509Chain chain, System.Net.Security.SslPolicyErrors
sslPolicyErrors)
{
//Se confía en todos los cerficados SSL, si se omite este será
necesario cargar el certificado en el almacén de certificados
return true;
}

En esta función de callback en concreto, se confía en todos los certificados.

4.1.3. Lectura de un fichero en un array de bytes


En las llamadas webService, que tienen como parámetro de entrada un fichero (getCfdi,
getTimbre, etc...) , se debe leer el contenido de este y pasarlo a la función como y un array
de bytes.

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

4.1.4. Escritura del resultado en un fichero


En las llamadas webServices, que devuelven como resultado un fichero (getCfdi, getTimbre,
etc...), este es devuelto en forma de array de bytes, que deberá ser escrito en el fichero
resultado que se desee.

Para escribir un array de bytes en un fichero, se puede utilizar la función de C#


File.WriteAllBytes (output_file, result);

byte[] result = cfdiService.getTimbreCfdiTest(


user,
password,
File.ReadAllBytes(input_file));
File.WriteAllBytes (output_file, result);

4.1.5. Aplicación de ejemplo


Main.cs

| 35 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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;

Console.WriteLine ("CFDI Command line tool");

Console.Write ("URL (https://cfdiws.sedeb2b.com/EdiwinWS/services/CFDi): ");


string url = Console.ReadLine();

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());

Console.Write ("user: ");


string user = Console.ReadLine();

Console.Write ("passwrod: ");


string password = Console.ReadLine();

Console.Write ("input file: ");


string input_file = Console.ReadLine();

byte[] result;
string output_file;

| 36 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

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

private static bool ValidateCertificate(object sender, X509Certificate cert,


X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
//Se confía en todos los certificados SSL, si se omite este será necesario cargar el
certificado en el almacén de certificados
return true;
}
}
}

| 37 de 38 Versión 1.2, En revisión, 28/01/20


CFDi Client Manual de usuario

CFDiService.cs (generado por la utilidad wsdl.exe)

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 {

private System.Threading.SendOrPostCallback changePasswordOperationCompleted;

private System.Threading.SendOrPostCallback getUUIDOperationCompleted;


. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .

public delegate void getCfdiFromUUIDCompletedEventHandler(object sender,


getCfdiFromUUIDCompletedEventArgs args);

| 38 de 38 Versión 1.2, En revisión, 28/01/20

También podría gustarte