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

Documentos relacionados