test_lgq/niucloud/vendor/fastknife/ajcaptcha/demo.md
2024-01-24 17:36:08 +08:00

239 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 范例
详情请查看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