Foros del Web » Programando para Internet » PHP »

problemas con php y xml

Estas en el tema de problemas con php y xml en el foro de PHP en Foros del Web. Hola a todos mi problema es que genero cn php un xml y al ponerle el header para verlo me da este error Error de ...
  #1 (permalink)  
Antiguo 08/11/2011, 10:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 15
Antigüedad: 14 años, 2 meses
Puntos: 0
problemas con php y xml

Hola a todos mi problema es que genero cn php un xml y al ponerle el header para verlo me da este error Error de lectura XML: mal formado
Ubicación: http://localhost/conbase2.php?importe=100
Número de línea 1, columna 4:
He mirado por todos lados y no se que es lo que pasa estoy muy perdido y muchas horas perdidas os dejo aqui el codigo a ver si alguien sabe lo que puede pasar. Gracias.

<?php
//RECOGER IMPORTE Y QUITAR LAS COMAS SI HAY Y SUSTITUIRLAS POR PUNTOS
$importe=$_GET['importe'];
echo $importe;
echo '<br>';
$tamano=strlen($importe);
$importe=str_replace(',','.',$importe);
echo $importe;
echo '<br>';
//SI NO TIENE PUNTOS NI COMAS LE PONGO UN PUNTO Y 2 CEROS
$posicion=strpos($importe,'.');
if($posicion==false){
$importe=$importe.'.00';
}
//SI ES UN NUMERO SEGUIMOS SI NO SALIMOS
if(is_numeric($importe)){
//CONEXION BASE DE DATOS Y EXTRAER DATOS NECESIARIOS
$con=mysql_connect('localhost','usuario','jarkonen 1');
mysql_select_db('tpv');
$sql="select clave, codcomercio, pass, terminal from datos";
$res=mysql_query($sql);
$dades=mysql_fetch_array($res);
$idcomercio=$dades['codcomercio'];
$terminal=$dades['terminal'];
$clave=$dades['pass'];
echo $clave;
echo '<br>';
$ofuscada=$dades['clave'];
echo $ofuscada;
echo '<br>';
$clave_xor=$clave.substr($idcomercio,0,9).'***';
echo $clave_xor;
echo '<br>';
mysql_close($con);
//HACER EL NUMERO DE TRANSACCION
date_default_timezone_set('Europe/Madrid');
$ano=substr(date('y'),-1);
echo $ano;
echo '<br>';
$dias=date('z');
$digitos=strlen(date('z'));
if($digitos<3){
$dias=str_pad($dias,3,0,STR_PAD_LEFT);
}
echo $dias;
echo '<br>';
$hora=date('H');
echo $hora;
echo '<br>';
$minutos=date('i');
echo $minutos;
echo '<br>';
$segundos=date('s');
echo $segundos;
echo '<br>';
$aleatorio=rand('11','99');
echo $aleatorio;
echo '<br>';
$idtransaccion=$ano.$dias.$hora.$minutos.$segundos .$aleatorio;
echo $idtransaccion;
echo '<br>';
//DESOFUSCAR LA PALABRA CLAVE
//FORMATEAR EL IMPORTE
//El paso siguiente es convertir el formato del precio XXX.XX por XXXX (quitando la coma) -> para calcular la firma
//$preuTotal = 87,5
$preuTotal=$importe;
$explo_preu=explode(".",$preuTotal);// formatear el importe de 87,5 a 875
$preuTemp=$explo_preu[1];
echo $preuTemp;
if(strlen($preuTemp)==1) $preuTemp=$preuTemp.'0'; //En el caso de tener: XX.5 pasamo a XX.50
elseif(strlen($preuTemp)==0) $preuTemp='00'; //En el caso de tener: XX pasamo a XX00 (añadiendo dos ceros finales)
$importe_formateado=$explo_preu[0].$preuTemp; //Guardamos el importe formateado para el calculo de la firma
$precio=$explo_preu[0].'.'.$preuTemp; //Guardamos el importe con el formato correcto, que usaremos en el envio del XML
$moneda='978'; //Euro
echo '<br>';
echo $preuTemp;
echo '<br>';
echo $precio;
echo '<br>';
$desobfuscated=desofuscar();
echo $desobfuscated;
echo '<br>';
echo $importe_formateado;
//CREACION DE LA FIRMA
$datosfirma=$terminal.$idcomercio.$idtransaccion.$ importe_formateado.$moneda.$desobfuscated;
$firma=strtoupper(sha1($datosfirma)); //Generación SHA-1 por PHP5
echo '<br>';
echo $firma;
echo '<br>';
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Creamos una variable en formato XML
//URLCOMERCIO: es el archivo PHP por el cual BBVA hará una llamada pasandole los datos de la compra (correcta o incorrecta)
//URLREDIR: Una vez realizada la compra y el cliente salga del TPV, será redirigido a esta dirección (OPCIONAL)
$pais='ES';
$lang='es';
$nom='David';
$cognom='Blanco';
$email='[email protected]';
$telf1='952584406';
$telf2='617017817';
$fecha=date('j-n-Y');
echo '<br>';
echo $fecha;
$xml="xml version='1.0' encoding='UTF-8'
<tpv>
<oppago>
<idterminal>$terminal</idterminal>
<idcomercio>$idcomercio</idcomercio>
<idtransaccion>$idtransaccion</idtransaccion>
<moneda>$moneda</moneda>
<importe>$precio</importe>
<urlcomercio>http://localhost/conbase2.php</urlcomercio>
<idioma>$lang</idioma>
<pais>$pais</pais>
<urlredir>http://localhost/conbase2.php</urlredir>
<firma>$firma</firma>
</oppago>
</tpv>";
echo $xml.'<br>';
header("content-type: text/xml");
echo '<form action="https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor" method="POST">';
/* AQUI VA EL CÓDIGO HTML del FORMULARIO que queramos */
echo '<input type="hidden" name="peticion" value="echo $xml"/>';
echo '<input type="submit" value="enviar" name="envio"/>';
echo '</form>';
/****** Guardamos una copia con los datos del cliente en formato XML en el servidor ******/
//Aqui guardaremos los datos de la compra de un cliente, esto puede variar según los datos que queramos guardar
//El siguiente XML es un ejemplo:
//$xml2="xml version='1.0' encoding='UTF-8'
//<tpv>
// <transid>
// <nombre>$nom</nombre>
// <apellido>$cognom</apellido>
// <email>$email</email>
// <telf1>$telf1</telf1>
// <telf2>$telf2</telf2>
// <fecha>$fecha</fecha>
// <precio>$precio</precio>
// </transid>
//</tpv>";
//NOTA: la primera línea es para guardar texto codificado en UTF-8, podemos quitarla, si no lo queremos
//$file="xml/$idtransaccion.xml";
//$transc = fopen($file,"w+"); //Creamos un fichero y por nombre le ponemos la ID TRANSACCÓN
//fputs($transc,$xml2); //Añadimos el contenido
//chmod($file,0755); //Modificamos los permisos para posteriormente poder hacer un borrado.
//fclose($transc); //Cerramos el fichero
}
else{
echo "<a href='precio.php'>El importe marcado no es un numero vuelvelo a intentar</a><br>";
}
//FUNCION DESOFUSCAR
function desofuscar()
{
$clave_xor='1MotorExG92603521***';
$pal_sec_ofuscada='05;75;29;41;59;34;04;4F;73;08;0 3;07;05;07;74;0A;02;1F;6E;12';
$cad1_0 = "0";
$cad2_0 = "00";
$cad3_0 = "000";
$cad4_0 = "0000";
$cad5_0 = "00000";
$cad6_0 = "000000";
$cad7_0 = "0000000";
$cad8_0 = "00000000";
$pal_sec = "";
$trozos = explode (";", $pal_sec_ofuscada);
$tope = count($trozos);
for ($i=0; $i<$tope ; $i++)
{
$res = "";
$pal_sec_ofus_bytes[$i] = decbin(hexdec($trozos[$i]));
if (strlen($pal_sec_ofus_bytes[$i]) == 7){ $pal_sec_ofus_bytes[$i] = $cad1_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 6){ $pal_sec_ofus_bytes[$i] = $cad2_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 5){ $pal_sec_ofus_bytes[$i] = $cad3_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 4){ $pal_sec_ofus_bytes[$i] = $cad4_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 3){ $pal_sec_ofus_bytes[$i] = $cad5_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 2){ $pal_sec_ofus_bytes[$i] = $cad6_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 1){ $pal_sec_ofus_bytes[$i] = $cad7_0.$pal_sec_ofus_bytes[$i]; }
$pal_sec_xor_bytes[$i] = decbin(ord($clave_xor[$i]));
if (strlen($pal_sec_xor_bytes[$i]) == 7){ $pal_sec_xor_bytes[$i] = $cad1_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 6){ $pal_sec_xor_bytes[$i] = $cad2_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 5){ $pal_sec_xor_bytes[$i] = $cad3_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 4){ $pal_sec_xor_bytes[$i] = $cad4_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 3){ $pal_sec_xor_bytes[$i] = $cad5_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 2){ $pal_sec_xor_bytes[$i] = $cad6_0.$pal_sec_xor_bytes[$i]; }
if (strlen($pal_sec_xor_bytes[$i]) == 1){ $pal_sec_xor_bytes[$i] = $cad7_0.$pal_sec_xor_bytes[$i]; }
for ($j=0; $j<8; $j++)
{
(string)$res .= (int)$pal_sec_ofus_bytes[$i][$j] ^ (int)$pal_sec_xor_bytes[$i][$j];
}
$xor[$i] = $res;
$pal_sec .= chr(bindec($xor[$i]));
}
return $pal_sec;
}
?>
  #2 (permalink)  
