自动授权对接实例之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系统的整合。用户下单获得授权码后,将授权码填写到系统中即可。
用户可以通过运维系统,自助修改授权域名,自助续费等操作。实时生效。