Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2011, 10:19
limbo992
 
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;
}
?>