Antiguo 08/11/2011, 11:21
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: problemas con php y xml

amigo, así es muy difícil ayudarte, la idea es que depures tu código para ver en dónde esté fallando, el analizador XML de Firefox es muy bueno y te indica las lineas de error del XML

PD: use la herramienta highlight del foro
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 08/11/2011, 11:40
 
Fecha de Ingreso: febrero-2010
Mensajes: 15
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: problemas con php y xml

Si me dice la linea linea 1 columna 4 pero donde esta eso.
  #4 (permalink)  
Antiguo 08/11/2011, 11:42
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: problemas con php y xml

Cita:
Iniciado por limbo992 Ver Mensaje
Si me dice la linea linea 1 columna 4 pero donde esta eso.
para eso tienes que ver el código fuente XML generado
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 08/11/2011, 16:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 15
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: problemas con php y xml

Bueno gracias por contestar pero como puedo ver el codigo generado por el xml si me falla?
  #6 (permalink)  
Antiguo 08/11/2011, 18:01
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: problemas con php y xml

Cita:
Iniciado por limbo992 Ver Mensaje
Bueno gracias por contestar pero como puedo ver el codigo generado por el xml si me falla?
aún si te falla en Firefox puedes verlo con ver-> código fuente

lo que falla es el parser al tratar de leer el XML, pero el XML ya fue completamente devuelto por PHP
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: xml
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.