lunes, 30 de junio de 2014

Validar CFDI WebService C# 

Aquí dejo un mini tutorial de como consumir el WebService para validar CFDI en SAT (Mexico). 
Actualmente SAT cuenta con su tutorial que lo puedes encontrar en la pagina, aquí los links.


SAT info Validar CFDI 
http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/validacion_comprobantes.aspx

Tutorial Web ServicePDF ftp://ftp2.sat.gob.mx/asistencia_ftp/publicaciones/cfdi/WS_ConsultaCFDI.pdf


  • Localizar la URL del Servicio Web (Contrato) 
https://consultaqr.facturaelectronica.sat.gob.mx/ConsultaCFDIService.svc

  • Añadir el servicio en tu visual studio (VS 2010 en mi caso)
Clic derecho sobre el proyecto dentro del Solution Explorer.
Clic en la opción Add  Service Reference
Copia y pega la URL como en la siguiente imagen.



Aquí  puedes darle un Namespace a las clases que te va a generar al agregar la referencia al servicio, en este ejemplo yo deje el Namespace que VS2010 te pone por default.


En el ejemplo creamos una aplicación WinForms donde agregaremos dos TextBox y un Button.





En el evento Click del boton agregamos el siguiente fragmento de código.

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                
                using (ServiceReference1.ConsultaCFDIServiceClient
                    client = new ServiceReference1.ConsultaCFDIServiceClient("BasicHttpBinding_IConsultaCFDIService"))
                {
                    tbxOutPut.Text += "Calling WebService...";
                    ServiceReference1.Acuse acuse = client.Consulta(tbxInput.Text);
                    if (acuse == null)
                    {
                        tbxOutPut.Text += "ERROR:: Acuse is null";

                    }
                    else
                    {
                        tbxOutPut.Text += "\r\nEstado:: " + acuse.Estado + "\r\nCodigoEstatus::" + acuse.CodigoEstatus;
                    }
                }
            }
            catch (Exception ex)
            {
                tbxOutPut.Text += "Exception:: " + ex.Message;
                MessageBox.Show("ERROR::" + ex.Message);
            }

        }




Por lo tanto solo utilizamos el cliente que consume el web service ServiceReference1.ConsultaCFDIServiceClient y el objeto que regresa el WebService ServiceReference1.Acuse.

Cuando se crea el cliente debemos especificar el nombre de la configuración al EndPoint el cual es el siguiente
"BasicHttpBinding_IConsultaCFDIService", podemos hallar ese nombre dentro del .config de la aplicación ya que se agrego automáticamente al hacer referencia al servicio.

Ahora podemos hacer el test a nuestra app de prueba. Ingresando el siguiente string en el tbxInput.

?re=[RFC_Emisor]
&rr=[RFC_Receptor]
&tt= [Total]
&id=[UUID]

En una sola linea Ej.

?re=TCA070905BR6&rr=TIM950103BBA&tt=37576.800000&id=5DBD6BCE-042C-4295-86B8-0E7D6B001827


Y probamos la app.