Foros del Web » Programando para Internet » PHP »

DineroMail con PHP

Estas en el tema de DineroMail con PHP en el foro de PHP en Foros del Web. Hola estoy tratando de implementar el IPN v2 de dineromail a un sitio web que hice. Soy programador de PHP, pero no logro que me ...
  #1 (permalink)  
Antiguo 03/01/2012, 13:11
 
Fecha de Ingreso: mayo-2003
Mensajes: 523
Antigüedad: 20 años, 11 meses
Puntos: 6
DineroMail con PHP

Hola estoy tratando de implementar el IPN v2 de dineromail a un sitio web que hice. Soy programador de PHP, pero no logro que me funcione bien. ¿Alguien tiene experiencia con esto?
  #2 (permalink)  
Antiguo 03/01/2012, 13:21
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: DineroMail con PHP

mostranos los problemas que van surgiendo y lo vamos viendo, yo implemente dineromail hace poco.
y detallano un poco que es lo que tenes que hacer precisamente
  #3 (permalink)  
Antiguo 03/01/2012, 13:31
 
Fecha de Ingreso: mayo-2003
Mensajes: 523
Antigüedad: 20 años, 11 meses
Puntos: 6
Mensaje Respuesta: DineroMail con PHP

Lo que necesito es que cuando DineroMail me notifique un pago concretado (operacion en estado 2) se actualice un registro en mi base de datos.
Por alguna razón esto no sucede, pego aquí el código del archivo que está configurado para recibir las notificaciones de DineroMail. La mayoría de este código lo obtuve de los propios ejemplos de dineromail:

include("../admin/includes/conex.php");
$url= 'https://argentina.dineromail.com/Vender/Consulta_IPN.asp';
//URL donde realizo las consultas a DineroMail
//Recibe notificaciones automaticas de DineroMail
$notificacion;
$notificacion = $_REQUEST['Notificacion'];
$doc = new SimpleXMLElement($notificacion);
//Por cada operacion notificada consulto al servidor de DineroMail para obtener los detalles de cada una
//Armo archivo XML con los datos de la consulta
$data = 'DATA=<REPORTE><NROCTA>2048305</NROCTA><DETALLE><CONSULTA><CLAVE>dinero1194</CLAVE><TIPO>1</TIPO><OPERACIONES>';
foreach ($doc ->OPERACIONES ->OPERACION as $OPERACION)
{
$tipo_operacion= $OPERACION->TIPO;
$id_operacion= $OPERACION->ID;
$data=$data.'<ID>'.$id_operacion.'</ID>';
}
$data=$data.'</OPERACIONES></CONSULTA></DETALLE></REPORTE>';
// parsea URL
$url = parse_url($url);
// obtiene host y path
$host = $url['host'];
$path = $url['path'];
// abre conexion en puerto 80
$fp = fsockopen($host, 80);
// request
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\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);
}
// 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=substr($content,5);
$content=substr($content,0,-7);
$doc2 = new SimpleXMLElement($content);
foreach ($doc2 ->DETALLE ->OPERACIONES ->OPERACION as $OPERACION)
{
$id_operacion= $OPERACION->ID;
$estado_operacion=$OPERACION->ESTADO;
//Actualizo el estado de la operacion
if($estado_operacion==2)
{
mysql_query("UPDATE planes_periodos_x_anunciante SET pago_confirmado='S' WHERE ventas_nro_venta='$id_operacion'",$link);
}
}
  #4 (permalink)  
Antiguo 03/01/2012, 13:35
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: DineroMail con PHP

esta perfecto, te hago una pregunta:
vos configuraste en la cuenta del comerciante que cuando se efectue una transaccion
las notificaciones se envien a x pagina del sitio?


ademas tendrias que hacer un sistema de LOGS, es muy importante saber que pasa, mas que nada cuando se maneja platita!
es muy jodido este tema y otra cosa es que tendrias que guardar el estado sea cual sea
  #5 (permalink)  
Antiguo 03/01/2012, 13:40
 
Fecha de Ingreso: mayo-2003
Mensajes: 523
Antigüedad: 20 años, 11 meses
Puntos: 6
Respuesta: DineroMail con PHP

Si si hice eso patriarka. Configuré una URL para recibir las notificaciones. El código que pequé es el de dicha URL.
Inclusive por probar agregué una función mail en el código para darme cuenta cuándo DineroMail me envía notificaciones y pude descubrir que DineroMail realmente llama a mi URL. Pero el código deja de ejecutarse a partir de esta línea: $doc = new SimpleXMLElement($notificacion); de ahí para abajo no pasa más nada.
  #6 (permalink)  
Antiguo 03/01/2012, 13:59
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: DineroMail con PHP

