智简魔方文档

图形验证码插件开发

位置

插件放在 public/plugins/captcha/ 目录下

目录结构

public/plugins/captcha/tp_captcha
|--- controller(控制器目录,实现接口)
|--- TpCaptcha.php(插件主文件)
|--- config.php(配置项客户配置项,在插件设置中显示)
|--- route.php(路由文件)

开发流程

以thinkphp图形验证码为例:

创建图形验证码插件目录 public/plugins/captcha/tp_captcha/

①目录名以小写字母+下划线形式,必须以字母开头,如tp_captcha;

创建入口文件:TpCaptcha.php

命名空间namespace captcha\tp_captcha(控制器下命名空间对应相应目录即可,其它同理);

②以目录名大驼峰+.php,创建在插件根目录下,如tp_captcha\TpCaptcha.php;

③文件中需要定义info属性,示例:

# 插件基本信息
public $info = array(
    'name'        => 'TpCaptcha', //插件英文名,作为插件唯一标识,改成你的插件英文就行了
    'title'       => 'thinkphp图形验证码', //插件名称
    'description' => 'thinkphp图形验证码', //插件描述
    'author'      => '智简魔方',  //开发者
    'version'     => '1.0',      // 版本号
);

④必须实现install()安装以及uninstall()卸载方法

⑤获取前台验证码,需实现方法:插件名+Describe,如TpCaptchaDescribe(),返回html;

⑥获取后台验证码,需实现方法:插件名+DescribeAdmin,如TpCaptchaDescribeAdmin(),返回html;

验证码输出方法返回值

方法类型说明
TpCaptchaDescribeHTML前台验证码内容
TpCaptchaDescribeAdminHTML后台验证码内容

⑦需实现验证方法:插件名+Verify,如TpCaptchaVerify($param),系统会传递默认参数至此方法,参数为⑨中验证成功后传递给系统js方法captchaCheckSuccsss()。

参数

参数类型必填说明
captchastring验证码
tokenstring唯一识别码

参数示例

$param = [

     "captcha" => 'test', // 验证码

     "token"   => 'adfhaksdf', // 唯一识别码

];

返回值

字段类型说明
statusinteger200成功,400失败
msgstring消息

⑧在⑤和⑥中,如果系统未加载js,可设置定时操作;

⑨验证成功或失败后可调用系统js:

captchaCheckSuccsss(bol,captcha,token,login)

参数

参数类型必填说明
bolbool是否成功
captchastring验证码
tokenstring唯一识别码
loginbool后台是否直接登录

⑩取消系统弹框:

captchaCheckCancel()

确定是否需要后台配置文件,如果需要,在接口根目录下加上config.php,示例

<?php
/**
 * @desc 插件后台配置
 * @author wyh
 * @version 1.0
 * @time 2022-05-27
 */
return [
    'module_name'            => [    # 在后台插件配置表单中的键名(统一规范:小写+下划线),会是config[module_name]
        'title' => '名称',            # 表单的label标题
        'type'  => 'text',           # 表单的类型:text文本,password密码,checkbox复选框,select下拉,radio单选,textarea文本区域,tip提示
        'value' => 'thinkphp图形验证',     # 表单的默认值
        'tip'   => 'friendly name',  # 表单的帮助提示
        'size'  => 200,               # 输入框长度(当type类型为text,password,textarea,tip时,可传入此键)
    ],
    'captcha_width'                 => [
        'title' => '验证码宽度',
        'type'  => 'text',
        'value' => 250,
        'tip'   => '',
        'size'  => 200,
    ],
    'captcha_height'                 => [
        'title' => '验证码高度',
        'type'  => 'text',
        'value' => 61,
        'tip'   => '',
        'size'  => 200,
    ],
    'captcha_length'                 => [
        'title' => '验证码长度',
        'type'  => 'text',
        'value' => 4,
        'tip'   => '',
        'size'  => 200,
    ],
    /*'code_set'   => [
        'title' => '验证码字符集',
        'type'  => 'text',
        'value' => '1234567890',
        'tip'   => '',
        'size'  => 200,
    ],*/

];

外部访问

创建插件后台控制器 tp_captcha\controller\IndexController.php

①命名空间captcha\tp_captcha\controller;

②继承后基类控制器app\home\controller\BaseController;

③实现接口,如 public function refresh(),系统默认访问此接口的 URL 为:

/captcha/tp_captcha/index/refresh

地址格式为 /captcha/插件/控制器/方法

④自定义路由,创建route.php文件:

<?php
/**
 * 插件自定义路由,此文档作为范例,注意不要和系统路由产生冲突
 * 说明:官方默认路由需要登录后才能访问,若需要免登录访问,需要自定义路由.
 * 默认路由,后台:/{DIR_ADMIN}/addon?_plugin=demo_style&_controller=admin_index&_action=addhelp;
 * 前台:/console/addon?_plugin=demo_style&_controller=admin_index&_action=addhelp
 * @author wyh
 * @time 2022-06-02
 */
use think\facade\Route;

# 不需要登录
Route::get('country1', 'home/common/countryList');

⑤跨域设置

$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
Route::get('country4', 'home/common/countryList')
    ->allowCrossDomain([
        'Access-Control-Allow-Origin'        => $origin,
        'Access-Control-Allow-Credentials'   => 'true',
        'Access-Control-Max-Age'             => 600,
    ]);

示例

具体可参考 public/plugins/captcha/tp_captcha/