Foros del Web » Programación para mayores de 30 ;) » .NET »

Factura electroncia sat mexico

Estas en el tema de Factura electroncia sat mexico en el foro de .NET en Foros del Web. que tal mikecoy, me desapareci un rato, fijate que estoy batallando con el formato de factura, estoy utilizando crystal report 8.0, el detalle es que ...

  #241 (permalink)  
Antiguo 13/10/2010, 06:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 5
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

que tal mikecoy, me desapareci un rato, fijate que estoy batallando con el formato de factura, estoy utilizando crystal report 8.0, el detalle es que tanto la cadena original como el certificado son datos con mas de 254 caracteres, y esta version de crystal acepta campos string maximos de 254, tu como imprimes la factura???. Tambien quiero preguntarte si estas usando uin archivo XSL para darle presentacion a la factura digital.
  #242 (permalink)  
Antiguo 14/10/2010, 20:15
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Factura electroncia sat mexico

Hola compañeros, soy nuevo en esto de la factura electronica de antemano gracias a todos me a sido muy util su ayuda solo que ahora ando muy enredado con algunas cosas, de hecho ya genero el sello digital con la una cadena origina que nos da hacienda al igual q el .key q nos da, pero la verdad que no se como generar la cadena original no se si alguien me pusiera hechar la mano con esto diciendome de donde o como se genera.

Gracias de antemano por su valiosa ayuda.
  #243 (permalink)  
Antiguo 15/10/2010, 07:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

cassper_ew3:

Lo más sensato es que generes el XML de acuerdo al Anexo 20, en el lenguaje que usas (seguro tiene clases para manejo de XML), luego valídalo con el esquema que provee hacienda (es un archivo XSD) y finalmente ya que validaste que lo generas bien, usa el archivo en XSLT para transformar ese XML y obtener la cadena original. Luego ya nada más tomas el sello y se lo agregas al XML.

También puedes generar la cadena original a pie, basándote en el Anexo 20, pero estás propenso a equivocarte.

Saludos.
  #244 (permalink)  
Antiguo 15/10/2010, 13:49
 
Fecha de Ingreso: septiembre-2010
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Alquien sabe cuales son los requerimientos para la impresion del CFD, me refiero as si se le pueden agregar datos a los ya contemplados en el comprobante. Por ejemplo el numero de partida para las licitaciones.
  #245 (permalink)  
Antiguo 15/10/2010, 18:32
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Factura electroncia sat mexico

-------Guapolo------

Gracias Guapolo por tu ayuda, ok, si estoy trabajando con c# creo q ya se mas o menos como generar la cadena original y el archivo xml, ahora me surgio otra duda por que me dicen que para generar el sello digital que ya lo hice gracias a la ayuda de MArkX se necesita tambien el .cer que nos da el SAT junto con el .key quisiera saber cual es el procedimiento correcto para generarlo, si solo se necesita el .key o tambien es necesario el .cer

Saludos.. !!!!
  #246 (permalink)  
Antiguo 16/10/2010, 08:20
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por cassper_ew3 Ver Mensaje
-------Guapolo------

Gracias Guapolo por tu ayuda, ok, si estoy trabajando con c# creo q ya se mas o menos como generar la cadena original y el archivo xml, ahora me surgio otra duda por que me dicen que para generar el sello digital que ya lo hice gracias a la ayuda de MArkX se necesita tambien el .cer que nos da el SAT junto con el .key quisiera saber cual es el procedimiento correcto para generarlo, si solo se necesita el .key o tambien es necesario el .cer

Saludos.. !!!!
Para generar el .cer y .key para sellar la cadena original (a lo que le llaman [URL="http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_15994.html"]certificado de sello digital[/URL]), necesitas generar los archivos con tu FIEL, en la aplicación SOLCEDI, no recuerdo bien la opción pero es algo así como "generar certificado para sello digital". Con tu Fiel generas una llave nueva (.key) y un archivo .req con el cual entras a una página del SAT y generas el certificado en línea con tu fiel y el archivo .req que te genera solcedi. ([URL="https://www.servicios.sat.gob.mx/_mem_bin/formsloginFEA.asp?/ACCESO/CERTISAT.ASP"]Aquí el URL[/URL])
  #247 (permalink)  
Antiguo 19/10/2010, 15:51
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Factura electroncia sat mexico

Ya pudieron encontrar como obtener el numero del certificado?. En eso voy y me gustaría saber si me pueden ayudar.
  #248 (permalink)  
Antiguo 21/10/2010, 11:00
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por kadghar Ver Mensaje
Antonio,

Tu código es muy bueno, pero tienes pequeños errores, el primero es que la comparación del salt debe ser contra la secuencia de bytes que llamas OIDpkcs5PBKDF2 y lo estás haciendo contra OIDpkcs5PBES2.

El segundo es que los dos bytes que van después de OIDdesEDE3CBC deben ser 2 y 2, tú estás validando 2 y 1, hay que cambiarlo.

Otro error que tienes, seguramente de concentración fue que en la función que usas para comparar bytes, el incremento de i lo pones adentro del IF, debe ir después del END IF, si no, cada vez comparas contra el primer byte.

Por último debes revisar en la función DecodePrivateKeyInfo, donde lees el 2 y 1 del pkcs8, asignas bt al 2 y twobytes al 1, y luego haces dos veces la comparación contra bt, cuando la segunda comparación debería ir contra el 1, o sea contra twobytes.

Haciendo estas pequeñas modificaciones, probé tu código y desencripta perfectamente cualquier key en PKCS8

Saludos,

Kad
Hola, kadghar Te queria pregunta si podrías postear el codigo que tu corregiste; o explicar un poco mas claro; en espcífico el
"El segundo es que los dos bytes que van después de OIDdesEDE3CBC deben ser 2 y 2, tú estás validando 2 y 1, hay que cambiarlo."

de ante mano muchas gracias,

Saludos
  #249 (permalink)  
Antiguo 21/10/2010, 15:55
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Duda

Cita:
Iniciado por thebman Ver Mensaje
Pues bien en el post anterior generamos nuestra digestion MD5 en un archivo md5.txt es imoprtante editar el archivo y borrar la parte de MD5(C:\cadena.txt)=
Para que nuestro archivo solo quede con la pura digestion la cual es:
8aa2b617944427353697e694a2e35a07

Bueno ahora tenemos que generar el sello digital apartir de la digestion pero antes de esto tenemos que convertir nuestros archivos .key y .cer a .pem para su correcto procesamiento.

Para hacer esto nos vamos a la aplicacion Openssl y dentro de los certificados que descargamos usaremos solo un archivo .key y la clave privada.

Archivo:
aaa010101aaa_CSD_01.key

Instruccion para generar nuestro archivo .pem:

openssl.exe pkcs8 -inform DER -in aaa010101aaa_CSD_01.key -passin pass:a0123456789 -out aaa010101aaa_CSD_01.key.pem

Una ves ejecutada esta instruccion tendremos nuestro nuevo archivo:

aaa010101aaa_CSD_01.key.pem

El cual usaremos para generar nuestro sello tambien dentro del Openssl

