2023-04-07 19:05:18 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Tiffany SMS API重构-公共类
|
|
|
|
|
|
*/
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
|
|
class ControllerBase extends Phalcon\Mvc\Controller{
|
|
|
|
|
|
|
|
|
|
|
|
//公共助手
|
|
|
|
|
|
//public $_PublicHelper;
|
|
|
|
|
|
//日志助手
|
|
|
|
|
|
public $_LogObj;
|
2023-04-17 13:52:24 +08:00
|
|
|
|
//当前时间戳
|
|
|
|
|
|
public $current_time;
|
|
|
|
|
|
//当前时间
|
|
|
|
|
|
public $current_datetime;
|
|
|
|
|
|
//当天日期
|
|
|
|
|
|
public $current_date;
|
2023-04-07 19:05:18 +08:00
|
|
|
|
|
|
|
|
|
|
function initialize(){
|
|
|
|
|
|
//$this->_PublicHelper = new PublicHelper();
|
|
|
|
|
|
//$this->_LogObj = new LogClient();
|
|
|
|
|
|
//选择redis库(测试及开发为130,正式为30)
|
|
|
|
|
|
$this->redis->select(REDIS_DB_NUMBER);
|
2023-04-17 13:52:24 +08:00
|
|
|
|
//获取当前时间及当天日期
|
|
|
|
|
|
$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);
|
2023-04-07 19:05:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 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;
|
|
|
|
|
|
}
|
2023-04-10 12:49:07 +08:00
|
|
|
|
|
2023-04-07 19:05:18 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* curl post
|
|
|
|
|
|
*/
|
2023-04-10 12:49:07 +08:00
|
|
|
|
function __http_post_request($url, $data=null, $is_json=false){
|
2023-04-07 19:05:18 +08:00
|
|
|
|
$curl = curl_init();
|
|
|
|
|
|
curl_setopt($curl, CURLOPT_URL, $url);
|
|
|
|
|
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
|
|
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
2023-04-10 12:49:07 +08:00
|
|
|
|
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)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-04-07 19:05:18 +08:00
|
|
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
2023-04-10 12:49:07 +08:00
|
|
|
|
$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;
|
|
|
|
|
|
}
|
2023-04-07 19:05:18 +08:00
|
|
|
|
curl_close($curl);
|
2023-04-10 12:49:07 +08:00
|
|
|
|
return $res;
|
2023-04-07 19:05:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 跳转页面方法封装,针对后台跳转使用
|
|
|
|
|
|
*/
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-17 13:52:24 +08:00
|
|
|
|
/**
|
2023-04-17 14:12:35 +08:00
|
|
|
|
* 校验是否有收到请求数据
|
2023-04-17 13:52:24 +08:00
|
|
|
|
*/
|
|
|
|
|
|
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;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = array();
|
2023-04-17 13:52:24 +08:00
|
|
|
|
$rs['data']['request_arr'] = $request_arr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//返回结果
|
|
|
|
|
|
return $rs;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2023-04-17 14:12:35 +08:00
|
|
|
|
* 校验基本参数是否都不为空
|
2023-04-17 13:52:24 +08:00
|
|
|
|
*/
|
|
|
|
|
|
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;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = array();
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
//返回结果
|
|
|
|
|
|
return $rs;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2023-04-17 17:37:40 +08:00
|
|
|
|
* 校验所传appid是否有效
|
2023-04-17 13:52:24 +08:00
|
|
|
|
*/
|
2023-04-17 17:37:40 +08:00
|
|
|
|
function __check_appid($appid=""){
|
2023-04-17 13:52:24 +08:00
|
|
|
|
//查询接口信息
|
|
|
|
|
|
$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{
|
2023-04-17 17:37:40 +08:00
|
|
|
|
//告知用户"ok"
|
|
|
|
|
|
$rs['errmsg'] = "ok";
|
|
|
|
|
|
$rs['errcode'] = 0;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = array();
|
2023-04-17 17:37:40 +08:00
|
|
|
|
$rs['data']['AppInfo'] = $AppInfo;
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
//返回结果
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
2023-04-18 18:34:56 +08:00
|
|
|
|
//如果前access_token未过期
|
2023-04-18 16:23:29 +08:00
|
|
|
|
else{
|
|
|
|
|
|
//告知用户"ok"
|
|
|
|
|
|
$rs['errmsg'] = "ok";
|
|
|
|
|
|
$rs['errcode'] = 0;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = array();
|
|
|
|
|
|
$rs['data']['AccessToken'] = $AccessToken;
|
2023-04-18 16:23:29 +08:00
|
|
|
|
}
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
//如果所传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;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = null;
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
2023-04-18 16:23:29 +08:00
|
|
|
|
//如果现access_token未过期
|
|
|
|
|
|
else{
|
|
|
|
|
|
//告知用户"ok"
|
|
|
|
|
|
$rs['errmsg'] = "ok";
|
|
|
|
|
|
$rs['errcode'] = 0;
|
2023-04-18 18:34:56 +08:00
|
|
|
|
$rs['data'] = array();
|
|
|
|
|
|
$rs['data']['AccessToken'] = $AccessToken;
|
2023-04-18 16:23:29 +08:00
|
|
|
|
}
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-04-18 16:23:29 +08:00
|
|
|
|
//返回结果
|
|
|
|
|
|
return $rs;
|
2023-04-17 13:52:24 +08:00
|
|
|
|
}
|
2023-04-18 16:23:29 +08:00
|
|
|
|
|
2023-04-07 19:05:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
?>
|