Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/05/2011, 09:34
elrmagician
 
Fecha de Ingreso: julio-2006
Mensajes: 8
Antigüedad: 18 años, 4 meses
Puntos: 0
Información Respuesta: configurar IPN de DineroMail

Si ya tienes un archivo que crea las carpetas y los archivos como mencionas en la raiz de este hilo, lo unico que debes hacer es crear el script que verifique el estatus. El IPN funciona con un archivo que escuchara las notificaciones que envie dinero mail y otro que consulte los estatus, un ejemplo del primero es:

$consulta= new consulta();// instancio la clase que hara las consultas de los ids en el IPNv2
$notificacion = $_REQUEST['NOTIFICACION'];//otra opcion es con request NOTIFICACION es el XML
$content = str_replace("<?xml version=''1.0'' encoding=''ISO-8859-1''?>","<?xml version='1.0' encoding='ISO-8859-1'?>",$notificacion);//anulo posibles errores en el header del xml
$doc = new SimpleXMLElement($content);// Parseo el XML

/* CARGO EN LA VARIABLE tipo_notificacion EL CONTENIDO QUE TIENE EL NODO TIPONOFITICACION */
$fp=fopen('xmlDM'.date("Y-m-d").'.txt', "w");
fwrite($fp, $content);//este es la instruccion para escribir un archivo, previamente abierto con fopen
fclose($fp);

