239 lines
7.0 KiB
Markdown
239 lines
7.0 KiB
Markdown
|
### 范例
|
|||
|
|
|||
|
详情请查看test目录的PHP源码
|
|||
|
|
|||
|
#### 配置说明
|
|||
|
|
|||
|
```php
|
|||
|
return [
|
|||
|
'font_file' => '', //自定义字体包路径, 不填使用默认值
|
|||
|
//文字验证码
|
|||
|
'click_world' => [
|
|||
|
'backgrounds' => []
|
|||
|
],
|
|||
|
//滑动验证码
|
|||
|
'block_puzzle' => [
|
|||
|
'backgrounds' => [], //背景图片路径, 不填使用默认值
|
|||
|
'templates' => [], //模板图
|
|||
|
|
|||
|
'offset' => 10, //容错偏移量
|
|||
|
|
|||
|
'is_cache_pixel' => true, //是否开启缓存图片像素值,开启后能提升服务端响应性能(但要注意更换图片时,需要清除缓存)
|
|||
|
],
|
|||
|
//水印
|
|||
|
'watermark' => [
|
|||
|
'fontsize' => 12,
|
|||
|
'color' => '#ffffff',
|
|||
|
'text' => '我的水印'
|
|||
|
],
|
|||
|
'cache' => [
|
|||
|
'constructor' => \Fastknife\Utils\CacheUtils::class,//若您使用了框架,并且想使用类似于redis这样的缓存驱动,则应换成框架的中的缓存驱动
|
|||
|
'method' => [
|
|||
|
// 遵守PSR-16规范不需要设置此项(tp6, laravel,hyperf)。如tp5就不支持(tp5缓存方法是rm,所以要配置为"delete" => "rm"),
|
|||
|
'get' => 'get', //获取
|
|||
|
'set' => 'set', //设置
|
|||
|
'delete' => 'delete',//删除
|
|||
|
'has' => 'has' //key是否存在
|
|||
|
],
|
|||
|
'options' => [
|
|||
|
//如果您依然使用\Fastknife\Utils\CacheUtils做为您的缓存驱动,那么您可以自定义缓存配置。
|
|||
|
'expire' => 300,//缓存有效期 (默认为0 表示永久缓存)
|
|||
|
'prefix' => '', //缓存前缀
|
|||
|
'path' => '', //缓存目录
|
|||
|
'serialize' => [], //缓存序列化和反序列化方法
|
|||
|
]
|
|||
|
]
|
|||
|
];
|
|||
|
```
|
|||
|
##### 缓存配置
|
|||
|
|
|||
|
> config.cache.constructor类型为string|array|function 使用以访问回调的方式获得缓存实例;
|
|||
|
|
|||
|
+ laravel 配置:
|
|||
|
|
|||
|
```
|
|||
|
'constructor' => [Illuminate\Support\Facades\Cache::class, 'store']
|
|||
|
```
|
|||
|
|
|||
|
+ tp6(tp5.1) 配置
|
|||
|
|
|||
|
```php
|
|||
|
'constructor' => [think\Facade\Cache::class, 'instance']
|
|||
|
```
|
|||
|
|
|||
|
> 无论配置写成`[think\Facade\Cache::class, 'instance']` 还是写成 `[think\Facade\Cache::class, 'store']` 目的都是为了获取缓存实例,具体情况视框架而定
|
|||
|
|
|||
|
|
|||
|
|
|||
|
+ 灵活自定义:
|
|||
|
1. 如果您的需要使用类似以下命令打包配置文件(ThinkPHP,Laravel 命令)
|
|||
|
- php think optimize:config
|
|||
|
- php artisan optimize
|
|||
|
则需要写成下面这样:
|
|||
|
```php
|
|||
|
$instance = \think\facade\Cache::store();//获取缓存想实例
|
|||
|
//省略分部代码
|
|||
|
'constructor' => serialize($instance);
|
|||
|
```
|
|||
|
|
|||
|
因为在执行optimize打包命令时,会尝试将对象进行序列化。
|
|||
|
|
|||
|
2. 如果您不需要使用打包压缩命令,或者使用了像hyperf这样的框架,除了上述的写法,还可以写成这样:
|
|||
|
|
|||
|
```php
|
|||
|
'constructor' => function () {
|
|||
|
$container = \Hyperf\Utils\ApplicationContext::getContainer();
|
|||
|
//在构造函数中传入自已的配置
|
|||
|
return $container->get(\Psr\SimpleCache\CacheInterface::class);
|
|||
|
},
|
|||
|
```
|
|||
|
|
|||
|
除此之处,您传入的缓存实例应遵守psr-16规范
|
|||
|
|
|||
|
##### 背景图与滑动图
|
|||
|
> 配置中的backgrounds与templates项均支持,Array, String两种格式
|
|||
|
+ 使用Array(索引数组)格式时,表明它每一项都是一张图片。可以是本地图片路径,也可以是网络图片路径。
|
|||
|
示例:
|
|||
|
```php
|
|||
|
'backgrounds' => [
|
|||
|
'/public/images/xxx.jpg',
|
|||
|
'http://www.image.xx.jpg'
|
|||
|
]
|
|||
|
```
|
|||
|
+ 使用String格式时,表明它是一个图片所在位置的目录
|
|||
|
示例:
|
|||
|
```php
|
|||
|
'backgrounds' => ROOT_PATH . '/resources/defaultImages/jigsaw/original/'
|
|||
|
```
|
|||
|
当配置中的backgrounds与templates项为空时,会将`/resources/defaultImages/`目录内所有图片做为默认图片。
|
|||
|
|
|||
|
下面是社区人员一起维护的图片库,这些图片可以与本程序无缝衔接。
|
|||
|
https://gitee.com/anji-plus/AJ-Captcha-Images
|
|||
|
|
|||
|
##### 字体配置
|
|||
|
字体配置在水印与文字点击验证功能中使用,其配置格式化String, 指向字体库。为空时会以`/resources/fonts`下的字体文件为默认值。
|
|||
|
示例:
|
|||
|
```php
|
|||
|
'font_file' => ROOT_PATH . '/resources/fonts/WenQuanZhengHei.ttf'
|
|||
|
```
|
|||
|
|
|||
|
#### 获取滑动验证码
|
|||
|
|
|||
|
```php
|
|||
|
public function get(){
|
|||
|
$config = require '../src/config.php';
|
|||
|
$service = new BlockPuzzleCaptchaService($config);
|
|||
|
$data = $service->get();
|
|||
|
echo json_encode([
|
|||
|
'error' => false,
|
|||
|
'repCode' => '0000',
|
|||
|
'repData' => $data,
|
|||
|
'repMsg' => null,
|
|||
|
'success' => true,
|
|||
|
]);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### 滑动验证
|
|||
|
|
|||
|
```php
|
|||
|
public function check()
|
|||
|
{
|
|||
|
$config = require '../src/config.php';
|
|||
|
$service = new BlockPuzzleCaptchaService($config);
|
|||
|
$data = $_REQUEST;
|
|||
|
$msg = null;
|
|||
|
$error = false;
|
|||
|
$repCode = '0000';
|
|||
|
try {
|
|||
|
$service->check($data['token'], $data['pointJson']);
|
|||
|
} catch (\Exception $e) {
|
|||
|
$msg = $e->getMessage();
|
|||
|
$error = true;
|
|||
|
$repCode = '6111';
|
|||
|
}
|
|||
|
echo json_encode([
|
|||
|
'error' => $error,
|
|||
|
'repCode' => $repCode,
|
|||
|
'repData' => null,
|
|||
|
'repMsg' => $msg,
|
|||
|
'success' => ! $error,
|
|||
|
]);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### 获取文字验证码
|
|||
|
|
|||
|
```php
|
|||
|
public function get()
|
|||
|
{
|
|||
|
$config = require '../src/config.php';
|
|||
|
$service = new ClickWordCaptchaService($config);
|
|||
|
$data = $service->get();
|
|||
|
echo json_encode([
|
|||
|
'error' => false,
|
|||
|
'repCode' => '0000',
|
|||
|
'repData' => $data,
|
|||
|
'repMsg' => null,
|
|||
|
'success' => true,
|
|||
|
]);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### 文字验证
|
|||
|
|
|||
|
```php
|
|||
|
public function check()
|
|||
|
{
|
|||
|
$config = require '../src/config.php';
|
|||
|
$service = new ClickWordCaptchaService($config);
|
|||
|
$data = $_REQUEST;
|
|||
|
$msg = null;
|
|||
|
$error = false;
|
|||
|
$repCode = '0000';
|
|||
|
try {
|
|||
|
$service->check($data['token'], $data['pointJson']);
|
|||
|
} catch (\Exception $e) {
|
|||
|
$msg = $e->getMessage();
|
|||
|
$error = true;
|
|||
|
$repCode = '6111';
|
|||
|
}
|
|||
|
echo json_encode([
|
|||
|
'error' => $error,
|
|||
|
'repCode' => $repCode,
|
|||
|
'repData' => null,
|
|||
|
'repMsg' => $msg,
|
|||
|
'success' => ! $error,
|
|||
|
]);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### 前端请求头修改示例
|
|||
|
|
|||
|
```javascript
|
|||
|
import axios from 'axios';
|
|||
|
import qs from 'qs';
|
|||
|
|
|||
|
axios.defaults.baseURL = 'https://captcha.anji-plus.com/captcha-api';
|
|||
|
|
|||
|
const service = axios.create({
|
|||
|
timeout: 40000,
|
|||
|
headers: {
|
|||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
|||
|
},
|
|||
|
})
|
|||
|
service.interceptors.request.use(
|
|||
|
config => {
|
|||
|
if (config.hasOwnProperty('data')) {
|
|||
|
config.data = qs.stringify(config.data)
|
|||
|
}
|
|||
|
return config
|
|||
|
},
|
|||
|
error => {
|
|||
|
Promise.reject(error)
|
|||
|
}
|
|||
|
)
|
|||
|
```
|
|||
|
|
|||
|
本包后续更新 ThinkPHP、Hyperf 等框架的demo,请持续关注
|
|||
|
https://gitee.com/fastknife/aj-captcha
|