Crear la factura electrónica del SAT desde PHP, ejecutando C# .Net. XML, Sellado, Timbrado. Cfdi 3.3

En este video te enseñare como puedes crear el XML y timbrarlo, esto ejecutando código ya compilado de C# .Net enviándole los valores de la factura desde PHP.

Descargar código fuente

Curso para crear el complemento para recepción de pago del SAT en C# .Net gratis, cfdi 3.3

Este es un curso gratuito para que puedas crear tus xml con el complemento de pago.

Si gustas apoyarme, a la derecha puedes darme para una cerveza.

1. Convertir XSD del SAT a clases de c# .Net

2. Convertir XSD del SAT a clases de c# .Net.

3. Creación del xml, sellado y timbrado

4. Agregar documentos relacionados

Código fuente: clic aquí.

Ejemplo de XML de complemento para recibo de pago ya timbrado, SAT, cfdi 3.3

Les adjunto un ejemplo de como sería un archivo con el complemento para la recepción de pago versión 1.0, como lo solicita el SAT.

¿Quieres aprender a programar el complemento de pago? Yo te enseño gratis dando clic aquí.

El siguiente xml ya esta timbrado y es valido.


<?xml version="1.0" encoding="ISO-8859-1"?>
<cfdi:Comprobante LugarExpedicion="20131" TipoDeComprobante="P" Total="0" Moneda="XXX" SubTotal="0" Certificado="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" NoCertificado="30001000000300023708" Sello="Vj+oPDouoVyXz0Gwh2wDsrukh2XwrwK9cZXOoh+RqFd6Otwdduz/RyFyvfR9Kio13IbCeLeLEVWZneik1CU/gwVAJ6+v/CBkd2AjL32JQsaWNitAqQ+kdgmtbSO0ZAoQazTcSyzYyk7n/14EQGlIwa66OjSS77WPkiZIhz8TFF5wCKir4i3tEMGfpuok1ZVR4EIpzVc9vu+CEnTPKhxd2wsPp6aUyaYTt3wvIrle+qmBlF9mkWMYai4obBq+BCp5HhmxUBFizafE+MAdj/M8y2WSobyg6PSD75pgfPas9l9mqX4919It5AqF3n7Iadvzo1hDK2vZAbwXAYShJ3gb3g==" Fecha="2018-09-18T00:06:39" Folio="1" Serie="H" Version="3.3" xsi:schemaLocation="http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
	<cfdi:Emisor RegimenFiscal="605" Nombre="Una razón rh de cv" Rfc="LEGH870601DM7"/>
	<cfdi:Receptor Nombre="Pepe SA DE CV" Rfc="BIO091204LB1" UsoCFDI="P01"/>
	<cfdi:Conceptos>
		<cfdi:Concepto Importe="0" ValorUnitario="0" Descripcion="Pago" ClaveUnidad="ACT" Cantidad="1" ClaveProdServ="84111506"/>
	</cfdi:Conceptos>
	<cfdi:Complemento>
		<pago10:Pagos Version="1.0" xmlns:pago10="http://www.sat.gob.mx/Pagos">
			<pago10:Pago Monto="666" MonedaP="MXN" FormaDePagoP="01" FechaPago="2018-09-18T00:06:39">
				<pago10:DoctoRelacionado ImpPagado="600" MetodoDePagoDR="PUE" MonedaDR="MXN" IdDocumento="BEDC8964-7E57-4604-9968-7E01378E8706"/>
				<pago10:DoctoRelacionado ImpPagado="66" MetodoDePagoDR="PUE" MonedaDR="MXN" IdDocumento="BEDC8964-7E57-4604-9968-7E01378E8706"/>
			</pago10:Pago>
		</pago10:Pagos>
		<tfd:TimbreFiscalDigital Version="1.1" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd" RfcProvCertif="EME000602QR9" SelloSAT="GICyRB9uhyZ1u6zuj8ZpxWM92gU2kDfmodwTvXoLy3ZMxrXWsqrF16tYfwBxK8eZDmXoxnKWTfoubcyt/DtgxDHDEyqRLf+oYashKByApRLRtIYTvivrm1XZCL6RuYlKyNwjrsk2vx4kJfk+/vCcy9pSYfG8sXHPPNg8yNsvpAdGpN2JF8b11QpbYukgaspkCh5hEcOuuu7/kM2p0sRC1bZMzMxAbD9QCgSoRkpMxnHbif5oY60pK68b3yp417ZtaKCLk2y/oetZGkpgNnImC6KDbqo4fuXDnfqxSrjEJW9UIMiyOW92sP8LljFXicGBjLTQMq1kGLyM7SeSAG7c/Q==" NoCertificadoSAT="20001000000300022323" SelloCFD="Vj+oPDouoVyXz0Gwh2wDsrukh2XwrwK9cZXOoh+RqFd6Otwdduz/RyFyvfR9Kio13IbCeLeLEVWZneik1CU/gwVAJ6+v/CBkd2AjL32JQsaWNitAqQ+kdgmtbSO0ZAoQazTcSyzYyk7n/14EQGlIwa66OjSS77WPkiZIhz8TFF5wCKir4i3tEMGfpuok1ZVR4EIpzVc9vu+CEnTPKhxd2wsPp6aUyaYTt3wvIrle+qmBlF9mkWMYai4obBq+BCp5HhmxUBFizafE+MAdj/M8y2WSobyg6PSD75pgfPas9l9mqX4919It5AqF3n7Iadvzo1hDK2vZAbwXAYShJ3gb3g==" FechaTimbrado="2018-09-18T00:06:44" UUID="FE5B2DD2-7E57-44E0-88C9-FB1AF0D17142"/>
	</cfdi:Complemento>
</cfdi:Comprobante>

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net?, Impuestos, SAT #5

En este quinto video te muestro como obtener los impuestos del xml para imprimirlos en el archivo pdf

Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g

Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM

Tercer video: https://www.youtube.com/watch?v=2l9y_dbguaQ

Cuarto video: https://www.youtube.com/watch?v=0nmqpoCTUuM

Código del video: aquí

¿Cómo timbrar el XML para cfdi 3.3 facturación electrónica C# .Net? – conectandonos al PAC – SAT #6

Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico [email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León o hdeleon.

En este video te mostrare como timbrar el xml que en los videos anteriores construimos y sellamos.

Descargar proyecto hecho en el video: clic aquí.

Video 1: https://www.youtube.com/watch?v=XlTz0NRQLm4

Video 2: https://www.youtube.com/watch?v=HjfqdTspnio

Video 3: https://www.youtube.com/watch?v=qIr-LdCzfF0

Video 4: https://www.youtube.com/watch?v=suRypKtb7VU

Video 5: https://www.youtube.com/watch?v=FBcEeEpgwr0

Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/


class Program
    {
        //modifiquen por su path
        static private string path = @"C:\Users\Bioxor\source\repos\Facturacion3.3-tutorial-hdeleon\";
        static string pathXML = path + @"miPrimerXML.xml";

        static void Main(string[] args)
        {
            //Obtener numero certificado------------------------------------------------------------

            string pathCer = path+@"XSDToXML\CSD01_AAA010101AAA.cer";
            string pathKey = path+@"XSDToXML\CSD01_AAA010101AAA.key";
            string clavePrivada = "12345678a";

            //Obtenemos el numero
            string numeroCertificado, aa, b, c;
            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);

            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            Comprobante oComprobante = new Comprobante();
            oComprobante.Version = "3.3";
            oComprobante.Serie = "H";
            oComprobante.Folio = "1";
            oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
           // oComprobante.Sello = "faltante"; //sig video
            oComprobante.FormaPago = "99";
            oComprobante.NoCertificado = numeroCertificado;
           // oComprobante.Certificado = ""; //sig video
            oComprobante.SubTotal = 10m;
            oComprobante.Descuento = 1;
            oComprobante.Moneda = "MXN";
            oComprobante.Total = 9;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago = "PUE";
            oComprobante.LugarExpedicion = "20131";

            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc = "LEGH870601DM7";
            oEmisor.Nombre = "Una razón rh de cv";
            oEmisor.RegimenFiscal = "605";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();
            oReceptor.Nombre = "Pepe SA DE CV";
            oReceptor.Rfc = "BIO091204LB1";
            oReceptor.UsoCFDI = "P01";

            //asigno emisor y receptor
            oComprobante.Emisor = oEmisor;
            oComprobante.Receptor = oReceptor;

            List<ComprobanteConcepto> lstConceptos = new List<ComprobanteConcepto>();
            ComprobanteConcepto oConcepto = new ComprobanteConcepto();
            oConcepto.Importe = 10m;
            oConcepto.ClaveProdServ = "92111704";
            oConcepto.Cantidad = 1;
            oConcepto.ClaveUnidad = "C81";
            oConcepto.Descripcion = "Un misil para la guerra";
            oConcepto.ValorUnitario = 10m;
            oConcepto.Descuento = 1;

            lstConceptos.Add(oConcepto);

            oComprobante.Conceptos = lstConceptos.ToArray();

            //Creamos el xml
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl = path+ @"XSDToXML\cadenaoriginal_3_3.xslt";
            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw= new StringWriter())
            using (XmlWriter xwo= XmlWriter.Create(sw,transformador.OutputSettings)) {

                transformador.Transform(pathXML, xwo);
                cadenaOriginal = sw.ToString();
            }

            SelloDigital oSelloDigital = new SelloDigital();
            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            //TIMBRE DEL XML
            ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReferenceFC.TimbradoClient oTimbrado =new ServiceReferenceFC.TimbradoClient();

            respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "aaaaaa", bXML);

            if (respuestaCFDI.Documento == null) {
                Console.WriteLine(respuestaCFDI.Mensaje);
            }
            else
            {

                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
            }

        }

        private static void CreateXML(Comprobante oComprobante)
        {
            //SERIALIZAMOS.-------------------------------------------------

            XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
            xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3");
            xmlNameSpace.Add("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");
            xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");

            XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));

            string sXml = "";

            using (var sww = new Utils.StringWriterWithEncoding(Encoding.UTF8))
            {

                using (XmlWriter writter = XmlWriter.Create(sww))
                {

                    oXmlSerializar.Serialize(writter, oComprobante,xmlNameSpace);
                    sXml = sww.ToString();
                }

            }

            //guardamos el string en un archivo
            System.IO.File.WriteAllText(pathXML, sXml);
        }
    }

