Net - FacturaSi
Transcripción
Net - FacturaSi
Servicio Web para el Timbrado y Cancelación (TimbraSí) Conección con aplicaciónes .NET FacturaSí 2011 S.A. de C.V., Todos los derechos reservados Configuración general del web service Para poder configurar el servicio web dentro de nuestra aplicación, se necesita hacer referencia al webservice, a continuación se muestran un ejemplo de cómo lograrlo en Visual Studio 2010. Paso 1.- Dar click en nuevo proyecto Paso 2 .- Seleccionar el tipo de lenguaje, ya sea Visual Basic o C#, y una plantilla de aplicacion web, en este caso “ Aplicacion web ASP.NET”. Paso 3 .- En el explorador de soluciones hacer click derecho en el nombre de la solución, en este caso “WebAplications” nos desplazamos por el menú hasta “Agregar referencia web”. Paso 4 .- Se despliega la siguiente ventana y se introduce la dirección URL del servicio web, posteriormente se da click en la flecha verde. Paso 5 .- Se aceptan las advertencias de seguridad. Paso 6.- Por último se define el nombre del servicio web y se da clic en Agregar referencia web. Paso 7.- Para verificar que el servicio se agregó satisfactoriamente, en el explorador de soluciones debe aparecer un nuevo elemento en la carpeta “Web Reference”. En este caso el servicio web se llama “WebReference”. Implementación del cliente La implementación depende del tipo de lenguaje que se utilizará para configurar el cliente, en este ejemplo utilizamos C#, con el siguiente código: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using facturasiweb.WebReference; using System.Net.Security; using System.Net; using System.Security.Cryptography.X509Certificates; namespace facturasiweb { public partial class _Default : System.Web.UI.Page { public static bool ValidateServerCertificate(Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors); { return true; } protected void Page_Load(object sender, EventArgs e) { Timbrado t1 = new Timbrado(); String inputFileName= “C:\\ruta\\cfdPrueba.xml"; String base64String; System.IO.FileStream inFile; byte[] binaryData; String outputData = ""; inFile = new System.IO.FileStream(inputFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); binaryData = new Byte[inFile.Length]; long bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length); inFile.Close(); base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); outputData = t1.timbradoCFD("usuario", "Password", base64String, "contraseñaCsd"); Console.Write(outputData); } } } En el ejemplo presentado se especifican el acceso a librerías y a los métodos del web service empleando la palabra clave “using” que hacen referencia al web service y otras necesarias de .NET Dentro de la funcionalidad del código se realizan los siguiente procesos: 1.- verificar los certificados SSL 2.- Se recibe y encripta el XML 3.- Se llama al método “timbradoCFD” del objeto “Timbrado”, al cual se le envían los parámetros necesarios (explicados posteriormente en la documentación). En VB el código se quedaría de la siguiente manera: Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports facturasiweb.WebReference Imports System.Net.Security Imports System.Net Imports System.Security.Cryptography.X509Certificates Namespace facturasiweb Public Partial Class _Default ' TODO: *** Comprobar si es Inherits o Implements *** Inherits System.Web.UI.Page Public Shared Boolean ValidateServerCertificate(Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) Return true End Class Protected Sub Page_Load(sender As Object, e As EventArgs) Dim t1 As New Timbrado() Dim inputFileName As String = “C:\ruta\cfdPrueba.xml"; String base64String; System.IO.FileStream inFile; byte[] binaryData; String outputData = ""; inFile = new System.IO.FileStream(inputFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); binaryData = new Byte[inFile.Length]; long bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length); inFile.Close(); base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); outputData = t1.timbradoCFD("usuario", "Password", base64String, "contraseñaCsd") Console.Write(outputData) End Sub End namespace Métodos del web service Métodos de timbrado timbrar Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. cfdi: El comprobante cfdi v3.2 en Base64. Respuesta: return: El comprobante cfdi v3.2 timbrado en Base64. Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron o su plan culminó. SyntaxException Errores de sintaxis, ocurre cuando el XML no está en el formato adecuado, CFDI v3.2. StampException Excepción lanzada cuando el PAC detecta una inconsistencia en el CFDI al solicitar el timbrado. InternalException Error Interno del Sistema (contactar a soporte en caso de recibir este tipo de error). timbrarCFD Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. cfd: El comprobante cfd v2.2 en Base64. passkey: Contraseña del .key del CSD. Respuesta: return: El comprobante cfdi v3.2 timbrado en Base64. Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó o no es usuario CFD. SyntaxException Errores de sintaxis, ocurre cuando el XML no está en el formato adecuado. StampException Excepción lanzada cuando el PAC detecta una inconsistencia en el CFDI al momento de solicitar el timbrado. También ocurre cuando existe un error al firmar el CFDI con el CSD. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). timbrarTXT Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. txt: El comprobante txt en Base64 (véase el documento: estructura de comprobante en Pipes). passkey: Contraseña del .key del CSD. Respuesta: return: El comprobante cfdi v3.2 timbrado en Base64. Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó o no es usuario TXT. SyntaxException Errores de sintaxis, ocurre cuando el TXT no está en el formato adecuado. StampException Excepción lanzada cuando el PAC detecta una inconsistencia en el CFDI al momento de solicitar el timbrado. También ocurre cuando existe un error al firmar el CFDI con el CSD. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). Métodos de Consulta consultaCFDI Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. uuid: El UUID del comprobante cuyo XML se desea obtener. Respuesta: return: El CFDI v3.2 en Base64 con el UUID solicitado. Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó o no tiene autorización para consultar ese UUID. CFDIException Errores arrojado cuando no es posible consultar el CFDI. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). consultaCFDIPorFolio Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. rfc: El RFC del emisor del comprobante. folio: El folio del comprobante. serie: La serie del comprobante (opcional). Respuesta: return: El CFDI v3.2 en Base64 con el número de folio solicitado. Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó o no tiene autorización para consultar ese UUID. CFDIException Errores arrojado cuando no es posible consultar el CFDI. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). consultaInfoCFDIs Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. rfc: El RFC del emisor de los comprobantes. desde: Fecha en la que inicia la búsqueda.. hasta: Fecha en la que termina la búsqueda. Respuesta: return: Listado de datos de los comprobantes correspondientes. La lista incluye los datos de: UUID, serie, folio y fecha de Timbrado Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó o no tiene autorización para consultar ese UUID. CFDIException Errores arrojado cuando no es posible consultar el CFDI. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). Método de cancelación cancela Parámetros: usuario: Nombre de usuario del servicio. password: Contraseña del usuario del servicio. rfc: El RFC del emisor. uuids: Lista de UUIDs que se desean cancelar. cer: Certificado X.509 del CSD del cliente en formato Base64. Debe coincidir con el parámetro "key", es decir, debe ser la llave pública. key: Llave privada en formato Base64 del CSD del cliente, debe coincidir con el certificado especificado en el parámetro "cer". passkey: Password para la llave privada. Respuesta: return: return: una cadena con la siguiente respuesta: “Fecha:” FECHA “Sello digital SAT: “ SELLO <estatusUUID “-UUID:” UUID “descripcion”>* Excepciones: LoginException Excepción recibida cuando se ha proporcionado un usuario y/o contraseña incorrectos. UserException Excepción recibida cuando el usuario ya no puede timbrar o cancelar debido a que no está activo, sus facturas terminaron, su plan culminó. CancelException Excepción lanzada por el PAC en caso de que el SAT arroje otro código de estado diferente a una cancelación correcta. InternalException Error Interno del Sistema (contacte a soporte en caso de recibir este tipo de error). Mensajes de excepciones StampException: "Error en proceso de timbrado." + mensaje del PAC Mensajes enviados por el PAC en el proceso de timbrado: "302 - El sello no coincide con la cadena original del cfdi. Cadena original comparada: CadOR Número de Certificado: NoCert Sello: SELLO”. "303 - El Número de Certificado especificado no coincide con el número de certificado contenido en el archivo." "303 - El Certificado contenido en la factura no corresponde al RFC del emisor de acuerdo a la lista LCO del SAT." "304 - El Certificado proporcionado ha expirado. Certificado válido desde FECHA hasta FECHA" "304 - El Certificado no es válido aún. Certificado válido desde FECHA hasta FECHA” "304 - El certificado proporcionado ha caducado." "304 - El certificado proporcionado fue revocado por el SAT." "305 - La fecha de la factura no se encuentra dentro del rango de fechas válido para el CSD proporcionado." "306 - El certificado proporcionado corresponde a una FIEL. Debe utilizar un CSD para poder emitir una factura." "306 - El certificado proporcionado no corresponde a una FIEL o un CSD." "307 - La factura ya ha sido previamente timbrada. UUID: UUID Fecha Timbrado: FechaTimbrado sello_cfd: SelloCFD sello_sat: SelloSAT certificado_sat: NoCertificadoSAT "308 - El Certificado especificado no ha sido expedido por el SAT." "El certificado proporcionado no corresponde a una FIEL. Debe utilizar una FIEL para poder firmar un manifiesto." "401 - La factura debe tener menos de 72 horas de haberse creado." "401 - La factura tiene una fecha de creación posterior a la fecha actual del servidor. Fecha en el servidor: FECHA Fecha de creación de cfdi: FECHA" "402 - El RFC del emisor no existe en la lista LCO del SAT." "403 - La fecha de creación del cfdi debe ser mayor o igual al 01 de Enero de 2011" Para usuarios txt o cfd: “El usuario no tiene su csd almacenado, debe agregar su csd para poder usar el traductor” CancelException: "Error en proceso de cancelación. STATUS - UUID UUID” + mensaje del PAC. Mensajes enviados por el PAC en el proceso de cancelación: " previamente cancelado. " " No corresponde el RFC del emisor y de quien solicita la cancelación. " " no existe. " " incidencia no identificada" LoginException: "El usuario y/o contraseña son incorrectos." UserExcepcion: "El usuario no se encuentra en estado activo." "El usuario llegó al límite permitido de facturas." "El plan para el usuario especificado ha finalizado. Para continuar debe renovar su plan." SintaxisException: "Error de sintáxis:” + mensaje InternalException: "Ha ocurrido un error interno, por favor, comuníquese con soporte." Servicio de Pruebas: https://107.23.45.180:8181/FacturaSiStampService/Timbrado?wsdl NOTA: Para poder timbrar en el servicio de pruebas se necesita un Usuario de pruebas, así como un CSD de pruebas que se entrega junto con este documento. usuario: pruebas passphrase: Bpbz0iUVVFUkVUQVJPIgogICAgICAgCSAgIGNvbG9uaWE RFC: CAMN8004301K0 (Las facturas deberán ser emitidas por este RFC) Servicio Productivo: https://timbrasi.com:8181/FacturaSiStampService/Timbrado?wsdl