Foros del Web » Estrategias Digitales y Negocios Online » Negocios »

configurar IPN de DineroMail

Estas en el tema de configurar IPN de DineroMail en el foro de Negocios en Foros del Web. Estoy usando la herramienta IPN de MercadoPago que envía informes automaticamente cuando se realiza un pago, o cambia su estado. MercadoPago envia por POST a ...
  #1 (permalink)  
Antiguo 01/05/2011, 15:02
 
Fecha de Ingreso: mayo-2011
Mensajes: 4
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta configurar IPN de DineroMail

Estoy usando la herramienta IPN de MercadoPago que envía informes automaticamente cuando se realiza un pago, o cambia su estado. MercadoPago envia por POST a un archivo PHP de mi servidor el cual recoje las variables y va generando archivos, carpetas, etc.... asi funciona mi web.

Pero me gustaria cambiarme a DineroMail ya que estos tienen la posibilidad de extraer el efectivo directamente por un cheque que emite el banco Francés.

Pero el servicio IPN de DineroMail funciona por consulta XML y la verdad es que no tengo ni idea sobre XML...

Estuve leyendo mucho pero no no comprendo. Soy principiante en PHP espero que me ayuden:


Esto es lo que dice el instructivo:


En caso de crearse nuevas operaciones o de modificarse el estado de
estas, Dineromail enviará por “POST” un parámetro “NOTIFICACION”
que contiene un XML el cual contendrá los identificadores de las
operaciones que han sido modificadas. La estructura del XML se
detalla a continuación:


<NOTIFICACION>
<TIPONOTIFICACION>1</TIPONOTIFICACION>
<OPERACIONES>
<OPERACION>
<TIPO>1</TIPO>
<ID>31548</ID>
</OPERACION>
<OPERACION>
<TIPO>1</TIPO>
<ID>XA5547</ID>
</OPEARACION>
</OPERACIONES>
</NOTIFICACION>



.................

¿Cómo recojo estas variables, para generar archivos, directorios, etc con mi servidor?

Aca está el manual:

https://argentina.dineromail.com/Vender/Manual/Manual_Ventas.pdf

Espero que me ayuden, muchisimas gracias!
  #2 (permalink)  
Antiguo 06/05/2011, 10:59
 
Fecha de Ingreso: julio-2006
Mensajes: 8
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: configurar IPN de DineroMail

Hola ineedphphelp, yo actualmente trabajo con ese manejador de pagos, y lo unico que debes hacer es parsear el html, en la misma pagina de dineromail te proporcionan un par de ejemplos, tu pagina recibira ese xml, tu lo parseas y extraes los id de las operaciones "<ID>XXXX</ID>", adicional a esto tu puedes consultar con otro mensaje el estatus de las operaciones, te recomiendo buscar en la pagina los scripts de ejemplo y te puedes dar una idea, cualquier cosa o algun detalle en particular te puedo ayudar
  #3 (permalink)  
Antiguo 07/05/2011, 01:26
 
Fecha de Ingreso: mayo-2011
Mensajes: 4
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: configurar IPN de DineroMail

Cita:
Iniciado por elrmagician Ver Mensaje
Hola ineedphphelp, yo actualmente trabajo con ese manejador de pagos, y lo unico que debes hacer es parsear el html, en la misma pagina de dineromail te proporcionan un par de ejemplos, tu pagina recibira ese xml, tu lo parseas y extraes los id de las operaciones "<ID>XXXX</ID>", adicional a esto tu puedes consultar con otro mensaje el estatus de las operaciones, te recomiendo buscar en la pagina los scripts de ejemplo y te puedes dar una idea, cualquier cosa o algun detalle en particular te puedo ayudar


Muchas gracias podrias indicarme un ejemplo sensillo un codigo en PHP que me cree una carpeta con el Nro de Operacion y dentro de ella un archivo con el precio???? Seria de gran ayuda!!! muchas gracias XML no es mi fuerte jaja
  #4 (permalink)  
Antiguo 11/05/2011, 09:34
 
Fecha de Ingreso: julio-2006
Mensajes: 8
Antigüedad: 17 años, 8 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);
}
  #5 (permalink)  
Antiguo 11/05/2011, 09:36
 
Fecha de Ingreso: julio-2006
Mensajes: 8
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: configurar IPN de DineroMail

estos 2 archivos son los que uso la variable $sql es una instancia de una clase que hice para utilizar mysql, pero puedes cambiarlo por las funciones por defecto de php, en la clase tu puedes agregar un metodo que genera la carpera y escriba lo que quieres escribir de acuerdo a los datos que te regrese el xml, no es complejo, solo ve la sintaxis y si tienes dudas que es muy seguro jaja, te explico como esta la clase. Saludos
  #6 (permalink)  
Antiguo 11/05/2011, 20:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 4
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: configurar IPN de DineroMail

Cita:
Iniciado por elrmagician Ver Mensaje
estos 2 archivos son los que uso la variable $sql es una instancia de una clase que hice para utilizar mysql, pero puedes cambiarlo por las funciones por defecto de php, en la clase tu puedes agregar un metodo que genera la carpera y escriba lo que quieres escribir de acuerdo a los datos que te regrese el xml, no es complejo, solo ve la sintaxis y si tienes dudas que es muy seguro jaja, te explico como esta la clase. Saludos

Sos mi Dios!!! Muchisimas gracias voy a ponerlo a prueba y despues te cuento!

Etiquetas: dineromail, ipn, lectura, procesadores-de-pago, 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 10:50.