api/app/controllers/ControllerBase.php
2023-04-19 16:38:44 +08:00

315 lines
8.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Tiffany SMS API重构-公共类
*/
declare(strict_types=1);
class ControllerBase extends Phalcon\Mvc\Controller{
//公共助手
//public $_PublicHelper;
//日志助手
public $_LogObj;
//当前时间戳
public $current_time;
//当前时间
public $current_datetime;
//当天日期
public $current_date;
function initialize(){
//$this->_PublicHelper = new PublicHelper();
//如果不是本地环境
if($_SERVER['HTTP_HOST']!="127.0.0.1"){
$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[] = "&nbsp;";
$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 __check_request_arr(){
/**/
if($_SERVER['HTTP_HOST']!="127.0.0.1"){
$this->_LogObj->LogWrite(TIFFANY_API_CHECK_LOG, file_get_contents("php://input"));
}
/**/
//接收请求数据
$request_json = file_get_contents("php://input");
$request_json = !empty($request_json)?$request_json:$this->request->getPost();
//如果未获取到请求数据
if(empty($request_json)){
//告知用户"系统繁忙,请稍候再试"
$rs['errmsg'] = "系统繁忙,请稍候再试";
$rs['errcode'] = -1;
$rs['data'] = null;
}
//如果有获取到请求数据
else{
//准备判断请求数据整体是否为空
$request_arr = json_decode($request_json, true);
//如果请求数据整体为空
if(empty($request_arr)){
//告知用户"系统繁忙,请稍候再试"
$rs['errmsg'] = "系统繁忙,请稍候再试";
$rs['errcode'] = -1;
$rs['data'] = null;
}
//如果请求数据整体不为空
else{
//告知用户"ok"
$rs['errmsg'] = "ok";
$rs['errcode'] = 0;
$rs['data'] = array();
$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'] = array();
}
//返回结果
return $rs;
}
/**
* 校验所传appid是否有效
*/
function __check_appid($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{
//告知用户"ok"
$rs['errmsg'] = "ok";
$rs['errcode'] = 0;
$rs['data'] = array();
$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未过期
else{
//告知用户"ok"
$rs['errmsg'] = "ok";
$rs['errcode'] = 0;
$rs['data'] = array();
$rs['data']['AccessToken'] = $AccessToken;
}
}
//如果所传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'] = null;
}
//如果现access_token未过期
else{
//告知用户"ok"
$rs['errmsg'] = "ok";
$rs['errcode'] = 0;
$rs['data'] = array();
$rs['data']['AccessToken'] = $AccessToken;
}
}
}
//返回结果
return $rs;
}
}
?>