openssl dgst -sign aaa010101aaa_CSD_01.key.pem md5.txt | openssl enc -base64 -A > sello.txt

Y obtendremos el siguiente sello en su respectivo archivo sello.txt:

iIMz487EGyt6zCFjvcFNvHeOKgKMMc5y1py+QJrIvCmWbbxV43 k2xi6Q23p/Wee31vqUzYH0fbO0yBOvkDtiMejjdCOHPzmLvMkzfAzr919j6t bJOiODlgb7bisEdUkrjRrw+FfwQsPldsfHW6gq3K/fFGT6tTB7gqHP6a44ix0=
Disculpa, soy nuevo en el foro y estoy tratando de hacer lo de facturacion electronica, hago como dices para generar el sello en vb.net con el shell pero no me genera nada, estaba leyendo lo de Markx, Matias y de Vero que lo hacian en .net pero tampoco entendi, no sabes cual pudiera ser mi error, en linea de comandos si funciona. No se si me explique bien si alguien me pudiera dar un ejemplo en vb.net o en lo que sea tratare de entender. Gracias.

Mi codigo va asi
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim cadenaoriginal As String = "||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20|200|1|pieza|Charola metálica|150|150|IVA|52.5|| "
Label1.Text = cadenaoriginal
System.IO.File.WriteAllText("C:\fepruebas\cadena.t xt", cadenaoriginal)
Dim CadenaUTF8 As Byte()
Dim tmpHash() As Byte
Dim Digestion As String
'convierte en UTF8
CadenaUTF8 = System.Text.Encoding.UTF8.GetBytes(cadenaoriginal)
'crea el hash
tmpHash = New MD5CryptoServiceProvider().ComputeHash(CadenaUTF8)
' lo pasa a una variable string mediante la funcion ByteArrayToString
Digestion = ByteArrayToString(tmpHash)
System.IO.File.WriteAllText("C:\fepruebas\MD5.txt" , Digestion, Encoding.UTF8)
Shell("C:\OpenSSL-Win32\bin\openssl.exe pkcs8 -inform DER -in C:\fepruebas\aaa010101aaa_csd_01.key -passin pass:a0123456789 -out C:\fepruebas\aaa010101aaa_csd_01.key.pem")
Shell("c:\OpenSSL-Win32\bin\openssl dgst -sign c:\fepruebas\aaa010101aaa_CSD_01.key.pem c:\fepruebas\md5.txt | c:\OpenSSL-Win32\bin\openssl enc -base64 -A > c:\fepruebas\sello.txt")
End Sub
  #250 (permalink)  
Antiguo 22/10/2010, 13:43
Avatar de Nanox  
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Compañebrios ya tengo el problema solucionado en PHP.... a todos gracias por sus aportes. yo inicie esto hace 1 año, fui de los primeros posteadores en otro hilo, pero lo deje por otras cosillas, regrese esta semana porque me mandaron mis certificados y folios, y ps hora si iba en serio jjjj. tons me chute otravez el codigo del lacorona.com.mx/fortiz, gracias a este cuate que ni conozco pero ps puso sus maravillas en la red, la mayoria de su codigo me funciono y ya quedo.
Mi hibrido aun no lleva addendas solo agreguenlas, y unas que otras cossas como la version 2 del xlst que da el sat. igual y falta algo pero si ustedes como yo, no abandonamos estos hilos, sabremos que sigue.... amenos eso espero--> que no se den su pakete y decidan no postear por pensar que otro se puede hacer rico con su codigo,jaja, sino de una vez lleguenle... hay les va la primer entrega.....esta todo cochinote, pero hay les va un cachote que crea el xml sin certificado ni sello..

//-----

