自动授权对接实例之Thinkphp5.0
最后更新时间:2020年05月14日21:50:47
今天我们来讲解一下系统如何对接Thinkphp5.0 。
要对接Thinkphp5.0,首先我们需要了解一下TP5.0的目录结构。
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
..............
.....................此处省略其它目录结构
我们看到,在项目的目录下,红色字体标出的,一个是公共函数页一个是数据库配置页,我们将授权码变量放在数据库配置页,让用户自己填写获得的授权码。
如果您的程序是在线安装方式,可以在数据库填写表单那里,增加一个表单项,用来让用户填写授权码。如果是非安装方式,则直接让用户到数据库配置中手动填写。
一、打开database.php,增加一个配置,方便全局调用,用来存放用户的授权码。
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'demo',
// 用户名
'username' => 'root',
// 密码
'password' => 'demo',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
//在这里填写您的授权码
'SYS_KEY' => '0000000',
........此处省略其它代骊
二、打开common.php,增加一个公共函数,这里我们封装一个CRUL功能,用来读取API接口内容。
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用公共文件
//封装CURL功能
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 100);
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;
}
红色代码部分为我们定义的函数。
做好了前面的准备工作,我们就可以开始为程序做授权验证逻辑代码编写了。
三、找到需要验证的模块的公共文件,放在公共文件中,可以全局调用,如果您想单独某个页面调用授权验证,可以在相关页面写上授权验证代码即可。
比如我们的系统后台的模块是Admin,需要为整个后台做一个授权验证。我们在后台模块的公共控制器的_initialize方法中写上授权验证代码,_initialize是一个构造函数,可以在页面执行时,自动执行该函数内的内容。
如果你的后台没有公共控制器或公共控制器中没有_initialize构造函数,自行增加就行。具体操作见TP官网教程。
public function _initialize() {
//授权验证代码开始。
$SYS_KEY = config('database.SYS_KEY');//读取前面在数据库配置文件中定义的授权码,赋值给变量$SYS_KEY
//授权验证API请求地址,请更换成你自己的网址。
$authchk="http://ys.ew80yun.com/index.php/Api/Auth/?authid=".$SYS_KEY;
//读取当前使用的域名
$myurl=$_SERVER[SERVER_NAME];
//用封装的httGet函数读取API数据。
$Authdata=httpGet($authchk);
//将读取到的JSON转成数据
$Authdata=json_decode($Authdata,true);
//以下为授权验证逻辑
//请根据自己的需求进行处理。
if(!$Authdata){echo "无法链接到授权服务器!";exit;}//当授权API地址无法访问,返回为NULL,则提示无法链接到授权服务器。
if(count($Authdata)<2){echo "授权错误!请核对您的授权码是否存在!";exit;}//通过判断数组数量是否超过2位,决定是否是有效的授权数据
if($Authdata['authid'] != $SYS_KEY){echo "您的授权码错误!";exit;}//对比判断授权码是否正确
if($Authdata['url']!=$myurl){echo "授权域名不匹配!";exit;}//对比判断域名是否正确
if($Authdata['edate']<$Authdata['mytime']){echo "授权到期,请联系客服续费!"; exit;}//对比判断授权是否到期
}
通过以上操作,就完成了对TP5.0系统的整合。用户下单获得授权码后,将授权码填写到系统中即可。
用户可以通过运维系统,自助修改授权域名,自助续费等操作。实时生效。