params = $this->request->param(); //传参 $this->base_url = 'https://' . $_SERVER['HTTP_HOST']; //当前域名 //获取头部信息 $header = $this->request->header(); //非登录模块操作需要验证用户信息 if ( $this->request->controller() != 'Login' && $this->request->controller() != 'Uploadfile' && $this->request->controller() != 'Wxpaynotify') { if($this->request->action()!='index' && $this->request->action()!='groupdetail' && $this->request->action()!='messageboard'){ //根据token获取用户信息 if (!isset($header['user-token']) || empty($header['user-token'])) { apiReturn(500,'token信息不存在'); } $user_token = $header['user-token']; $this->user_info = MemberModel::where('userToken',$user_token)->find(); if (!$this->user_info || empty($user_token)) { apiReturn(500,'token参数错误或登录超时'); } // 检查账号有效性 if (!MemberModel::where(['id' => $this->user_info['id'], 'is_delete' => 0])->value('id')) { apiReturn(500,'账号不存在或已被禁用'); } //登录是否超时(一周登录时间) $time_compa = abs(time() - $this->user_info['lastlogin_time']); if ($time_compa > 604800) { //清空token MemberModel::update(['user_token' => ''], ['id' => $this->user_info['id']]); apiReturn(500,'登录超时'); } //登录用户id $this->user_id = $this->user_info['id']; }else{ if (isset($header['user-token']) && !empty($header['user-token'])) { $user_token = $header['user-token']; $this->user_info = MemberModel::where('userToken',$user_token)->find(); if (!$this->user_info || empty($user_token)) { apiReturn(500,'token参数错误或登录超时'); } // 检查账号有效性 if (!MemberModel::where(['id' => $this->user_info['id'], 'is_delete' => 0])->value('id')) { apiReturn(500,'账号不存在或已被禁用'); } //登录是否超时(一周登录时间) $time_compa = abs(time() - $this->user_info['lastlogin_time']); if ($time_compa > 604800) { //清空token MemberModel::update(['user_token' => ''], ['id' => $this->user_info['id']]); apiReturn(500,'登录超时'); } //登录用户id $this->user_id = $this->user_info['id']; } } } } /** * 获取附件地址 */ public function getFileUrl($attactId = 0) { $url = $this->base_url . get_file_path($attactId); return $url; } /** * 产生随机字符串 * 产生一个指定长度的随机字符串,并返回给用户 * @access public * @param int $len 产生字符串的位数 * @return string */ function genNumberString($len = 6) { $chars = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ); $charsLen = count($chars) - 1; shuffle($chars); // 将数组打乱 $output = ""; for ($i = 0; $i < $len; $i++) { $output .= $chars[mt_rand(0, $charsLen)]; } return $output; } //非法字符判断 public function illegalcharacters($str) { $strarr = array( '"', '<', '>', '<>', '(', ')', '()', ',', ',', 'script', 'svg', 'alert', 'confirm', 'prompt', 'onload', 'onmouseover', 'onfocus', 'onerror', 'xss', ); if (in_array($str, $strarr)) { return true; } else { return false; } } //计算两个时间之前存在几个小时 public function hours_min($start_time, $end_time) { $sec = strtotime($end_time) - strtotime($start_time); $sec = round($sec / 60); $min = str_pad($sec % 60, 2, 0, STR_PAD_LEFT); $hours_min = floor($sec / 60); $min != 0 && $hours_min .= ':' . $min; return $hours_min; } public function encryptPhone($phone) { $maskedPhone = substr_replace($phone, '****', 3, 4); return $maskedPhone; } //更改时间显示 protected function format_date($time) { $t = time() - $time; $f = array( //'31536000'=>'年', //'2592000'=>'个月', //'604800'=>'星期', '86400' => '天', '3600' => '小时', '60' => '分钟', '1' => '秒' ); foreach ($f as $k => $v) { if (0 != $c = floor($t / (int)$k)) { return $c . $v; } } } /** * 生成用户token信息 * @param int uid 用户id * @param string secret 盐值信息 */ public function getToken($uid, $secret = 'bodybreakthrough'){ //将签名密钥拼接到签名字符串最后面 $str = $uid . $secret . time(); //通过md5算法为签名字符串生成一个md5签名,该签名就是我们要追加的sign参数值 return md5($str); } public function get_access_token() { $appid = 'wxd5a3c4538c00a549'; $secret = '6f3cd9ac49b8501f1db38e2f5f11bfd6'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $secret; $result = file_get_contents($url); $data = json_decode($result, true); if ($data['access_token']) { return $data['access_token']; } else { return $data['errmsg']; } } public function _requestPost($url, $data, $ssl = true) { //curl完成 $curl = curl_init(); //设置curl选项 curl_setopt($curl, CURLOPT_URL, $url); //URL $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4'; curl_setopt($curl, CURLOPT_USERAGENT, $user_agent); //user_agent,请求代理信息 curl_setopt($curl, CURLOPT_AUTOREFERER, true); //referer头,请求来源 curl_setopt($curl, CURLOPT_TIMEOUT, 30); //设置超时时间 //SSL相关 if ($ssl) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //禁用后cURL将终止从服务端进行验证 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); //检查服务器SSL证书中是否存在一个公用名(common name)。 } // 处理post相关选项 curl_setopt($curl, CURLOPT_POST, true); // 是否为POST请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 处理请求数据 // 处理响应结果 curl_setopt($curl, CURLOPT_HEADER, false); //是否处理响应头 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //curl_exec()是否返回响应结果 // 发出请求 $response = curl_exec($curl); if (false === $response) { echo '
', curl_error($curl), '
'; return false; } curl_close($curl); return $response; } /** * 判断微信图片 */ public function judge_wx_pic($id) { $headimg = AttachmentModel::where('id', $id)->value('path'); if (!strstr($headimg, 'http')) { $headimg = $this->getFileUrl($id); } return $headimg; } /** * 根据经纬度和半径计算出范围 * @param string $lat 纬度 * @param String $lng 经度 * @param float $radius 半径(单位米) * @return Array 范围数组 */ public function calcScope($lat, $lng, $radius) { $radius = $radius * 1000; $degree = (24901 * 1609) / 360.0; $dpmLat = 1 / $degree; $radiusLat = $dpmLat * $radius; $minLat = $lat - $radiusLat; // 最小纬度 $maxLat = $lat + $radiusLat; // 最大纬度 $mpdLng = $degree * cos($lat * (pi() / 180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng * $radius; $minLng = $lng - $radiusLng; // 最小经度 $maxLng = $lng + $radiusLng; // 最大经度 /** 返回范围数组 */ $scope = array( 'minLat' => $minLat, 'maxLat' => $maxLat, 'minLng' => $minLng, 'maxLng' => $maxLng ); return $scope; } /** * 计算两个经纬度之间的距离 */ function distance($lat1, $lon1, $lat2, $lon2) { $radius = 6378.137; $rad = floatval(M_PI / 180.0); $lat1 = floatval($lat1) * $rad; $lon1 = floatval($lon1) * $rad; $lat2 = floatval($lat2) * $rad; $lon2 = floatval($lon2) * $rad; $theta = $lon2 - $lon1; $dist = acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($theta)); if ($dist < 0) { $dist += M_PI; } return $dist = $dist * $radius; } /** * * @param $latitude 纬度 * @param $longitude 经度 * @param $raidus 半径范围(单位:米) * @return multitype:number */ public function getAround($latitude,$longitude,$raidus){ $PI = 3.14159265; $degree = (24901*1609)/360.0; $dpmLat = 1/$degree; $radiusLat = $dpmLat*$raidus; $minLat = $latitude - $radiusLat; $maxLat = $latitude + $radiusLat; $mpdLng = $degree*cos($latitude * ($PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng*$raidus; $minLng = $longitude - $radiusLng; $maxLng = $longitude + $radiusLng; return [ 'minLat'=>$minLat, 'maxLat'=>$maxLat, 'minLng'=>$minLng, 'maxLng'=>$maxLng ]; } //根据秒数转换时分秒 function secondsToHMS($seconds) { $hours = gmdate("H", $seconds); $minutes = gmdate("i", $seconds); $seconds = gmdate("s", $seconds); $hours = !empty(intval($hours))?$hours.'时':null; $minutes = !empty(intval($minutes))?$minutes.'分':null; $seconds = !empty(intval($seconds))?$seconds.'秒':null; return $hours.$minutes.$seconds; } }