Código PHP:
Ver original
  1. $cadena_original='||';                                     //inicializamos en pipes doble la cadena original
  2.        
  3.    
  4.    
  5.     if($eempres == "emisordif a la razon social")
  6.     {
  7.    
  8.     $arre=array(calleEE=>"$factelectro_emisor[Calle]",coloniaEE=>"$factelectro_emisor[Colonia]",municipioEE=>"$factelectro_emisor[Municipio]",estadoEE=>"$factelectro_emisor[Estado]",paisEE=>"$factelectro_emisor[Pais]",codigoPostalEE=>"$factelectro_emisor[CP]");
  9.     }
  10.         $arr=array(version=>"2.0",serie=>"$factelectro[Serie]",folio=>"$row1[IdDocumento]",fecha=>"$fecha",sello=>"",noAprobacion=>"$naproba",anoAprobacion=>"$anoAprobacion",tipoDeComprobante=>"$row1[TipoCFD]",formaDePago=>"$infoformdpago",condicionesDePago=>"$infocondpago",noCertificado=>"$numeroCer",certificado=>"",subTotal=>"$row1[SubTotal]",total=>"$row1[TotalDocto]",
  11.     rfcE=>"$factelectro[RFC]",emisor=>"$factelectro[RSocial]",calleE=>"$factelectro[Calle]",noExteriorE=>"$factelectro[NumeroE]",noInteriorE=>"$factelectro[NumeroI]",coloniaE=>"$factelectro[Colonia]",municipioE=>"$factelectro[Municipio]",estadoE=>"$factelectro[Estado]",paisE=>"$factelectro[Pais]",codigoPostalE=>"$factelectro[CP]",
  12.     rfcR=>"$row1[rfcc]",receptor=>"$row1[RSocial]",calleR=>"$row1[Direccion]",coloniaR=>"$row1[Colonia]",municipioR=>"$row1[Ciudad]",estadoR=>"$row1[Estado]",paisR=>"MEXICO",codigoPostalR=>"$row1[CP]",Conceptos=>$totalp,impuestoiva=>"IVA",tasa=>"$row1[IVA]",importe=>"$row1[TotalIVA]",fechaEmbarque=>"$fecha",fechaVence=>"$fecha");
  13.    
  14.     //-------
  15.     //-------CONSTRUIMOS UN XML CON LOS DATOS DEL ARRAY------
  16.     //-------
  17.    
  18.     $nodo="";$esquemas=true; global $xml, $cadena_original, $conn; error_reporting(E_ALL); 
  19.    
  20.     $rsocialsinpuntos=str_replace(".","",$row1['RSocial']);        
  21.     $nufa = $arr['serie']." ".$arr['folio']." ".$rsocialsinpuntos;// Junta el numero de factura   serie + folio  
  22.     $xml = new DOMdocument("1.0","UTF-8");                        //Datos generales del Comprobante
  23.     $root = $xml->createElement("Comprobante");
  24.     $root = $xml->appendChild($root);
  25.     if ($esquemas==true)
  26.     {
  27.         #7/Dic/2006  porque los necios de Levicom (para chedraui) no quieren estos elmentos, dicen que su validador lo agrega
  28.        cargaAtt($root, array("xmlns"=>"http://www.sat.gob.mx/cfd/2",
  29.                           "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
  30.                           "xsi:schemaLocation"=>"http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"));
  31.     }
  32.     cargaAtt($root, array("version"=>$arr['version'],
  33.                           "serie"=>$arr['serie'],
  34.                           "folio"=>$arr['folio'],
  35.                           "fecha"=>$arr['fecha'],
  36.                           "sello"=>"@",
  37.                           "noAprobacion"=>$arr['noAprobacion'],
  38.                           "anoAprobacion"=>$arr['anoAprobacion'],"tipoDeComprobante"=>$arr['tipoDeComprobante'],
  39.                           "formaDePago"=>$arr['formaDePago'],
  40.                           "condicionesDePago"=>$arr['condicionesDePago'],
  41.                           "noCertificado"=>$arr['noCertificado'],
  42.                           "certificado"=>"@",
  43.                           "subTotal"=>$arr['subTotal'],
  44.                           "descuento"=>"0",
  45.                           "total"=>$arr['total']
  46.                           ));
  47.    
  48.     $emisor = $xml->createElement("Emisor");                //Datos del Emisor
  49.     $emisor = $root->appendChild($emisor);
  50.     cargaAtt($emisor, array("rfc"=>$arr['rfcE'],"nombre"=>$arr['emisor']));
  51.    
  52.     $domfis = $xml->createElement("DomicilioFiscal");
  53.     $domfis = $emisor->appendChild($domfis);
  54.     cargaAtt($domfis, array("calle"=>$arr['calleE'],
  55.                             "noExterior"=>$arr['noExteriorE'],
  56.                             "noInterior"=>$arr['noInteriorE'],
  57.                             "colonia"=>$arr['coloniaE'],
  58.                             "municipio"=>$arr['municipioE'],
  59.                             "estado"=>$arr['estadoE'],
  60.                             "pais"=>$arr['paisE'],
  61.                             "codigoPostal"=>$arr['codigoPostalE']));
  62.    
  63.     if($eempres == "emisordif a la razon social")                                 //solo para el caso en que el domicilio de expedicion no se el mismo que la RS
  64.     {
  65.     $expedido = $xml->createElement("ExpedidoEn");
  66.     $expedido = $emisor->appendChild($expedido);
  67.     cargaAtt($expedido, array("calle"=>$arre['calleEE'],
  68.                             "colonia"=>$arre['coloniaEE'],
  69.                             "municipio"=>$arre['municipioEE'],
  70.                             "estado"=>$arre['estadoEE'],
  71.                             "pais"=>$arre['paisEE'],
  72.                             "codigoPostal"=>$arre['codigoPostalEE']));
  73.     }                                                
  74.    
  75.    
  76.     $receptor = $xml->createElement("Receptor");            //Datos del Receptor
  77.     $receptor = $root->appendChild($receptor);
  78.     cargaAtt($receptor, array("rfc"=>$arr['rfcR'],"nombre"=>$arr['receptor']));
  79.    
  80.     $domicilio = $xml->createElement("Domicilio");
  81.     $domicilio = $receptor->appendChild($domicilio);
  82.     cargaAtt($domicilio, array("calle"=>$arr['calleR'],
  83.                            "colonia"=>$arr['coloniaR'],
  84.                            "municipio"=>$arr['municipioR'],
  85.                            "estado"=>$arr['estadoR'],
  86.                            "pais"=>$arr['paisR'],
  87.                            "codigoPostal"=>$arr['codigoPostalR']));
  88.    
  89.    
  90.     $conceptos = $xml->createElement("Conceptos");              //Detalle de los conceptos/produtos de la factura
  91.     $conceptos = $root->appendChild($conceptos);
  92.    
  93.     $data = mysql_query("SELECT productos.*,facturasd.* FROM facturasd
  94.    LEFT JOIN productos ON productos.IdProducto = facturasd.IdProducto
  95.    WHERE facturasd.IdEncabezado = '$Id' ORDER BY facturasd.Id DESC")or die(mysql_error());
  96.    
  97.     while ($row2 = mysql_fetch_array($data))                    //numero de partidas de la factura
  98.     {
  99.         if($row2['idUmedida']=="Millar"){$cantidad=$row2['Cantpzas']/1000;}
  100.         if($row2['idUmedida']=="Piezas"){$cantidad=$row2['Cantpzas'];}
  101.         if($row2['idUmedida']=="Kilos"){$cantidad=$row2['Cantkgs'];}
  102.         if($row2['idUmedida']=="Libras"){$cantidad=$row2['CantEnLibras'];}
  103.    
  104.         $concepto = $xml->createElement("Concepto");
  105.         $concepto = $conceptos->appendChild($concepto);
  106.         cargaAtt($concepto, array("cantidad"=>$cantidad,
  107.                                   "unidad"=>$row2['idUmedida'],
  108.                                   "noIdentificacion"=>$row2['IdProducto'],
  109.                                   "descripcion"=>$row2['Nombre'],
  110.                                   "valorUnitario"=>$row2['PrecioUni'],
  111.                                   "importe"=>$row2['PrecioTotal']));
  112.     }
  113.    
  114.     $impuestos = $xml->createElement("Impuestos");              //Impuesto (IVA)
  115.     $impuestos = $root->appendChild($impuestos);
  116.    
  117.     if($row1['ConceptoDocto']==2)                               //Retenciones
  118.     {
  119.         cargaAtt($impuestos, array("totalImpuestosRetenidos"=>$arr['importe']));
  120.         if (isset($arr['importe']))
  121.         {
  122.             $retenciones = $xml->createElement("Retenciones");         
  123.             $retenciones = $impuestos->appendChild($retenciones);
  124.             $retencion = $xml->createElement("Retencion");
  125.             $retencion = $retenciones->appendChild($retencion);
  126.             cargaAtt($retencion, array("impuesto"=>$arr['impuestoiva'],"importe"=>$arr['importe']));
  127.         }
  128.     }
  129.     else                                                        //Traslados                                            
  130.     {
  131.         cargaAtt($impuestos, array("totalImpuestosTrasladados"=>$arr['importe']));
  132.         if (isset($arr['importe']))
  133.         {
  134.             $traslados = $xml->createElement("Traslados");         
  135.             $traslados = $impuestos->appendChild($traslados);
  136.             $traslado = $xml->createElement("Traslado");
  137.             $traslado = $traslados->appendChild($traslado);
  138.             cargaAtt($traslado, array("impuesto"=>$arr['impuestoiva'],"tasa"=>$arr['tasa'],"importe"=>$arr['importe']));
  139.         }
  140.     }
  141.  
  142.     $cadena_original.= "|";                         // termina la cadena original con el doble ||

//---


LA SEGUNDA ENTREGA EMPALMA EL XLST Y EL XML INCOMPLETO PARA OBTENER UNA CADENA ORIGINAL .. HACE EL SELLO Y LO AGREGA...

Saludos
  #251 (permalink)  
Antiguo 22/10/2010, 13:45
Avatar de Nanox  
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por nanox Ver Mensaje
compañebrios Ya tengo el problema solucionado en php.... A todos gracias por sus aportes. Yo inicie esto hace 1 año, fui de los primeros posteadores en otro hilo, pero lo deje por otras cosillas, regrese esta semana porque me mandaron mis certificados y folios, y ps hora si iba en serio jjjj. Tons me chute otravez el codigo del lacorona.com.mx/fortiz, gracias a este cuate que ni conozco pero ps puso sus maravillas en la red, la mayoria de su codigo me funciono y ya quedo.
Mi hibrido aun no lleva addendas solo agreguenlas, y unas que otras cossas como la version 2 del xlst que da el sat. Igual y falta algo pero si ustedes como yo, no abandonamos estos hilos, sabremos que sigue.... amenos eso espero--> que no se den su pakete y decidan no postear por pensar que otro se puede hacer rico con su codigo,jaja, sino de una vez lleguenle... Hay les va la primer entrega.....esta todo cochinote, pero hay les va un cachote que crea el xml sin certificado ni sello..

//-----

Código php:
Ver original
  1. $cadena_original='||';                                     //inicializamos en pipes doble la cadena original
  2.        
  3.    
  4.    
  5.     if($eempres == "emisordif a la razon social")
  6.     {
  7.    
  8.     $arre=array(calleee=>"$factelectro_emisor[calle]",coloniaee=>"$factelectro_emisor[colonia]",municipioee=>"$factelectro_emisor[municipio]",estadoee=>"$factelectro_emisor[estado]",paisee=>"$factelectro_emisor[pais]",codigopostalee=>"$factelectro_emisor[cp]");
  9.     }
  10.         $arr=array(version=>"2.0",serie=>"$factelectro[serie]",folio=>"$row1[iddocumento]",fecha=>"$fecha",sello=>"",noaprobacion=>"$naproba",anoaprobacion=>"$anoaprobacion",tipodecomprobante=>"$row1[tipocfd]",formadepago=>"$infoformdpago",condicionesdepago=>"$infocondpago",nocertificado=>"$numerocer",certificado=>"",subtotal=>"$row1[subtotal]",total=>"$row1[totaldocto]",
  11.     rfce=>"$factelectro[rfc]",emisor=>"$factelectro[rsocial]",callee=>"$factelectro[calle]",noexteriore=>"$factelectro[numeroe]",nointeriore=>"$factelectro[numeroi]",coloniae=>"$factelectro[colonia]",municipioe=>"$factelectro[municipio]",estadoe=>"$factelectro[estado]",paise=>"$factelectro[pais]",codigopostale=>"$factelectro[cp]",
  12.     rfcr=>"$row1[rfcc]",receptor=>"$row1[rsocial]",caller=>"$row1[direccion]",coloniar=>"$row1[colonia]",municipior=>"$row1[ciudad]",estador=>"$row1[estado]",paisr=>"mexico",codigopostalr=>"$row1[cp]",conceptos=>$totalp,impuestoiva=>"iva",tasa=>"$row1[iva]",importe=>"$row1[totaliva]",fechaembarque=>"$fecha",fechavence=>"$fecha");
  13.    
  14.     //-------
  15.     //-------construimos un xml con los datos del array------
  16.     //-------
  17.    
  18.     $nodo="";$esquemas=true; global $xml, $cadena_original, $conn; error_reporting(e_all); 
  19.    
  20.     $rsocialsinpuntos=str_replace(".","",$row1['rsocial']);        
  21.     $nufa = $arr['serie']." ".$arr['folio']." ".$rsocialsinpuntos;// junta el numero de factura   serie + folio  
  22.     $xml = new domdocument("1.0","utf-8");                        //datos generales del comprobante
  23.     $root = $xml->createelement("comprobante");
  24.     $root = $xml->appendchild($root);
  25.     if ($esquemas==true)
  26.     {
  27.         #7/dic/2006  porque los necios de levicom (para chedraui) no quieren estos elmentos, dicen que su validador lo agrega
  28.        cargaatt($root, array("xmlns"=>"http://www.sat.gob.mx/cfd/2",
  29.                           "xmlns:xsi"=>"http://www.w3.org/2001/xmlschema-instance",
  30.                           "xsi:schemalocation"=>"http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"));
  31.     }
  32.     cargaatt($root, array("version"=>$arr['version'],
  33.                           "serie"=>$arr['serie'],
  34.                           "folio"=>$arr['folio'],
  35.                           "fecha"=>$arr['fecha'],
  36.                           "sello"=>"@",
  37.                           "noaprobacion"=>$arr['noaprobacion'],
  38.                           "anoaprobacion"=>$arr['anoaprobacion'],"tipodecomprobante"=>$arr['tipodecomprobante'],
  39.                           "formadepago"=>$arr['formadepago'],
  40.                           "condicionesdepago"=>$arr['condicionesdepago'],
  41.                           "nocertificado"=>$arr['nocertificado'],
  42.                           "certificado"=>"@",
  43.                           "subtotal"=>$arr['subtotal'],
  44.                           "descuento"=>"0",
  45.                           "total"=>$arr['total']
  46.                           ));
  47.    
  48.     $emisor = $xml->createelement("emisor");                //datos del emisor
  49.     $emisor = $root->appendchild($emisor);
  50.     cargaatt($emisor, array("rfc"=>$arr['rfce'],"nombre"=>$arr['emisor']));
  51.    
  52.     $domfis = $xml->createelement("domiciliofiscal");
  53.     $domfis = $emisor->appendchild($domfis);
  54.     cargaatt($domfis, array("calle"=>$arr['callee'],
  55.                             "noexterior"=>$arr['noexteriore'],
  56.                             "nointerior"=>$arr['nointeriore'],
  57.                             "colonia"=>$arr['coloniae'],
  58.                             "municipio"=>$arr['municipioe'],
  59.                             "estado"=>$arr['estadoe'],
  60.                             "pais"=>$arr['paise'],
  61.                             "codigopostal"=>$arr['codigopostale']));
  62.    
  63.     if($eempres == "emisordif a la razon social")                                 //solo para el caso en que el domicilio de expedicion no se el mismo que la rs
  64.     {
  65.     $expedido = $xml->createelement("expedidoen");
  66.     $expedido = $emisor->appendchild($expedido);
  67.     cargaatt($expedido, array("calle"=>$arre['calleee'],
  68.                             "colonia"=>$arre['coloniaee'],
  69.                             "municipio"=>$arre['municipioee'],
  70.                             "estado"=>$arre['estadoee'],
  71.                             "pais"=>$arre['paisee'],
  72.                             "codigopostal"=>$arre['codigopostalee']));
  73.     }                                                
  74.    
  75.    
  76.     $receptor = $xml->createelement("receptor");            //datos del receptor
  77.     $receptor = $root->appendchild($receptor);
  78.     cargaatt($receptor, array("rfc"=>$arr['rfcr'],"nombre"=>$arr['receptor']));
  79.    
  80.     $domicilio = $xml->createelement("domicilio");
  81.     $domicilio = $receptor->appendchild($domicilio);
  82.     cargaatt($domicilio, array("calle"=>$arr['caller'],
  83.                            "colonia"=>$arr['coloniar'],
  84.                            "municipio"=>$arr['municipior'],
  85.                            "estado"=>$arr['estador'],
  86.                            "pais"=>$arr['paisr'],
  87.                            "codigopostal"=>$arr['codigopostalr']));
  88.    
  89.    
  90.     $conceptos = $xml->createelement("conceptos");              //detalle de los conceptos/produtos de la factura
  91.     $conceptos = $root->appendchild($conceptos);
  92.    
  93.     $data = mysql_query("select productos.*,facturasd.* from facturasd
  94.    left join productos on productos.idproducto = facturasd.idproducto
  95.    where facturasd.idencabezado = '$id' order by facturasd.id desc")or die(mysql_error());
  96.    
  97.     while ($row2 = mysql_fetch_array($data))                    //numero de partidas de la factura
  98.     {
  99.         if($row2['idumedida']=="millar"){$cantidad=$row2['cantpzas']/1000;}
  100.         if($row2['idumedida']=="piezas"){$cantidad=$row2['cantpzas'];}
  101.         if($row2['idumedida']=="kilos"){$cantidad=$row2['cantkgs'];}
  102.         if($row2['idumedida']=="libras"){$cantidad=$row2['cantenlibras'];}
  103.    
  104.         $concepto = $xml->createelement("concepto");
  105.         $concepto = $conceptos->appendchild($concepto);
  106.         cargaatt($concepto, array("cantidad"=>$cantidad,
  107.                                   "unidad"=>$row2['idumedida'],
  108.                                   "noidentificacion"=>$row2['idproducto'],
  109.                                   "descripcion"=>$row2['nombre'],
  110.                                   "valorunitario"=>$row2['preciouni'],
  111.                                   "importe"=>$row2['preciototal']));
  112.     }
  113.    
  114.     $impuestos = $xml->createelement("impuestos");              //impuesto (iva)
  115.     $impuestos = $root->appendchild($impuestos);
  116.    
  117.     if($row1['conceptodocto']==2)                               //retenciones
  118.     {
  119.         cargaatt($impuestos, array("totalimpuestosretenidos"=>$arr['importe']));
  120.         if (isset($arr['importe']))
  121.         {
  122.             $retenciones = $xml->createelement("retenciones");         
  123.             $retenciones = $impuestos->appendchild($retenciones);
  124.             $retencion = $xml->createelement("retencion");
  125.             $retencion = $retenciones->appendchild($retencion);
  126.             cargaatt($retencion, array("impuesto"=>$arr['impuestoiva'],"importe"=>$arr['importe']));
  127.         }
  128.     }
  129.     else                                                        //traslados                                            
  130.     {
  131.         cargaatt($impuestos, array("totalimpuestostrasladados"=>$arr['importe']));
  132.         if (isset($arr['importe']))
  133.         {
  134.             $traslados = $xml->createelement("traslados");         
  135.             $traslados = $impuestos->appendchild($traslados);
  136.             $traslado = $xml->createelement("traslado");
  137.             $traslado = $traslados->appendchild($traslado);
  138.             cargaatt($traslado, array("impuesto"=>$arr['impuestoiva'],"tasa"=>$arr['tasa'],"importe"=>$arr['importe']));
  139.         }
  140.     }
  141.  
  142.     $cadena_original.= "|";                         // termina la cadena original con el doble ||

//---


la segunda entrega empalma el xlst y el xml incompleto para obtener una cadena original .. Hace el sello y lo agrega...

saludos
o si lo quieren completo manden mp
  #252 (permalink)  
Antiguo 25/10/2010, 16:39
 
Fecha de Ingreso: octubre-2010
Ubicación: Nuevo Laredo
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Tengo una duda, a lo mejor es una duda muy tonta pero apenas estoy con mi proyecto de facturacion digital y ya lei todo el tema en este foro y sigo con algunas dudas. Cada vez que vayamos a generar un CFD tenemos que generar el archivo .key.pem o una vez generado el .pem ya nos sirve para los demas CFD que generemos, aqui solo se factura de una computadora.

Saludos y gracias por las aportaciones
  #253 (permalink)  
Antiguo 25/10/2010, 17:59
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Que tal buena tarde.

Ayuda con Visual Studio 2010

Alguien programando CFD con la generación de clases del archivo

me pueden ayudar con algo de codigo,

estoy trabajando con el siguiente y no hemos podido definir como instanciar la parte de partidas.

Do While RecXML.EOF <> True
Dim FacturaProcesada As Integer
FacturaProcesada = RecXML.Fields("Invoice").Value

Dim CFD As New Comprobante.Comprobante
CFD.version = "2.0"
CFD.serie = "A"
CFD.folio = "1"
CFD.fecha = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\:mm\:ss.fffffffzzz")
CFD.Receptor.Domicilio.codigoPostal = codigoPostal

'Conceptos
Dim Partida As Integer
Do Until recordsetpartidas.eof <> EOF()
CFD.Conceptos(Partida).cantidad = 1
CFD.Conceptos(Partida).descripcion = "Prueba de Concepto" ' Siguiente concepto en cada ciclo y asi para cada propiedad
CFD.Conceptos(Partida).noIdentificacion = "Serie"
CFD.Conceptos(Partida).Items = "?"
CFD.Conceptos(Partida).importe = 20.0
CFD.Conceptos(Partida).unidad = "Pieza"
CFD.Conceptos(Partida).valorUnitario = 20.0
Partida = Partida + 1
Loop

CFD.Conceptos(0).Items

Dim informacionaduana As CFD.Comprobante.t_InformacionAduanera
informacionaduana.

Aparte como instancio la parte de información aduanera relacionada al concepto.

perdon por las preguntas, pero estoy algo oxidado.
  #254 (permalink)  
Antiguo 27/10/2010, 08:30
 
Fecha de Ingreso: septiembre-2010
Ubicación: Chetumal
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Duda

Cita:
Iniciado por antoniooo Ver Mensaje
Disculpa, soy nuevo en el foro y estoy tratando de hacer lo de facturacion electronica, hago como dices para generar el sello en vb.net con el shell pero no me genera nada, estaba leyendo lo de Markx, Matias y de Vero que lo hacian en .net pero tampoco entendi, no sabes cual pudiera ser mi error, en linea de comandos si funciona. No se si me explique bien si alguien me pudiera dar un ejemplo en vb.net o en lo que sea tratare de entender. Gracias.

Mi codigo va asi
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim cadenaoriginal As String = "||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20|200|1|pieza|Charola metálica|150|150|IVA|52.5|| "
Label1.Text = cadenaoriginal
System.IO.File.WriteAllText("C:\fepruebas\cadena.t xt", cadenaoriginal)
Dim CadenaUTF8 As Byte()
Dim tmpHash() As Byte
Dim Digestion As String
'convierte en UTF8
CadenaUTF8 = System.Text.Encoding.UTF8.GetBytes(cadenaoriginal)
'crea el hash
tmpHash = New MD5CryptoServiceProvider().ComputeHash(CadenaUTF8)
' lo pasa a una variable string mediante la funcion ByteArrayToString
Digestion = ByteArrayToString(tmpHash)
System.IO.File.WriteAllText("C:\fepruebas\MD5.txt" , Digestion, Encoding.UTF8)
Shell("C:\OpenSSL-Win32\bin\openssl.exe pkcs8 -inform DER -in C:\fepruebas\aaa010101aaa_csd_01.key -passin pass:a0123456789 -out C:\fepruebas\aaa010101aaa_csd_01.key.pem")
Shell("c:\OpenSSL-Win32\bin\openssl dgst -sign c:\fepruebas\aaa010101aaa_CSD_01.key.pem c:\fepruebas\md5.txt | c:\OpenSSL-Win32\bin\openssl enc -base64 -A > c:\fepruebas\sello.txt")
End Sub

Checa mi post ahi explico como hacerlo con el openssl :D [URL="http://www.forosdelweb.com/f29/factura-electroncia-sat-mexico-806167/index7.html#post3572492"]Ir al post[/URL]
  #255 (permalink)  
Antiguo 28/10/2010, 19:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Avances - Espero les sirva, yo necesito ayuda con la generación del XML,
a traves de openssl ya genero todo, sin embargo para limpiar el codigo decidi hacerlo con las clases y me resulta mucho mas facil, solo que ahora estoy atorado con la obtención del xml desde la clase CFD

[QUOTE=Mike_Rodriguez_J;3610982]Que tal buena tarde.

Ayuda con Visual Studio 2010

Alguien programando CFD con la generación de clases del archivo

QUOTE]

OJO, este codigo ya genera un archivo xml, el tema que tengo es el de los name spaces, no me esta arrojando lo mismo, alguna sugerencia:

Do While RecXML.EOF <> True
Dim FacturaProcesada As Integer
FacturaProcesada = RecXML.Fields("Invoice").Value

Dim CFD As Comprobante.Comprobante
CFD = New Comprobante.Comprobante

CFD.version = "2.0"
CFD.serie = "A"
CFD.folio = "1"
CFD.noCertificado = LeeCertificado("SerialNumber")
CFD.certificado = LeeCertificado("Base64")
CFD.subTotal = ComprobanteSubTotal(FacturaProcesada)
CFD.descuento = ComprobanteDescuento(FacturaProcesada)
CFD.motivoDescuento = "Descuento Cliente"
CFD.total = RecXML.Fields("Total").Value
CFD.metodoDePago = "Depósito en Cuenta, Tarjeta de Credito o Debito"
CFD.tipoDeComprobante = 1 'ComprobanteTipo(FacturaProcesada)

CFD.Emisor = New Comprobante.ComprobanteEmisor 'Aqui esta el tema de como crear el comprobante emisor dentro del CFD.Emisor (Asi es con los demas nodos)
CFD.Emisor.rfc = F_Emisor("RFC")
CFD.Emisor.nombre = F_Emisor("name")

CFD.Emisor.DomicilioFiscal = New Comprobante.t_UbicacionFiscal

CFD.Emisor.DomicilioFiscal.calle = DomicilioFiscalC("calle")
CFD.Emisor.DomicilioFiscal.noExterior = DomicilioFiscalC("noExterior")
CFD.Emisor.DomicilioFiscal.noInterior = DomicilioFiscalC("noInterior")
CFD.Emisor.DomicilioFiscal.localidad = DomicilioFiscalC("Colonia")
CFD.Emisor.DomicilioFiscal.localidad = DomicilioFiscalC("localidad")
CFD.Emisor.DomicilioFiscal.referencia = DomicilioFiscalC("referencia")
CFD.Emisor.DomicilioFiscal.municipio = DomicilioFiscalC("municipio")
CFD.Emisor.DomicilioFiscal.estado = DomicilioFiscalC("estado")
CFD.Emisor.DomicilioFiscal.pais = DomicilioFiscalC("pais")
CFD.Emisor.DomicilioFiscal.pais = DomicilioFiscalC("CodigoPostal")

CFD.Receptor = New Comprobante.ComprobanteReceptor
CFD.Receptor.rfc = "RfcCliente"
CFD.Receptor.nombre = "NombreCliente"

CFD.Receptor.Domicilio = New Comprobante.t_Ubicacion

CFD.Receptor.Domicilio.calle = "CalleCliente"
CFD.Receptor.Domicilio.noExterior = "noExterior"
'Conceptos


'OJO aqui esta el tema de como utilizar la parte de conceptos

Dim concepto As New Comprobante.ComprobanteConcepto
CFD.Conceptos = Array.CreateInstance(concepto.GetType, 10)
CFD.Conceptos(0) = New Comprobante.ComprobanteConcepto
CFD.Conceptos(0).cantidad = 1

'al solucionar lo anterior, se que me falta impuesto y lo demas pero me quise
'enfocar a generar el xml con esos datos para visualizarlo y hago este codigo, '
pero me sigue saliendo el (XMLNS)<?xml version="1.0" encoding="utf-8"?>
'<Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
xmlns:schemalocation="http://www.sat.gob.mx/cfd/2 'http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd" version="2.0"

Dim xmlNameSpace = New XmlSerializerNamespaces()

xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance")
xmlNameSpace.Add("schemalocation", "http://www.sat.gob.mx/cfd/2" & " " & "http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd")

Dim objStreamWriter As New StreamWriter("C:\CFD.xml", False)

Dim prueba As New XmlSerializerNamespaces
prueba.Add(String.Empty, String.Empty)
Dim x1 As New XmlSerializer(CFD.GetType, "http://www.sat.gob.mx/cfd/2")

x1.Serialize(objStreamWriter, CFD, xmlNameSpace)
objStreamWriter.Close()

Toda ayuda sera agradecida.
Estoy programando en visual studio 2010 en windows.forms
  #256 (permalink)  
Antiguo 03/11/2010, 21:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Buenas noches, he estado siguiendo todo el foro, gracias por los aportes me han sido de mucha utilidad, ahora lo que me esta haciendo sifrir es cómo se puede programar los nodos addenda y complemento de un comprobante?.

Agradecería cualquier información que puedan proporcionarme.

Gracias.
  #257 (permalink)  
Antiguo 04/11/2010, 12:57
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por hegaes Ver Mensaje
No es molestia, estamos para ayudar en medida de lo que sea posible.

Y estas en lo correcto, al usar el archivo cadenaoriginal_2_0.xlst partimos de la idea que tu factura ya esta generada , pues la cadena original se crea extrayendo la informacion de tu factura.

Posteriormente, tendrias que actualizar tu factura con el sello que hayas obtenido.
Una pregunta hegaes, implemente tu codigo para poder crear la cadena original, sin embargo me dice errores de proxy, no he podido pasarle las credenciales o mas bien no e sabido como me podrias ayudar, gracias!!!
  #258 (permalink)  
Antiguo 04/11/2010, 21:29
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Factura electroncia sat mexico

Hola hola nuevamente ando por estos rumbos, para los q necesiten crear el sello digital, xml y cadena original hay tengo unas clases q les pueden servir, estan hechas en c# funcionan al 100, solo una duda q me surgio con el .cer no se para q se utiliza o donde estra en funcion por q segun me dice un compañero se necesita para generar el sello digital pero ese ya lo genero sin necesidad del .cer solo con el .key y si es valido ya lo corrobore con hacienda. gracias de antemano, si requieren las clases q les menciono envien su mail.
  #259 (permalink)  
Antiguo 05/11/2010, 12:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 15
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por cassper_ew3 Ver Mensaje
Hola hola nuevamente ando por estos rumbos, para los q necesiten crear el sello digital, xml y cadena original hay tengo unas clases q les pueden servir, estan hechas en c# funcionan al 100, solo una duda q me surgio con el .cer no se para q se utiliza o donde estra en funcion por q segun me dice un compañero se necesita para generar el sello digital pero ese ya lo genero sin necesidad del .cer solo con el .key y si es valido ya lo corrobore con hacienda. gracias de antemano, si requieren las clases q les menciono envien su mail.
pues ciertamente el .cer sirve para dos cosas dentro del proceso de emision de los comprobante, que a final de cuenta no son obligatorios.
1.- para obtener el numero de serie del certificado
2.- para incluirlo dentro del certificado.
  #260 (permalink)  
Antiguo 08/11/2010, 10:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por cassper_ew3 Ver Mensaje
Hola hola nuevamente ando por estos rumbos, para los q necesiten crear el sello digital, xml y cadena original hay tengo unas clases q les pueden servir, estan hechas en c# funcionan al 100, solo una duda q me surgio con el .cer no se para q se utiliza o donde estra en funcion por q segun me dice un compañero se necesita para generar el sello digital pero ese ya lo genero sin necesidad del .cer solo con el .key y si es valido ya lo corrobore con hacienda. gracias de antemano, si requieren las clases q les menciono envien su mail.
Hola me intereza si puedes ayudarme con las clases que ya tienes desarrolladas yo tengo una clase que genera el sello digital y solo utilizo el archivo .key si te intereza me dices gracias.
  #261 (permalink)  
Antiguo 08/11/2010, 19:23
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por zeroccm Ver Mensaje
Hola me intereza si puedes ayudarme con las clases que ya tienes desarrolladas yo tengo una clase que genera el sello digital y solo utilizo el archivo .key si te intereza me dices gracias.


claro q si te hecho l mano enviame tu correo electronico para el msn y nos ponemos de acuerdo.
  #262 (permalink)  
Antiguo 08/11/2010, 19:25
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por aksuesipn Ver Mensaje
pues ciertamente el .cer sirve para dos cosas dentro del proceso de emision de los comprobante, que a final de cuenta no son obligatorios.
1.- para obtener el numero de serie del certificado
2.- para incluirlo dentro del certificado.
ok ok me podrias explicar mas profundamente el segundo tema porfa lo que pasa que ando medio enredado con esa parte el certficado me hace bolas, como te dije ya tengo generado el sello digital
  #263 (permalink)  
Antiguo 10/11/2010, 13:01
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Respuesta: Factura electroncia sat mexico

Estimados colegos programadores:
He estado leyendo sus correos y estoy viendo que estan mucho mas avanzados que nostros en el desarrollo de la facturacion electronica.

Tengo conocimientos de XML, no tengo mucho conocimiento sobre encriptacion y OpenSSL, nuestro sistema esta desarrollado en PROGRESS.

Mis dudas son las siguientes:
Alguien me podria explicar que es lo que necesito para generar el sello digital para mi factura electronica? He leido el anexo 20 varias veces pero no me ayuda mucho.
El archivo XML que se tiene que generar es diferente a cualquier otro XML? Que es lo que tengo que hacer con el codigo fuente dado en este anexo?

Muchas gracias por su tiempo y ayuda, cualquier comentario es bienvenido.
  #264 (permalink)  
Antiguo 11/11/2010, 13:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Hola estimado foro, he estado siguiendo toda la conversación, gracias por los aportes me han sido de mucha utilidad, ahora lo que me esta haciendo sifrir es cómo se puede programar los nodos addenda y complemento de un comprobante?.

Agradecería cualquier información que puedan proporcionarme.

Gracias.
  #265 (permalink)  
Antiguo 11/11/2010, 17:52
Avatar de Nanox  
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

SEGUNDA ENTREGA..PHP..

Sellar y meter todo a un xml. con la cadena que sale del xlst.

Código PHP:
$file=$keyP;                                    // Ruta del certificado
    
$datos file($file);
    
$certificado ""$carga=false;
    for (
$i=0$i<sizeof($datos); $i++)             //lellendo el certificado
    
{
        if (
strstr($datos[$i],"END CERTIFICATE")) $carga=false;
        if (
$carga$certificado .= trim($datos[$i]);
        if (
strstr($datos[$i],"BEGIN CERTIFICATE")) $carga=true;
    }
    
$root->setAttribute("certificado",$certificado);//lo pegamos al xml
    
$xml->formatOutput true;                      //Genera un archivo con el mensaje XML + EDI  O lo guarda en cfdsello
    
$todo $xml->saveXML();
    if (
$ruta != "/dev/null"
    {
        
$xml->formatOutput true;
        
$xml->save($ruta.$nufa.".xml");             //con este xml se empalma el xslt ver 1
        
    

    else 
    {
        
$paso $todo;
        
$conn->replace("cfdsello",array("selldocu"=>$nufa,"sellcade"=>$cadena_original,"sellxml"=>$paso),"selldocu",true);
    }
    
  
    
    
$file=$ruta."aaa010101aaa.key.pem";             //llave privada
 
    
$dom1 = new DOMDocument();
    
$dom1->load($ruta.$nufa.".xml");                //Cargas el XML de la factura (los datos aun estan incompletos)
    
$xsl = new DOMDocument;
    
$xsl->load($ruta."cadenaoriginal_1_0.xslt");    //Cargas el xsl
    
    
$proc = new XSLTProcessor;
    
$proc->registerPHPFunctions();
    if (!
$proc->hasExsltSupport()){echo"EXSLT NO disponible"; die('EXSLT NO disponible');}
    
$proc->importStyleSheet($xsl);                  
    
$cadena_original=$proc->transformToXML($dom1);  //Transformas la salida, y obtiens la cadena original
        
    
$pkeyid openssl_get_privatekey(file_get_contents($file));             //Obtienes la llave privada
    
openssl_sign($cadena_original$crypttext$pkeyidOPENSSL_ALGO_MD5);  //Firmas la cadena original
    
openssl_free_key($pkeyid);
    
$sello base64_encode($crypttext);             //lo codifica en base64
    
    //$root->setAttribute("sello",$sello);          //pegamos el sello al xml forma sencilla jjejejeje
   
    
$comp=$dom1->getElementsByTagName('Comprobante')->item(0)->attributes->getNamedItem('sello')->nodeValue=$sello//agregas el sello
    
$dom1->save($ruta2.$_SESSION['pestananom'].$nufa.".xml");               //guardas de nuevo el sml ya completo

---------------funcion------------- es la misma que esta en la pagina de la corona.

function 
cargaAtt(&$nodo$attr)                     //Funcion que carga los atributos a la etiqueta XML
{
    global 
$xml$cadena_original;
    
$quitar = array('sello'=>1,'noCertificado'=>1,'certificado'=>1);
    foreach (
$attr as $key => $val
    {
        
$val preg_replace('/\s\s+/'' '$val);   // Regla 5a y 5c
        
$val trim($val);                           // Regla 5b
        
if (strlen($val)>0
        {                                            
// Regla 6
            
$val utf8_encode(str_replace("|","/",$val)); 
            
//$val = str_replace("|","/",$val);
            
$nodo->setAttribute($key,$val);
            if (!isset(
$quitar[$key]))if (substr($key,0,3) != "xml" && substr($key,0,4) != "xsi:")$cadena_original .= $val "|";
        }
    }

Saluds.. PHPEROS, que se diviertan, ya estoy emitiendo.

grax zeroccm por contestar en el otro hilo
(
Cita:
Iniciado por Nanox Ver Mensaje
alguien ya pudo?
)
  #266 (permalink)  
Antiguo 13/11/2010, 20:36
 
Fecha de Ingreso: octubre-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por kadghar Ver Mensaje
antonio,

tu código es muy bueno, pero tienes pequeños errores, el primero es que la comparación del salt debe ser contra la secuencia de bytes que llamas oidpkcs5pbkdf2 y lo estás haciendo contra oidpkcs5pbes2.

El segundo es que los dos bytes que van después de oiddesede3cbc deben ser 2 y 2, tú estás validando 2 y 1, hay que cambiarlo.

Otro error que tienes, seguramente de concentración fue que en la función que usas para comparar bytes, el incremento de i lo pones adentro del if, debe ir después del end if, si no, cada vez comparas contra el primer byte.

Por último debes revisar en la función decodeprivatekeyinfo, donde lees el 2 y 1 del pkcs8, asignas bt al 2 y twobytes al 1, y luego haces dos veces la comparación contra bt, cuando la segunda comparación debería ir contra el 1, o sea contra twobytes.

Haciendo estas pequeñas modificaciones, probé tu código y desencripta perfectamente cualquier key en pkcs8

saludos,

kad
que tal amigo...
Esoy generando facturas y resulta que el validador me dice que el sello es invalido, sabes si ya cambio de md5 a sha1, porque actualmente tengo la clase que se difundio en este foro...

Alguien sabe algo?
  #267 (permalink)  
Antiguo 13/11/2010, 23:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Hola a todos.

Escribo con una duda muy puntual. Actualmente estoy desarrollando la emisión de CFD's. Mi cliente dice que necesita que cada CFD se genere en menos de un segundo, checando tiempos me percaté de que generar el sello digital de cada CFD tarda 5 segundos... ¿alguno de ustedes sabe si este tiempo puede reducirse de alguna manera?

Muchas gracias por su ayuda.


Saludos!!!
  #268 (permalink)  
Antiguo 14/11/2010, 14:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 12
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por gctalico Ver Mensaje
Que tal, estoy siguiendo este tema y me parece muy bueno, les comento que ya tengo un sistema de facturacion electronica en visual basic 6 y funciona muy bien si tienen alguna duda en algo y los puedo ayudar con gusto lo hare

saludos.
Yo tambien tengo un programa en vb6, esta todo correcto pero al generar el xml me sale error de validacion en el sello. Podrias pasarme las rutinas de generacion del xml para compararlas contra mis rutinas?.

De antemano, gracias
  #269 (permalink)  
Antiguo 16/11/2010, 01:42
 
Fecha de Ingreso: noviembre-2009
Mensajes: 12
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Cita:
Iniciado por tonymagic Ver Mensaje
hola a todos:
resulta que estoy usando el openssl exactamente igual que todos ustedes y el sello no me da igual al que ponen aqui ni el de hacienda, la instruccion que uso es la siguiente:

openssl dgst -sign aaa010101aaa_CSD_01.key.pem md5.txt | openssl enc -base64 -A > sello.txt

1.- el archivo de la cadena origina ya esta en formato utf8
2.- la digestion del MD5 si me da igual al de hacienda = 8aa2b617944427353697e694a2e35a07
3.- al aplicar la instruccion de: openssl dgst -sign aaa010101aaa_CSD_01.key.pem md5.txt | openssl enc -base64 -A > sello.txt

el sello que me da es este:
C1I4poqUEvcFMeWQ942axLKB0188/YtsaJpPnYq/Hwpuue7BlDWHsTn+nzfI2g+UAXm8Ehv2wr81vqXvbKNJnm75lM viDlExoq0x934dofsGNQVgbvYjBzn331t+jcof9GuVZvLdKIg3 L0qParhXiziu9zEGZUK93Vr8nAvPy7I=

y el de hacienda es : iIMz487EGyt6zCFjvcFNvHeOKgKMMc5y1py+QJrIvCmWbbxV43 k2xi6Q23p/Wee31vqUzYH0fbO0yBOvkDtiMejjdCOHPzmLvMkzfAzr919j6t bJOiODlgb7bisEdUkrjRrw+FfwQsPldsfHW6gq3K/fFGT6tTB7gqHP6a44ix0=

la cadena original que uso es: ||A|1|2005-09-02T16:30:00|1|ISP900909Q88|Industrias del Sur Poniente, S.A. de C.V.|Alvaro Obregón|37|3|Col. Roma Norte|México|Cuauhtémoc|Distrito Federal|México|06700|Pino Suarez|23|Centro|Monterrey|Monterrey|Nuevo Léon|México|95460|CAUR390312S87|Rosa María Calderón Uriegas|Topochico|52|Jardines del Valle|Monterrey|Monterrey|Nuevo León|México|95465|10|Caja|Vasos decorados|20|200|1|pieza|Charola metálica|150|150|IVA|52.5||

por favor ayuda... no se que pasa con el openssl, como pruebas lo estoy corriendo por el DOS y an cuanto tenga los resultados los pasare por codigo pero quiero estar al 100% antes de aplicarlo

mil gracias por su ayuda... me es urgente
Tony que tal, la digestión del MD5 no me da igual a la de hacienda, me gustaría saber si me pudieras ayudar estoy haciéndolo de la siguiente manera.
openssl.exe dgst -md5 -sign DATA.PEM -out MD5F.TXT UTF8.TXT
openssl.exe enc -base64 -in MD5F.TXT -out SELD.TXT
DONDE:
- MD5F.TXT SE GENERA CON DATA.PEM
- UTF8.TXT ES LA CADENA ORIGINAL
- SELD.TXT ES EL SELLO DIGITAL, CUANDO ENVIO EL XML AL VALIDADOR DEL SAT ME REGRESA UNA DIGESTION DEL MD5 DIFERENTE, A LA COMPROBACION LOCAL CON EL COMANDO:
Openssl dgst –md5 utf8.txt que es mi cadena original

Alguna sugerencia? te lo agradecería mucho

Saludos
  #270 (permalink)  
Antiguo 16/11/2010, 09:59
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Factura electroncia sat mexico

Miren este tutorial sobre la generacion del sello digital, espero les pueda resolver varias dudas, incluye los documentos para que los puedan descargar.

http://actron.wordpress.com/2010/11/16/facturacion-electronica-sello-openssl-php/

Saludos

@Elite_Astaroth

Etiquetas: factura, mexico, sat
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 39 personas




La zona horaria es GMT -6. Ahora son las 10:23.