/* RECORRO LAS OPERACIONES Y SE CONSULTA EL ESTATUS DE LA OPERACION NOTIFICADA*/
foreach ($doc ->OPERACIONES ->OPERACION as $OPERACION){
$tipo_operacion= $OPERACION->TIPO;
$id_operacion= $OPERACION->ID;
if($tipo_operacion==1)
{
$movimiento=mysql_query("select * from x where x=".$id_operacion."");//yo consulto mi bd para saber si tengo pendiente esa operacion
if(mysql_num_rows($movimiento)==1)
{
$rMov=mysql_fetch_array($movimiento);

$ids="<ID>".$rMov[0]."</ID>";// armo tags para generar consulta en el IPNv2
$xml=$consulta->consulta($ids);
if($xml)
{
$estatus=$consulta->evaluaInfo($xml);
if($estatus==2)
{echo "tiene saldo";}
else if($estatus==1)
{echo "pendiente de comprobar";}
else if($estatus==3)
{echo "Pago cancelado";}
}
}
}
}
mi clase de consulta:
class consulta {

private $url = 'http://mexico.dineromail.com/Vender/Consulta_IPN.asp';
private $sql;
function __construct()
{
$this->sql= new usamysql('localhost','infoscop','Temporal9','infos copio');
}
private function makeCons($data)
{
list($cuenta,$passwd,$noMov)=$data;
$data = 'DATA=<REPORTE>
<NROCTA>'.$cuenta.'</NROCTA>
<DETALLE>
<CONSULTA>
<CLAVE>'.$passwd.'</CLAVE>
<TIPO>1</TIPO>
<OPERACIONES>
'.$noMov.'
</OPERACIONES>
</CONSULTA>
</DETALLE>
</REPORTE>';//TAG TIPO Siempre en 1
return $data;
}
// parsea URL
private function parserURL()
{
$url = parse_url($this->url);

$ruta[]=$url['host'];
$ruta[]=$url['path'];

return $ruta;
}
// obtiene host y path
function consulta($ids)
{
list($host,$path)=$this->parserURL();
$params[]="usuarioDineroMail";
$params[]="password";
$params[]=$ids;
$data=$this->makeCons($params);
$fp = fsockopen($host, 80);
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$result = '';
while(!feof($fp))
{
// resultado del request
$result .= fgets($fp, 128);
}
// cierra conexion
fclose($fp);
// separa el header del content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
$content = str_replace("<?xml version=''1.0'' encoding=''ISO-8859-1''?>","<?xml version='1.0' encoding='ISO-8859-1'?>",$content);
return $content;
}
function evaluaInfo($content)
{
//$content=$this->conectaURL();
//echo $content;
try{
$xml= new SimpleXMLElement($content);
/*$fp=fopen('xmlDMResp.txt', "w");
fwrite($fp, $content);
fclose($fp);*/
}
catch (Exception $e){ echo "XML ERRONEO".$e;
}
$datosO =$xml->DETALLE->OPERACIONES->OPERACION;
$idMov = $datosO->ID;
$fechaMov=$datosO->FECHA;
$statMov=$datosO->ESTADO;
$montBr =$datosO->MONTO;
$montNt =$datosO->MONTONETO;
$comision=$montBr-(double)$montNt;
switch($statMov)
{
case 1:
//$this->sql->query("update depositos set monto=".$montBr.", neto=".$montNt.", comision_dm=".$comision.", completo=".$statMov." where ref_id like '".$idMov."'");
$stat=1;
break;
case 2:
$this->ponerDeposito($idMov,$montBr,$montNt,$comision,$f echaMov);
$this->ingresaSaldo($idMov);
//$this->sql->query("update depositos set monto=".$montBr.", neto=".$montNt.", comision_dm=".$comision.", completo=".$statMov." where ref_id like '".$idMov."'");

$stat=2;
break;
case 3:
$stat=3;
break;
}
return $stat;
}
private function ponerDeposito($idMov,$bruto,$neto,$comision,$fecha )
{
$strQ ="insert into depositos (User_id,refer,tipo,monto,neto,comision_dm,fecha_m ov) select User_id,x,tipo,'".$bruto."','";
$strQ.=$neto."','".$comision."','".$this->depuraFecha($fecha)."' from x where x=".$idMov."";
$this->sql->query($strQ);
$this->sql->query("delete from x where x=".$idMov."");
}
private function depuraFecha($fecha)
{
$fechaMov=split(" ",$fecha);
$soloFecha=$fechaMov[0];
$soloHora=$fechaMov[1];
$tipoHora=$fechaMov[2];
$soloFecha=explode("/",$soloFecha);// Formato m/d/AAAA

$dia=($soloFecha[1]<10 ? '0'.$soloFecha[1] : $soloFecha[1]);
$mes=($soloFecha[0]<10 ? '0'.$soloFecha[0] : $soloFecha[0]);
$fechaMov=$soloFecha[2]."-".$mes."-".$dia;

$hora=explode(":",$soloHora);
list($h,$m,$s)=$hora;
if($tipoHora=="AM")
{
$h=($h==12 ? "00":"0".$h);
}
else if($tipoHora=="PM")
{
if($h!=12)
{
$h=$h+12;
}
}
$horaMov=$h.":".$m.":".$s;
$fechaCorr=$fechaMov." ".$horaMov;
return $fechaCorr;
}
private function ingresaSaldo($refId)
{
$deposito=$this->sql->query("select * from depositos where ref_id=".$refId."");
$rDeposito=$this->sql->fetch_arr($deposito);

$saldos=$this->sql->query("select * from usuarios_saldos where User_id like '".$rDeposito['User_id']."' and tipo=".$rDeposito['tipo']."");
$r_saldos=$this->sql->fetch_arr($saldos);
$monto=$rDeposito['monto'];
$disponible=$r_saldos['disponible']+$monto;
if($rDeposito['tipo']==1)
{
$fechaStamp=strtotime($rDeposito['fecha_mov']);
$vigencia=$r_saldos['vigencia']+90;

$diasStamp=((60*60)*24)*$vigencia;
$nfecha=$fechaStamp+$diasStamp;
$fechaCad=date("Y-m-d",$nfecha);
}

$qUpdt ="update saldos set refer=".$refId.", cantidad=".$monto.", disponible=".$disponible.", vigencia='".$vigencia."', ";
$qUpdt.="fecha_depo='".$rDeposito['fecha_mov']."', fecha_vence='".$fechaCad."', envia=1 where User_id like '".$rDeposito['User_id'];
$qUpdt.="' and tipo=".$rDeposito['tipo'];
echo "<br>".$qUpdt;
$this->sql->query($qUpdt);
}