Respuesta: Factura electroncia sat mexico Cita:
Iniciado por nanox 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$cadena_original='||'; //inicializamos en pipes doble la cadena original if($eempres == "emisordif a la razon social") { $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]"); } $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]", 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]", 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"); //------- //-------construimos un xml con los datos del array------ //------- $nodo="";$esquemas=true; global $xml, $cadena_original, $conn; error_reporting(e_all); $rsocialsinpuntos=str_replace(".","",$row1['rsocial']); $nufa = $arr['serie']." ".$arr['folio']." ".$rsocialsinpuntos;// junta el numero de factura serie + folio $xml = new domdocument("1.0","utf-8"); //datos generales del comprobante $root = $xml->createelement("comprobante"); $root = $xml->appendchild($root); if ($esquemas==true) { #7/dic/2006 porque los necios de levicom (para chedraui) no quieren estos elmentos, dicen que su validador lo agrega cargaatt ($root, array("xmlns"=>"http://www.sat.gob.mx/cfd/2", "xmlns:xsi"=>"http://www.w3.org/2001/xmlschema-instance", "xsi:schemalocation"=>"http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd")); } cargaatt ($root, array("version"=>$arr['version'], "serie"=>$arr['serie'], "folio"=>$arr['folio'], "fecha"=>$arr['fecha'], "sello"=>"@", "noaprobacion"=>$arr['noaprobacion'], "anoaprobacion"=>$arr['anoaprobacion'],"tipodecomprobante"=>$arr['tipodecomprobante'], "formadepago"=>$arr['formadepago'], "condicionesdepago"=>$arr['condicionesdepago'], "nocertificado"=>$arr['nocertificado'], "certificado"=>"@", "subtotal"=>$arr['subtotal'], "descuento"=>"0", "total"=>$arr['total'] )); $emisor = $xml->createelement("emisor"); //datos del emisor $emisor = $root->appendchild($emisor); cargaatt ($emisor, array("rfc"=>$arr['rfce'],"nombre"=>$arr['emisor'])); $domfis = $xml->createelement("domiciliofiscal"); $domfis = $emisor->appendchild($domfis); cargaatt ($domfis, array("calle"=>$arr['callee'], "noexterior"=>$arr['noexteriore'], "nointerior"=>$arr['nointeriore'], "colonia"=>$arr['coloniae'], "municipio"=>$arr['municipioe'], "estado"=>$arr['estadoe'], "pais"=>$arr['paise'], "codigopostal"=>$arr['codigopostale'])); if($eempres == "emisordif a la razon social") //solo para el caso en que el domicilio de expedicion no se el mismo que la rs { $expedido = $xml->createelement("expedidoen"); $expedido = $emisor->appendchild($expedido); cargaatt ($expedido, array("calle"=>$arre['calleee'], "colonia"=>$arre['coloniaee'], "municipio"=>$arre['municipioee'], "estado"=>$arre['estadoee'], "pais"=>$arre['paisee'], "codigopostal"=>$arre['codigopostalee'])); } $receptor = $xml->createelement("receptor"); //datos del receptor $receptor = $root->appendchild($receptor); cargaatt ($receptor, array("rfc"=>$arr['rfcr'],"nombre"=>$arr['receptor'])); $domicilio = $xml->createelement("domicilio"); $domicilio = $receptor->appendchild($domicilio); cargaatt ($domicilio, array("calle"=>$arr['caller'], "colonia"=>$arr['coloniar'], "municipio"=>$arr['municipior'], "estado"=>$arr['estador'], "pais"=>$arr['paisr'], "codigopostal"=>$arr['codigopostalr'])); $conceptos = $xml->createelement("conceptos"); //detalle de los conceptos/produtos de la factura $conceptos = $root->appendchild($conceptos); $data = mysql_query("select productos.*,facturasd.* from facturasd left join productos on productos.idproducto = facturasd.idproducto where facturasd.idencabezado = '$id' order by facturasd.id desc")or die(mysql_error()); { if($row2['idumedida']=="millar"){$cantidad=$row2['cantpzas']/1000;} if($row2['idumedida']=="piezas"){$cantidad=$row2['cantpzas'];} if($row2['idumedida']=="kilos"){$cantidad=$row2['cantkgs'];} if($row2['idumedida']=="libras"){$cantidad=$row2['cantenlibras'];} $concepto = $xml->createelement("concepto"); $concepto = $conceptos->appendchild($concepto); cargaatt ($concepto, array("cantidad"=>$cantidad, "unidad"=>$row2['idumedida'], "noidentificacion"=>$row2['idproducto'], "descripcion"=>$row2['nombre'], "valorunitario"=>$row2['preciouni'], "importe"=>$row2['preciototal'])); } $impuestos = $xml->createelement("impuestos"); //impuesto (iva) $impuestos = $root->appendchild($impuestos); if($row1['conceptodocto']==2) //retenciones { cargaatt ($impuestos, array("totalimpuestosretenidos"=>$arr['importe'])); if (isset($arr['importe'])) { $retenciones = $xml->createelement("retenciones"); $retenciones = $impuestos->appendchild($retenciones); $retencion = $xml->createelement("retencion"); $retencion = $retenciones->appendchild($retencion); cargaatt ($retencion, array("impuesto"=>$arr['impuestoiva'],"importe"=>$arr['importe'])); } } else //traslados { cargaatt ($impuestos, array("totalimpuestostrasladados"=>$arr['importe'])); if (isset($arr['importe'])) { $traslados = $xml->createelement("traslados"); $traslados = $impuestos->appendchild($traslados); $traslado = $xml->createelement("traslado"); $traslado = $traslados->appendchild($traslado); cargaatt ($traslado, array("impuesto"=>$arr['impuestoiva'],"tasa"=>$arr['tasa'],"importe"=>$arr['importe'])); } } $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 |