智简魔方文档

图形验证码插件开发

位置

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

目录结构

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

开发流程

以thinkphp图形验证码为例:

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

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

创建入口文件:TpCaptcha.php

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

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

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

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

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

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

验证码输出方法返回值

方法类型说明
TpCaptchaDescribeHTML前台验证码内容
TpCaptchaDescribeAdminHTML后台验证码内容
  1. 需实现验证方法:插件名 + Verify,如 TpCaptchaVerify($param)。系统会将默认参数传入此方法,该参数为步骤 9 中验证成功后传给系统 JS 方法 captchaCheckSuccsss() 的参数。

参数

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

参数示例

$param = [

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

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

];

返回值

字段类型说明
statusinteger200成功,400失败
msgstring消息
  1. 在步骤 5 和步骤 6 中,如果系统未加载 JS,可设置定时操作。

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

captchaCheckSuccsss(bol,captcha,token,login)

参数

参数类型必填说明
bolbool—是否成功
captchastring—验证码
tokenstring—唯一识别码
loginbool—后台是否直接登录
  1. 取消系统弹框:
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

  1. 命名空间captcha\tp_captcha\controller;

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

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

/captcha/tp_captcha/index/refresh

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

  1. 自定义路由,创建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');
  1. 跨域设置
$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/