3 de diciembre de 2008
Trataremos los archivos incluidos Desofuscar.php y IdTransaccion.php
IdTransaccion.php sirve para crear un número de reserva (id de la transacción), es un número identificativo único para cada compra/reserva que realiza el usuario en nuestro comercio, a continuación os pongo el código y luego lo comento, veréis que es muy sencillo:
<?php
/*****************************************************
/** @Author: Ricard Catalan
/** @return: IDTransaccion
/** Clase usada para devolver un identificador de la transacción único
/****************************************************/
class IdTransaccion{
private $y;
private $ddd;
private $hh;
private $mm;
private $ss;
private $an;
private $id;
public function __construct(){
$this->setIdTrans();
}
private function setIdTrans(){
$this->y=substr(date('y'),strlen(date('y'))-1,strlen(date('y')));
$this->ddd=date('z'); //Devuelve el día del año desde 0 a 365
if($this->ddd < 10) $this->ddd= '00'.$this->ddd; //añadimos 2 ceros en el caso de ser menos de 10
else if($this->ddd > 9 && $this->ddd < 100) $this->ddd= '0'.$this->ddd; //añadimos un 0 en el caso de ser mayor de 9 y menor de 100
$this->hh=date('H'); //Devuelve la hora en formato 00 a 24
$this->mm=date('i'); //Devuelve los minutos desde 00 a 59
$this->ss=date('s'); //Devueve los segundos en 00 a 59
$this->an=rand('11','99'); //Devuelve un valor aleatorio ente 10-99
}
public function getIdTrans(){
return $this->id=$this->y.$this->ddd.$this->hh.$this->mm.$this->ss.$this->an;
}
}
?>
He creado una pequeña clase con PHP5, en la que creo un número único de 12 dígitos con date() desde la hora del servidor:
- - Primero recojo el último digito del año
- - Los días del año de 001 a 365, es muy importante que tenga 3 dígitos porque sino date('z') nos puede devolver por ejemplo 32 y el número generado será de 11 dígitos y el TPV virtual del BBV le añadirá un 0 delante, puesto que siempre debe ser un número de 12 dígitos, y al ser diferente nunca podremos recorger los datos del cliente guardados en XML.
- - El resto de valores son la hora, los minutos y segundos con 2 dígitos cada uno
- - Por último el número aleatorio de 2 dígitos. Hay que tener en cuenta que dependiendo de la versión de PHP que tengamos en el servidor podrémos usar milisegundos que siempre será mejor que 2 dígitos aleatorios.
Desofuscar.php es un script que nos facilitará BBVA en la documentación que encontraremos en el TPV virtual del BBVA.
Sin embargo, es bastante "tosco" como esta realizado y yo lo he adaptado a PHP5 orientado a objetos por lo que el código es más elegante y más fácil de hacer la "llamada".
Os pongo la clase como quedaría, pero sin poner todo el código, puesto que ya lo facilita BBVA:
<?php
/*****************************************************
/** @Author: Ricard Catalan
/** @return: pal_sec
/** Clase usada para devolver la palabra desofuscada
/****************************************************/
class Desofuscar{
private $pal_sec_ofuscada;
private $clave_xor;
private $cad1_0="0";
private $cad2_0="00";
private $cad3_0="000";
private $cad4_0="0000";
private $cad5_0="00000";
private $cad6_0="000000";
private $cad7_0="0000000";
private $cad8_0="00000000";
private $pal_sec="";
public function __construct($ofuscada,$clave,$idcomercio){
$this->pal_sec_ofuscada=$ofuscada;
$this->clave_xor=$clave.substr($idcomercio,0,9).'***';
$this->Desofuscar(); //Desofuscamos
}
private function Desofuscar(){
$trozos=explode (";", $this->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] = $this->cad1_0.$pal_sec_ofus_bytes[$i]; }
if (strlen($pal_sec_ofus_bytes[$i]) == 6){ $pal_sec_ofus_bytes[$i] = $this->cad2_0.$pal_sec_ofus_bytes[$i]; }
... /* aquí va el código restante del manual */
}
}
public function getDesofuscar(){
return $this->pal_sec;
}
}
?>
Simplemtente con crear una instancia de la clase Desofuscar y hacer una llamada al método getIdTrans() obtendremos la palabra desofuscada.
Podéis ver como se realiza la instancia de la dos clases (Desofuscar y IdTransaccion) en la primera parte del artículo aquí.
Hasta aqui el segundo artículo, en el tercer artículo veremos el archivo pasarela.php para que sirve y las múltiples opciones que tendremos en él.
Etiquetas: bbva, pasarela de pago, php, proyecto, tpv