Ver Mensaje Individual
  #251 (permalink)  
Antiguo 22/10/2010, 13:45
Avatar de Nanox
Nanox
 
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años
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