ejecutar funcion php cada determinado tiempo

publicado por: Anonymous

Intento consumir el servicio de una API hasta el momento mi PHP luce así:

do {                
      $estadoResponse = CobrosController::paymentStateRequest($channel, $messageId, $clientId, $idTransaccion);//consulta estado de pago.
      $consultaCobro = json_decode($estadoResponse, true);
      $array2 = $consultaCobro['ResponseMessage']['ResponseBody']['any']['getStatusPaymentRS'];
      $respuestaStatus = $array2['status'];//se posiciona en el status

    } while ($respuestaStatus == '33');

ahí estaría ejecutando el consumo del API y esperando que la respuesta sea un status ’35’, este ciclo se cumple correctamente aunque lo que requiero esencialmente es que este proceso sea realizado solo cada 25 segundos, o hasta que el status cambie sea el requerido, este método realiza la petición:

public static function paymentStateRequest($channel, $messageId, $clientId, $idTransaccion) {
    $host = "url de la pagina del servicio";
    $servicePath = "/payments/v1/-services-paymentservice-getstatuspayment";
    $body = CobrosController::getBodyPaymentStateRequest($channel, $messageId, $clientId, $idTransaccion);//metodo que arma el cuerpo de la petición consulta
    $response = ApiNequi::makeSignedRequest($host, $servicePath, 'POST', $body); // metodo que envia la peticion con el formato requerido

    if (json_decode($response) == null) 
    {
      return $response;
    }
    else
    {
      $cobroResponse = json_decode($response, true);//decodifica la respuesta que envía la petición a la API
      $array2 = $consultaCobro['ResponseMessage']['ResponseBody']['any']['getStatusPaymentRS'];
      $respuestaStatus = $array2['status'];

 if($respuestaStatus == '35'){

        return $respuestaStatus;
      }
  }

si el valor es 33 debe seguir ejecutando esta función hasta que retorne 35, estos valores son enviados a un controlador responseController (), quien los compara y creería es donde debo utilizar un js que realice la consulta y decodifique la respuesta para verificar el numero que recibe, responseController() luce así:

public function responseController(){

    $idTransaccion ='123123123';
    $consulta = CobrosController::paymentStateRequest($idTransaccion);

    if($consulta){
      $status = $consulta['status'];

      if($status == '35'){
        return "success";
      }else{
            return "error";// en este caso es donde si es distinto a 35 debe realizar nuevamente el proceso al metodo
          }
        }
      }

solución

la solución correcta es ejecutando el setTimeout() desde un ajax y envíando los datos mediante un controlador php que conecta desde el client al servidor, como sugieriern previamente:

globalTransaccion = "-1";//variable global
c=1;//variable para conteo

$(document).ready(function()
{   
    if (globalTransaccion != "-1")
       queryNotificationConsulta();//funcion para iniciar la función cuando la variable global cambia su valor
}); 

luego creo el metodo que hará el proceso de verificación:

    function temporizadorFuncion()
{
  var i;        
  c++;
  alert("Entrando a Consultar estado :" + c);

  $.ajax({            
    url: "./controllers/consultaEstado.php", //control al que envío parametros y devuelve el valor solicitado
    type: 'POST',
    data: "&idDePeticion="+idDePeticion, //dato solicitado para hacer la consulta
    dataType:"html", // tipo de dato que retorna

  }).done(function(data) { //al completar la petición

        alert(data); 
        var json = JSON.parse(data);
        status  = json.status;

        if(status == "1")
        {
           alert("Transaccion Exitosa");
           globalTransaccion = "-1";
        }
        else
        {
           if(status == "2") // Status es 33 en espera de pago y debe volver a consulta en 25s
           {
                   setTimeout('temporizadorFuncion()',25000);
                   console.log("Consultando...");
           }    
           else
            alert("Error en CODE :" + status ); 
        }
  }).fail(function(data) { // si falla la petición
     alert("Error Alert Data: "+ data); 
  });
}

archivo PHP que recibirá los datos enviados desde ajax a mi controlador (consultaEstado.php):

$idPeticion=$_POST["idPeticion"];//variable enviada desde el metodo para la consulta

$control= new ControllerPeticion();//clase de mi controlador que instnacio
$result = $control->StateController($idPeticion); // metodo a quien envío el parametro para la ejecución 

echo '{"status":"'.$result.'"}'; ] // response que retorna desde la petición enviada por medio de *echo*
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *