api/app/controllers/UrlsController.php

240 lines
8.8 KiB
PHP
Raw Normal View History

2023-04-07 19:05:18 +08:00
<?php
/**
* Tiffany SMS API重构-接口类
* @author QZQ
*/
header("Content-Type:text/html; Charset=utf-8");
class UrlsController extends ControllerBase{
function initialize(){
parent::initialize();
}
2023-04-14 16:13:30 +08:00
/**
* 测试方法
* http://127.0.0.1/tiffany/api/urls/test?qaz=wsx
* http://weapp.wemediacn.net/d/tiffany/api/urls/test?qaz=wsx
*/
function testAction(){
//$url = "http://wxapp.wemediacn.com/smsoauth2_qa/api/urls/shorturl";
$url = "http://127.0.0.1/tiffany/api/urls/shorturl?qaz=wsx";
$post_arr = array();
$post_arr['appid'] = "0e355010-67b9-4aa6-a53f-c92c972094a7";
$post_arr['access_token'] = "9d21508a7531430c843cff8063dccb1c";
2023-04-14 16:33:29 +08:00
$post_arr['access_token'] = "ycq9t62einm7usfah1vk4z38djxp5gwl";
2023-04-14 16:13:30 +08:00
$post_arr['url'] = "https://www.baidu.com/";
$post_json = json_encode($post_arr);
$result = $this->__http_post_request($url, $post_json, true);
print_r($result); die;
}
2023-04-07 19:05:18 +08:00
/**
* 长链转短链Long URL shortening
* http://127.0.0.1/tiffany/api/urls/shorturl?qaz=wsx
2023-04-14 16:13:30 +08:00
* http://weapp.wemediacn.net/d/tiffany/api/urls/shorturl?qaz=wsx
2023-04-07 19:05:18 +08:00
*/
function shorturlAction(){
2023-04-14 16:13:30 +08:00
//如果是GET请求
if($this->request->isGet()){
//告知请求的资源不支持 http 方法“GET”。
$rs['Message'] = "请求的资源不支持 http 方法“GET”。";
}
//如果未获取到请求数据
elseif(empty(file_get_contents("php://input"))){
//告知用户"系统繁忙,请稍候再试"
$rs['errcode'] = -1;
$rs['errmsg'] = "系统繁忙,请稍候再试";
$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{
//准备获取所传appid、长链接和access_token
$rs['errmsg'] = "";
//如果未获取到所传appid
if(empty($request_arr['appid'])){
//告知用户"appid is empty;"
$rs['errmsg'].= "appid is empty;";
}
//如果未获取到所传长链接
if(empty($request_arr['url'])){
//告知用户"url is empty;"
$rs['errmsg'].= "url is empty;";
}
//如果未获取到所传access_token
if(empty($request_arr['access_token'])){
//告知用户"access_token is empty;"
$rs['errmsg'].= "access_token is empty;";
}
//如果以上判断未通过
if(!empty($rs['errmsg'])){
//告知用户"参数错误 error detail:".$rs['errmsg']
$rs['errmsg'] = "参数错误 error detail:".$rs['errmsg'];
$rs['errcode'] = 61451;
$rs['data'] = null;
}
//如果以上判断都通过
else{
//准备判断所传appid是否有效
$appid = $request_arr['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));
//获取当前时间及当天日期
$current_time = time();
$current_datetime = date("Y-m-d H:i:s", $current_time);
$current_date = date("Y-m-d", $current_time);
//获取上次请求日期所在日的请求次数
$today_req_times = $AppInfo->TodayReqTimes;
//获取接口请求次数限制
$day_max_req_times = $AppInfo->DayMaxReqTimes;
//如果上次请求日期是当天日期
if($last_req_date==$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 = $current_datetime;
//其他字段
$AppInfo->TodayReqTimes = $today_req_times;
$AppInfo->LastReqTime = $current_date;
//如果更新失败
if(!($AppInfo->save())){
//告知用户"系统繁忙,请稍候再试"
$rs['errmsg'] = "系统繁忙,请稍候再试";
$rs['errcode'] = -1;
$rs['data'] = null;
}
//如果更新成功
else{
//准备判断所传access_token是否有效
$access_token = $request_arr['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($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($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;
}
}
//如果以上判断都通过
if(empty($rs['errcode'])){
2023-04-14 17:02:59 +08:00
//设置生成长链接
2023-04-14 16:33:29 +08:00
$post_arr['urls'] = json_encode(array($request_arr['url']));
2023-04-14 17:02:59 +08:00
//设置生成TokenID
2023-04-14 16:33:29 +08:00
$post_arr['TokenID'] = "TH3UOn1Z4p7aJFS5q8eE6Kmt9xWQsocw";
//开发阶段转为使用测试TokenID
$post_arr['TokenID'] = "DAdlkwahhODpoiQPKwndkwaMDsdIN59P";
2023-04-14 17:02:59 +08:00
//准备生成短链接
2023-04-14 16:33:29 +08:00
$url = "https://weapp.wemediacn.com/we/surl/api/get";
2023-04-14 17:02:59 +08:00
//获取生成结果
$json = $this->__http_post_request($url, $post_arr);
//转换生成结果
$array = json_decode($json, true);
//如果生成失败
if(!(strpos(strtolower($json), "ok")!==false)){
//告知用户"系统繁忙,请稍候再试"
$rs['errmsg'] = "系统繁忙,请稍候再试";
$rs['errcode'] = -1;
$rs['data'] = null;
}
//如果生成成功
else{
//告知用户"ok"
$rs['errmsg'] = "ok";
$rs['errcode'] = 0;
$rs['data']['shorturl'] = $array['urls'][0]['surl'];
}
2023-04-14 16:13:30 +08:00
}
}
}
}
}
}
}
}
//输出结果
echo json_encode($rs, JSON_UNESCAPED_UNICODE);
2023-04-07 19:05:18 +08:00
}
}
?>