授权对接之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("授权已到期,请联系客服续费。");}

                

                //授权检测结束


}

}