function decodeParams($params) { if (!is_null($params)) { //Comprobamos si es un objeto. if (is_object($params)) { $params = get_object_vars($params); } foreach ($params as $key => $value) { if (!is_array($value) && !is_object($value)) { if (!is_numeric($value)) { $params[$key] = utf8_decode(base64_decode($value)); } else { $params[$key] = $value; } } else { $params[$key] = decodeParams($params[$key]); } } } return $params; }
protected function process($conn, $message) { //Decodificamos el mensaje. $msg = (array) json_decode($message, true); echo var_dump($msg) . PHP_EOL; //Comprobamos si existe el servicio solicitado. if (array_key_exists($msg['service'], $this->websocket_services)) { //Obtenemos el servicio. $service = $this->websocket_services[$msg['service']]; //Decodificamos los parámetros. if ($msg['encode']) { $params = decodeParams($msg['params']); } else { $params = $msg['params']; } //Comprobamos si el servicio requiere token de acceso. if (isset($service['token_required'])) { //Comprobamos si hay token de sessión en la petición if (array_key_exists("token", $msg)) { //decodificamos el token de sesión. $token = json_decode(base64_decode($msg['token'])); if (isset($service['require_user_id'])) { $this->resolveService($service, [$token->idUser], $conn); } else { $this->resolveService($service, $params, $conn); } } else { echo json_encode(array("error" => true, "data" => "Accesso no permitido")); } } else { $this->resolveService($service, $params, $conn); } } else { echo json_encode(array("error" => true, "data" => "Servicio no disponible")); } }
$service = filter_input(INPUT_POST, 'service', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); $token = filter_input(INPUT_POST, 'token', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); $encode = filter_input(INPUT_POST, 'encode', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); $params = $_REQUEST['params']; //Comprobamos si el servicio solicitado es HTTP_SERVICE. if (array_key_exists($service, $services)) { if ($services[$service]['token_required']) { //Comprobamos si el token de sesión está presente en la petición. if ($token) { //decodificamos el token de sesión. $token = json_decode(base64_decode($token)); if (!is_null($params)) { if (!is_array($params)) { $params = (array) json_decode($params, true); } $params = $encode ? decodeParams($params) : $params; } //Ejecutamos la acción del controlador $response = baseController::execute($services[$service]['controller'], $params); //Codificamos los datos de la respuesta. if ($encode) { encodeData($response["response_message"]['data']['msg']); } //Enviamos respuesta echo json_encode($response["response_message"]); } else { echo json_encode(array("error" => true, "data" => "Acceso no permitido")); } } } else { echo json_encode(array("error" => true, "data" => "Servicio no disponible"));