C#

A continuación encontrara los ejemplos para consumir los servicios de SmartWeb; cabe resaltar que todos los ejemplos fueron probados exitosamente con el IDE Visual Studio 2013. De igual manera puede descargar los proyectos con los código de ejemplo de la pagina de github para SmarterWeb.

Todas las URLs mostradas en esta documentación apuntan al servicio de pruebas, para obtener las URLs del servicio productivo es necesario contratar un paquete.

Pasos previos

Para poder consumir los servicios, es necesario agregarlos previamente al IDE; Visual Studio provee una herramienta para poder efectuar esta tarea de manera sencilla, para esto es necesario dar clic con el botón derecho del mouse en el elemento “References” del Explorador de soluciones y después seleccionar “Add Service Recerence”. Una vez hecho esto aparecera una nueva ventana, en esta debe agregarsele el URL del servicio y el namespace que se le asigna.

Autenticación

Antes de realizar cualquier otra operación es necesario autenticarse, para consumir este servicio se usa la URL: http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL.

El servicio de autenticación básico recibe un usuario y una contraseña, si ambos son correctos devuelve un token de autenticación, en caso contrario se lanza una excepción.

Para este ejemplo el WebService se agregó usando el namespace Autenticacion.

using System;
using Test.Autenticacion;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
                string Token = Autentica.AutenticarBasico("demo", "123456789");
                Console.WriteLine(Token);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Timbrado

Para el servicio de timbrado se usa la URL: http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL

Para los ejemplos de timbrado, el WebService se agregó usando el namespace Timbrado.

TimbrarXML

TimbrarXML Recive el contenido de una factura en string y el token de autenticación, si la factura y el token son correctos devuelve el complemento timbre en un string, en caso contrario lanza una excepción.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Timbrado;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
                wsTimbradoSoapClient Timbrado = new wsTimbradoSoapClient();
                string Token = Autentica.AutenticarBasico("demo", "123456789");
                string XML = File.ReadAllText("factura1peso.xml");
                string Result = Timbrado.TimbrarXML(XML, Token);
                Console.WriteLine(Result);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

TimbrarXMLV2

TimbrarXMLV2 es muy similar a TimbrarXML, con la diferencia de que el resultado en lugar de ser solo el complemento timbre, es la factura ya timbrada.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Timbrado;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
                wsTimbradoSoapClient Timbrado = new wsTimbradoSoapClient();
                string Token = Autentica.AutenticarBasico("demo", "123456789");
                string XML = File.ReadAllText("factura1peso.xml");
                string Result = Timbrado.TimbrarXMLV2(XML, Token);
                Console.WriteLine(Result);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Cancelación

Para el servicio de cancelación se usa el servicio con la URL: http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL.

Para los ejemplos de cancelación se agrego el WebService con el namespace Cancelacion

CancelarCSD

Este servicio recibe los archivos *.cer y *.key en base 64, la contraseña del archivo *.key, el RFC del emisor que desea cancelar la facturas, los UUIDs de las facturas a cancelar (estos se encuentran dentro del complemento timbre) y el token de autentificación.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Cancelacion;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
                wsCancelacionSoapClient Cancelacion = new wsCancelacionSoapClient();
                string Token = Autentica.AutenticarBasico("demo", "123456789");
                byte[] CerBytes = File.ReadAllBytes("aad990814bp7_1210261233s.cer");
                byte[] KeyBytes = File.ReadAllBytes("aad990814bp7_1210261233s.key");
                string CerB64 = Convert.ToBase64String(CerBytes);
                string KeyB64 = Convert.ToBase64String(KeyBytes);
                //Los UUIDs para este ejemplo fueron generados de manera aleatoria
                string[] UUIDs = 
                {
                    "17aeeccc-6ec0-49af-b786-0878d34e0b27",
                    "a3216283-078c-418e-bf2c-2fb62e418d45"
                };
                string Acuse = Cancelacion.CancelarCSD(CerB64, KeyB64, "12345678a", "AAD990814BP7", UUIDs, Token);
                Console.WriteLine(Acuse);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

CancelarPEM

Este servicio es muy similar a “CancelarCSD”, con la diferencia de que deben de mandarse el certificado y el key en formato *.pem, ademas de que no se envia la contraseña del key, ya que no es requerida.

using System;
using System.IO;
using Test.Autenticacion;
using Test.Cancelacion;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
                wsCancelacionSoapClient Cancelacion = new wsCancelacionSoapClient();
                string Token = Autentica.AutenticarBasico("demo", "123456789");
                byte[] CerBytes = File.ReadAllBytes("aad990814bp7_1210261233s.cer.pem");
                byte[] KeyBytes = File.ReadAllBytes("aad990814bp7_1210261233s.key.pem");
                string CerB64 = Convert.ToBase64String(CerBytes);
                string KeyB64 = Convert.ToBase64String(KeyBytes);
                //Los UUIDs para este ejemplo fueron generados de manera aleatoria
                string[] UUIDs = 
                {
                    "17aeeccc-6ec0-49af-b786-0878d34e0b27",
                    "a3216283-078c-418e-bf2c-2fb62e418d45"
                };
                string Acuse = Cancelacion.CancelarPEM(CerB64, KeyB64, "AAD990814BP7", UUIDs, Token);
                Console.WriteLine(Acuse);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Timbres disponibles

Para obtener los timbres disponibles es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.

using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.ServiceModel.Channels;
using Test.Account;
using Test.Autenticacion;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            wsAutenticacionSoapClient Autentica = new wsAutenticacionSoapClient();
            string Token = Autentica.AutenticarBasico("demo", "123456789");
            IwsAccountClient Account = new IwsAccountClient();

            //Debido a que se usa un certificado de pruebas, se debe agregar este bloque de codigo
            ServicePointManager.ServerCertificateValidationCallback +=
                delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
                {
                    return true;
                };
            using (new OperationContextScope(Account.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = new HttpRequestMessageProperty()
                {
                    Headers = { { "token", Token } }
                };
                try
                {
                    Cliente Cliente = Account.GetClientById();
                    SaldoCliente Saldo = Account.GetSaldoClientById(Cliente.IdCliente);
                    Console.WriteLine(Saldo.SaldoTimbres);
                    Console.WriteLine(Saldo.TimbresUtilizados);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
    }
}

lenguajes/csharp.txt · Última modificación: 2016/08/10 09:34 (editor externo)
Volver arriba
CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0