¿Cómo convertir archivos XSD a clases de C# .Net? cfdi 3.3 SAT

En este video describo como se puede generar las clases a partir de un archivo XSD.

También explico cómo convertir las clases en archivos XSD que tienen dependencia de otros archivos XSD.

Para ello aprovecho para generar las clases necesarias para crear el archivo XML que sirve para la facturación electrónica 3.3 del SAT en México.

Utilizaremos Visual Studio Command Prompt.

Si desean que haga un curso completo para la facturación electrónica, dime en los comentarios.

Catálogos para facturar CFDI 3.3 SAT en Sql Server

ULTIMA ACTUALIZACIÓN DE LOS CATÁLOGOS: 3 DE ENERO 2018

Pongo a disposición los catálogos en Sql Server publicados por SAT necesarios para la facturación 3.3.

Estaré actualizándolos conforme el SAT libere nuevos registros. Solo dar clic en el siguiente enlace:



DESCARGAR CATÁLOGOS SAT

Si deseas descargar los catálogos para mysql entra aquí

Si deseas descargar los catálogos para SQLite entra aquí

Catálogos para facturar CFDI 3.3 SAT en mysql

ULTIMA ACTUALIZACIÓN DE LOS CATÁLOGOS: 3 DE ENERO 2018

Pongo a disposición los catálogos en mysql publicados por SAT necesarios para la facturación 3.3.

Estaré actualizándolos conforme el SAT libere nuevos registros. Solo dar clic en el siguiente enlace:



DESCARGAR CATÁLOGOS SAT

Si deseas descargar los catálogos para sql server entra aquí

Si deseas descargar los catálogos para SQLite entra aquí