un ejemplo:
Código PHP:
Ver original
  1. <?php
  2. SrvLog::logRequest($_REQUEST);
  3. if(isset($_REQUEST["Notificacion"])){
  4.     /*$notificacion = "";/*"<?xml version=\'1.0\' encoding=\'ISO-8859-1\'?><notificacion><tiponotificacion>1</tiponotificacion><operaciones><operacion><tipo>1</tipo><id>00000000128875139173</id></operacion></operaciones></notificacion>";*/
  5.  
  6.     $notificacion = $_REQUEST["Notificacion"];
  7.     $notificacion = str_replace("\'",'"',$notificacion);
  8.     $Notificacion = simplexml_load_string($notificacion);
  9.     SrvLog::logNotificacion($Notificacion);
  10.     $t_ids = array();
  11.     foreach($Notificacion->operaciones as $operacion) {
  12.         $id_operacion = $operacion->operacion->id;
  13.          if(DineroMail::isOperacionAcreditada($id_operacion)){
  14.             utils_SrvLog::logNotificacionSuccess($Notificacion);
  15.  
  16.             $sql_tid = "SELECT ID, USERID
  17.                        FROM `transaction_details`
  18.                        WHERE `TRANSACTIONID` = '$id_operacion'";
  19.             $res_tid = mysql_query($sql_tid);
  20.             if(mysql_num_rows($res_tid)>0){
  21.                 $row_tid = mysql_fetch_array($res_tid);
  22.                 $t_ids[]=$row_tid['ID']; //OBTENGO TODOS LOS ID DE TRANSACCION
  23.             }
  24.          }else{
  25.             utils_SrvLog::logNotificacionError($Notificacion);
  26.          }
  27.     }
  28.     $deal_quantity=0;
  29.  
  30.     if(count($t_ids)>0){
  31.         foreach ($t_ids as $tid) {
  32.                 $mensaje = 'La trasaccion fue un exito!.';
  33.                 /*
  34.                  * SETEO COMO EXITO LA TRANSACCION
  35.                  */
  36.                 $sql_transation="UPDATE `user`.`transaction_details` SET `ACK` = 'confirmada',
  37.                `CAPTURED` = '1' WHERE `transaction_details`.`ID` =".$tid;
  38.                 $res=mysql_query($sql_transation);
  39.     }}
  40. ?>
  #7 (permalink)  
Antiguo 03/01/2012, 14:09
 
Fecha de Ingreso: mayo-2003
Mensajes: 523
Antigüedad: 20 años, 11 meses
Puntos: 6
Respuesta: DineroMail con PHP

Muchas gracias por el ejemplo, voy a estudiarlo y cualquier cosa vuelvo a escribir.
  #8 (permalink)  
Antiguo 03/01/2012, 14:16
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: DineroMail con PHP

Cita:
Iniciado por Patriarka Ver Mensaje
un ejemplo:
Código PHP:
Ver original
  1. <?php
  2. SrvLog::logRequest($_REQUEST);
  3. if(isset($_REQUEST["Notificacion"])){
  4.     /*$notificacion = "";/*"<?xml version=\'1.0\' encoding=\'ISO-8859-1\'?><notificacion><tiponotificacion>1</tiponotificacion><operaciones><operacion><tipo>1</tipo><id>00000000128875139173</id></operacion></operaciones></notificacion>";*/
  5.  
  6.     $notificacion = $_REQUEST["Notificacion"];
  7.     $notificacion = str_replace("\'",'"',$notificacion);
  8.     $Notificacion = simplexml_load_string($notificacion);
  9.     SrvLog::logNotificacion($Notificacion);
  10.     $t_ids = array();
  11.     foreach($Notificacion->operaciones as $operacion) {
  12.         $id_operacion = $operacion->operacion->id;
  13.          if(DineroMail::isOperacionAcreditada($id_operacion)){
  14.             SrvLog::logNotificacionSuccess($Notificacion);
  15.  
  16.             $sql_tid = "SELECT ID, USERID
  17.                        FROM `transaction_details`
  18.                        WHERE `TRANSACTIONID` = '$id_operacion'";
  19.             $res_tid = mysql_query($sql_tid);
  20.             if(mysql_num_rows($res_tid)>0){
  21.                 $row_tid = mysql_fetch_array($res_tid);
  22.                 $t_ids[]=$row_tid['ID']; //OBTENGO TODOS LOS ID DE TRANSACCION
  23.             }
  24.          }else{
  25.             SrvLog::logNotificacionError($Notificacion);
  26.          }
  27.     }
  28.     $deal_quantity=0;
  29.  
  30.     if(count($t_ids)>0){
  31.         foreach ($t_ids as $tid) {
  32.                 $mensaje = 'La trasaccion fue un exito!.';
  33.                 /*
  34.                  * SETEO COMO EXITO LA TRANSACCION
  35.                  */
  36.                 $sql_transation="UPDATE `user`.`transaction_details` SET `ACK` = 'confirmada',
  37.                `CAPTURED` = '1' WHERE `transaction_details`.`ID` =".$tid;
  38.                 $res=mysql_query($sql_transation);
  39.     }}
  40. ?>

Etiquetas: dineromail
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 06:13.