_PublicHelper = new PublicHelper(); //$this->_LogObj = new LogClient(); //选择redis库(测试及开发为130,正式为30) $this->redis->select(REDIS_DB_NUMBER); //获取当前时间及当天日期 $this->current_time = time(); $this->current_datetime = date("Y-m-d H:i:s", $this->current_time); $this->current_date = date("Y-m-d", $this->current_time); } /** * curl get */ function __https_request($url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_SSLVERSION, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); if (curl_errno($curl)) { return 'ERROR ' . curl_error($curl); } curl_close($curl); return $data; } /** * curl post */ function __http_post_request($url, $data=null, $is_json=false){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); if(!empty($data)){ if($is_json && is_array($data)){ $data = json_encode($data); } curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //发送JSON数据 if($is_json){ curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Content-Length:'.strlen($data))); } } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($curl); $errorno = curl_errno($curl); if($errorno){ $error = array(); $error = array('errorno'=>false, 'errmsg'=>$errorno, 'msg'=>curl_error($curl), 'info'=>curl_getinfo($curl)); return $error; } curl_close($curl); return $res; } /** * 跳转页面方法封装,针对后台跳转使用 */ function __response_redirect($url=""){ header("Location: $url"); exit; } /** * 获取客户ip */ function __get_client_ip(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $cip = $_SERVER["HTTP_CLIENT_IP"]; } elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){ $cip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } elseif(!empty($_SERVER["REMOTE_ADDR"])){ $cip = $_SERVER["REMOTE_ADDR"]; } else{ $cip = "UNKNOWN"; } return $cip; } /** * 清除html标签 */ function __delhtml($str){ $str = trim($str); $str = str_replace(array('"', "'"), array("", ""), $str); //开始 $st = -1; //结束 $et = -1; $stmp = array(); $stmp[] = " "; $len = strlen($str); for($i=0; $i<$len; $i++){ $ss = substr($str, $i, 1); //ord("<")==60 if(ord($ss)==60){ $st = $i; } //ord(">")==62 if(ord($ss)==62){ $et = $i; if($st!=-1){ $stmp [] = substr($str, $st, $et-$st+1); } } } $str = str_replace($stmp, "", $str); return $str; } /** * 转换xml为数组 */ function __change_xml_to_array($xmlfile){ $ob = simplexml_load_string($xmlfile, 'SimpleXMLElement', LIBXML_NOCDATA); $json = json_encode($ob); $configData = json_decode($json, true); return $configData; } /** * 随机生成字符串 */ function _get_act_code($digit=32){ $str = 'abcdefghijklmnopqrstuvwxyz0123456789'; $code = substr(str_shuffle($str), 0, $digit); return $code; } /** * 校验是否有收到请求数据 */ function __check_request_arr(){ //如果未获取到请求数据 if(empty(file_get_contents("php://input"))){ //告知用户"系统繁忙,请稍候再试" $rs['errmsg'] = "系统繁忙,请稍候再试"; $rs['errcode'] = -1; $rs['data'] = null; } //如果有获取到请求数据 else{ //准备判断请求数据整体是否为空 $request_arr = json_decode(file_get_contents("php://input"), true); //如果请求数据整体为空 if(empty($request_arr)){ //告知用户"系统繁忙,请稍候再试" $rs['errmsg'] = "系统繁忙,请稍候再试"; $rs['errcode'] = -1; $rs['data'] = null; } //如果请求数据整体不为空 else{ //告知用户"ok" $rs['errmsg'] = "ok"; $rs['errcode'] = 0; $rs['data']['request_arr'] = $request_arr; } } //返回结果 return $rs; } /** * 校验基本参数是否都不为空 */ function __check_params_arr($request_arr=array(), $params_arr=array()){ //准备校验基本参数 $rs['errmsg'] = ""; //循环需判断的参数字段 foreach($params_arr as $param_name){ //如果未获取到appid if(empty($request_arr[$param_name])){ //告知用户$param_name." is empty;" $rs['errmsg'].= $param_name." is empty;"; } } //如果以上判断未通过 if(!empty($rs['errmsg'])){ //告知用户"参数错误 error detail:".$rs['errmsg'] $rs['errmsg'] = "参数错误 error detail:".$rs['errmsg']; $rs['errcode'] = 61451; $rs['data'] = null; } //如果以上判断都通过 else{ //告知用户"ok" $rs['errmsg'] = "ok"; $rs['errcode'] = 0; $rs['data'] = null; } //返回结果 return $rs; } /** * 更新接口请求次数 */ function __update_app_info($appid=""){ //查询接口信息 $AppInfo = AppInfo::findFirst("AppId = '$appid' AND Enable = 0"); //如果未查询到接口信息 if(empty($AppInfo)){ //告知用户"找不到app配置信息,appid无效,err detail:找不到app配置信息" $rs['errmsg'] = "找不到app配置信息,appid无效,err detail:找不到app配置信息"; $rs['errcode'] = 40036; $rs['data'] = null; } //如果有查询到接口信息 else{ //获取上次请求日期 $last_req_time = $AppInfo->LastReqTime; $last_req_date = date("Y-m-d", strtotime($last_req_time)); //获取上次请求日期所在日的请求次数 $today_req_times = $AppInfo->TodayReqTimes; //获取接口请求次数限制 $day_max_req_times = $AppInfo->DayMaxReqTimes; //如果上次请求日期是当天日期 if($last_req_date==$this->current_date){ //如果当天请求次数已达到接口请求次数限制 if($today_req_times>=$day_max_req_times){ //告知用户"request today reached the request limit,err detail:超过请求上限限制" $rs['errmsg'] = "request today reached the request limit,err detail:超过请求上限限制"; $rs['errcode'] = 80102; $rs['data'] = null; } //如果当天请求次数尚未达到接口请求次数限制 else{ //当天请求次数加一 $today_req_times = $today_req_times+1; } } //如果上次请求日期不是当天日期 else{ //如果接口请求次数限制不大于0 if($day_max_req_times<=0){ //告知用户"request today reached the request limit,err detail:超过请求上限限制" $rs['errmsg'] = "request today reached the request limit,err detail:超过请求上限限制"; $rs['errcode'] = 80102; $rs['data'] = null; } //如果接口请求次数限制大于0 else{ //初始当天请求次数 $today_req_times = 1; } } //如果以上判断都通过 if(empty($rs['errcode'])){ //准备更新当天请求次数 $AppInfo->LastModifiedTime = $this->current_datetime; //其他字段 $AppInfo->TodayReqTimes = $today_req_times; $AppInfo->LastReqTime = $this->current_date; //如果更新失败 if(!($AppInfo->save())){ //告知用户"系统繁忙,请稍候再试" $rs['errmsg'] = "系统繁忙,请稍候再试"; $rs['errcode'] = -1; $rs['data'] = null; } //如果更新成功 else{ //告知用户"ok" $rs['errmsg'] = "ok"; $rs['errcode'] = 0; $rs['data']['AppInfo'] = $AppInfo; } } } //返回结果 return $rs; } /** * 校验所传access_token是否有效 */ function __check_access_token($appid="", $access_token=""){ //查询接口信息 $AccessToken = AccessToken::findFirst("AppId = '$appid' AND (AccessToken = '$access_token' OR PrevAccessToken = '$access_token')"); //如果未查询到接口信息 if(empty($AccessToken)){ //告知用户"accesstoken 不正确,err detail:找不到accesstoken信息" $rs['errmsg'] = "accesstoken 不正确,err detail:找不到accesstoken信息"; $rs['errcode'] = 40039; $rs['data'] = null; } //如果有查询到接口信息 else{ //获取现access_token到期时间 $ExpireTime = $AccessToken->ExpireTime; //获取前access_token到期时间 $PrevExpireTime = date("Y-m-d H:i:s", strtotime($AccessToken->ExpireTime)-14400+600); //如果所传access_token匹配前access_token if($access_token==$AccessToken->PrevAccessToken){ //如果前access_token已过期 //注意: //原代码逻辑中前access_token似乎也按现access_token的到期时间算 //此处先遵循文档,按照现access_token生成时间后10分钟算到期时间 if($this->current_datetime>$PrevExpireTime){ //告知用户"access_token is expired,err detail:accesstoken 已过期" $rs['errmsg'] = "access_token is expired,err detail:accesstoken 已过期"; $rs['errcode'] = 80105; $rs['data'] = null; } } //如果所传access_token匹配现access_token else{ //如果现access_token已过期 if($this->current_datetime>$ExpireTime){ //告知用户"access_token is expired,err detail:accesstoken 已过期" $rs['errmsg'] = "access_token is expired,err detail:accesstoken 已过期"; $rs['errcode'] = 80105; $rs['data']['AccessToken'] = $AccessToken; } } } } } ?>