授权对接之Thinkphp3.2.3
最后更新时间:2020年05月14日21:50:31
本教程合适Thinkphp3.2.3
第一步,打开数据库配置页,增加一个变量用来存放授权码。
如果您的程序首次运行是需要安装的,可以在安装页数据库信息填写位置加一个授权码填写的表单,并随数据库配置一起保存到数据库配置页。
//*************************************数据库设置*************************************
'DB_TYPE' => 'mysqli', // 数据库类型
'DB_HOST' => '127.0.0.1', // 服务器地址
'DB_NAME' => 'test', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => 'root', // 密码
'DB_PORT' => 3306, // 端口
'DB_PREFIX' => 'my_', // 数据库表前缀
'DB_CHARSET' => 'UTF8',// 数据库字符集
'SYS_KEY' =>'XXXXXXXXX', //授权序列号
第二步,在公共函数页,加一个获取远程API请求的函数。
打开你项目目录下的 Common/Common/function.php,增加一个httGet函数
//封装CURL功能
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
第三步,调用API,进行授权逻辑判断。
在需要授权的控制器方法中,加入授权代码。如果需要整个模块授权,可以放在模块的公页控制器页。
比如你的后台为Admin模块,需要整个后台授权验证。可以在Admin模块的控制器中建立一个公共的控制器,如BaseController.class.php,然后让其它控制器继承这个公共控制器即可。
附BaseController.class.php代码。
<?php
namespace Admin\Controller;
use Think\Controller;
class BaseController extends Controller {
public function _initialize() {
//授权验证代码开始。
//授权验证API请求地址,请更换成你自己的网址。
$authchk="http://ys.ew80yun.com/index.php/Api/Auth/?authid=".C('SYS_KEY');
//获取当前客户访问的网址
$myurl="$_SERVER[SERVER_NAME]";
//用封装的httGet函数读取API数据。
$Authdata=httpGet($authchk);
if($Authdata==""){$this->error("对不起,无法链接到远程授权服务器");}
//将获取的JSON数据转换成数组用来进行授权逻辑判断
$Authdata=json_decode($Authdata,true);
if($Authdata['authid']!=C('SYS_KEY'))
{$this->error("您的授权码错误!");}
if($Authdata['url']!=$myurl)
{$this->error("您的授权域名不匹配,请检查您的域名是否已授权!");}
if($Authdata['edate']<$Authdata['mytime']){$this->error("授权已到期,请联系客服续费。");}
//授权检测结束
}
}