PayToolApi.php
```php
<?php
/*
* @Author: 无名 577813810@qq.com
* @Date: 2023-02-10 00:40:14
* @LastEditors: 无名 577813810@qq.com
* @LastEditTime: 2023-03-06 05:23:36
*/
class PayToolApi
{
//Api版本号,勿改
protected $systemApiVer = 3;
protected $pcTitle = '';
protected $panDownloadUrl = '';
protected $adsArr = [];
public function index()
{
// apiVer 版本1 参数 ver、guid、ip、system
// 1.0.4.8 增加参数getVerType获取后续更新版本类型,0为稳定版,1为测试版
$ver = isset($_REQUEST['ver']) ? $_REQUEST['ver'] : ''; //版本号,软件版本号
$guid = isset($_REQUEST['guid']) ? $_REQUEST['guid'] : ''; //guid,每一个软件启动的唯一标识
$ip = isset($_REQUEST['ip']) ? $_REQUEST['ip'] : ''; //ip,用户电脑的外网IP
$apiVer = isset($_REQUEST['apiVer']) ? $_REQUEST['apiVer'] : ''; //软件内部请求的Api版本号
$system = isset($_REQUEST['system']) ? $_REQUEST['system'] : ''; //用户电脑操作系统名称,如:Microsoft Windows 11 专业版
if (empty($ver)) {
$this->returnData(1, '参数不完整[ver]');
}
if (empty($guid)) {
$this->returnData(2, '参数不完整[guid]');
}
if (empty($ip)) {
$this->returnData(3, '参数不完整[ip]');
}
if (empty($apiVer)) {
$this->returnData(4, '参数不完整[apiVer]');
}
if (empty($system)) {
$this->returnData(5, '参数不完整[system]');
}
/*
自己写代码实现某些功能
可通过IP、GUID、Ver配合Redis实现下列统计方案(一般连接平台后一分钟请求一次该接口)
1、获取软件总运行数(GUID)
2、获取某一个版本的总运行数(Ver、Guid)
3、获取某一个IP下运行数(IP、GUID)
等等......
*/
// pcTitle参数:设置软件左上角标题
$this->pcTitle = '无名支付工具';
/*
1.0.4.18 增加功能
【panDownloadUrl参数:设置软件内置网盘跳转地址】
自定义跳转下载网盘地址是除了在线更新默认走我的网盘下载之外,一切将跳转到pan.4ee.ee的情况(包括在线更新错误弹出的提示)均跳转为您设置的自定义下载地址
网盘可使用支持Webdav的程序或者使用Alist进行实时同步我的网盘
建议使用Alist,Alist支持隐藏特定文件夹,可以同步之后隐藏“3合1工具站长必看内容”文件夹
[推荐]Alist V3中文文档:https://alist.nn.ci/zh/
pan.4ee.ee网盘是采用Alist V3版本
WebDav链接:http://pan.4ee.ee/dav/
账号&密码:PayTool
*/
$this->panDownloadUrl = 'http://pan.4ee.ee/Ypay';
/*
添加广告位
广告位大小:200 × 75 即比例为8:3
软件内置广告位上限6个,如果添加超过6个,则会按照顺序计算获取出符合条件的前6个展示
*/
// 这个广告因为时间格式不对,则时间会被解析为1970-01-01 00:00:00
$this->addAd('这里是广告开始时间', '这里是广告到期时间', '这里是图片链接', '这里是点击打开的链接');
// 广告添加的正确例子,时间也可以填写到日结束(例如:2024-01-01),这样就默认指当天0点0分0秒
$this->addAd('2023-2-10 00:00:00', '2024-01-01 00:00:00', 'https://i.postimg.cc/XJzmP80F/QQ-20230210030807.png', 'http://pan.4ee.ee/Ypay');
$return_data = [
'title' => $this->pcTitle, //软件左上角标题
'panDownloadUrl' => $this->panDownloadUrl, //自定义跳转网盘地址
'systemApiVer' => $this->systemApiVer, //系统Api版本号
'ads' => $this->adsArr, //广告位信息
];
// 返回数据
$this->returnData(0, '', $return_data);
}
// 返回数据 json格式
private function returnData($code = 0, $msg = '', $dataArr = [])
{
$retrun_data = [
'code' => $code, // 状态码 0为正常
'msg' => $msg, //返回信息、错误信息等
'timemap' => time(),
];
if (!empty($dataArr) && is_array($dataArr)) {
foreach ($dataArr as $k => $v) {
$retrun_data[$k] = $v;
}
}
// 状态码为0则生成签名
if ($code == 0) {
$retrun_data['sign'] = $this->getSign($retrun_data);
}
exit(json_encode($retrun_data));
}
// 添加广告
private function addAd($startTime = '', $endTime = '', $picUrl = '#', $openUrl = '#')
{
$timemap = time();
$startTime = empty($startTime) ? date('Y-m-d H:i:s', time()) : $startTime;
$endTime = empty($endTime) ? date('Y-m-d H:i:s', time()) : $endTime;
$tempStartTime = strtotime($startTime);
$tempEndTime = strtotime($endTime);
$adArr = [
'stratTime' => $tempStartTime ? $tempStartTime : 0,
'endTime' => $tempEndTime ? $tempEndTime : 0,
'picUrl' => $picUrl,
'openUrl' => $openUrl,
];
// 过滤广告输出,将未开始或者已过期的广告不输出,能减少接口输出耗时
// PS:这个判断可以取消掉,这样子就交给软件去处理,软件内置处理广告有效期显示功能
if($adArr['stratTime'] <= $timemap && $adArr['endTime'] > $timemap){
array_push($this->adsArr, $adArr);
}
}
// 生成签名
private function getSign($data = [])
{
switch ($this->systemApiVer) {
case '1':
case '2':
$temp = $data['code'] . $data['msg'] . $data['title'] . $data['systemApiVer'] . count($data['ads']);
break;
case '3':
$temp = $data['code'] . $data['msg'] . $data['title'] . $data['panDownloadUrl'] . $data['systemApiVer'] . count($data['ads']);
break;
default:
$temp = $data['code'] . $data['msg'] . $data['title'] . $data['systemApiVer'] . count($data['ads']);
}
foreach ($data['ads'] as $k => $v) {
$temp .= $v['stratTime'] . $v['endTime'] . $v['picUrl'] . $v['openUrl'];
}
$temp .= $data['timemap'];
$sign = md5($temp);
return $sign;
}
}
$PayToolApi = new PayToolApi();
echo $PayToolApi->index();
```