You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
2.8 KiB
117 lines
2.8 KiB
12 months ago
|
<?php
|
||
|
|
||
|
namespace app\controller;
|
||
|
|
||
|
use Fastknife\Exception\ParamException;
|
||
|
use Fastknife\Service\ClickWordCaptchaService;
|
||
|
use Fastknife\Service\BlockPuzzleCaptchaService;
|
||
|
use Fastknife\Service\Service;
|
||
|
use think\exception\HttpResponseException;
|
||
|
use think\facade\Validate;
|
||
|
use think\Response;
|
||
|
|
||
|
/**
|
||
|
* 该文件位于controller目录下
|
||
|
* Class Index
|
||
|
* @package app\controller
|
||
|
*/
|
||
|
class Index
|
||
|
{
|
||
|
public function index()
|
||
|
{
|
||
|
try {
|
||
|
$service = $this->getCaptchaService();
|
||
|
$data = $service->get();
|
||
|
} catch (\Exception $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success($data);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 一次验证
|
||
|
*/
|
||
|
public function check()
|
||
|
{
|
||
|
$data = request()->post();
|
||
|
try {
|
||
|
$this->validate($data);
|
||
|
$service = $this->getCaptchaService();
|
||
|
$service->check($data['token'], $data['pointJson']);
|
||
|
} catch (\Exception $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success([]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 二次验证
|
||
|
*/
|
||
|
public function verification()
|
||
|
{
|
||
|
$data = request()->post();
|
||
|
try {
|
||
|
$this->validate($data);
|
||
|
$service = $this->getCaptchaService();
|
||
|
$service->verification($data['token'], $data['pointJson']);
|
||
|
} catch (\Exception $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success([]);
|
||
|
}
|
||
|
|
||
|
protected function getCaptchaService()
|
||
|
{
|
||
|
$captchaType = request()->post('captchaType', null);
|
||
|
$config = config('captcha');
|
||
|
switch ($captchaType) {
|
||
|
case "clickWord":
|
||
|
$service = new ClickWordCaptchaService($config);
|
||
|
break;
|
||
|
case "blockPuzzle":
|
||
|
$service = new BlockPuzzleCaptchaService($config);
|
||
|
break;
|
||
|
default:
|
||
|
throw new ParamException('captchaType参数不正确!');
|
||
|
}
|
||
|
return $service;
|
||
|
}
|
||
|
|
||
|
protected function validate($data)
|
||
|
{
|
||
|
$rules = [
|
||
|
'token' => ['require'],
|
||
|
'pointJson' => ['require']
|
||
|
];
|
||
|
$validate = Validate::rule($rules)->failException(true);
|
||
|
$validate->check($data);
|
||
|
}
|
||
|
|
||
|
protected function success($data)
|
||
|
{
|
||
|
$response = [
|
||
|
'error' => false,
|
||
|
'repCode' => '0000',
|
||
|
'repData' => $data,
|
||
|
'repMsg' => null,
|
||
|
'success' => true,
|
||
|
];
|
||
|
throw new HttpResponseException(Response::create($response, 'json'));
|
||
|
}
|
||
|
|
||
|
|
||
|
protected function error($msg)
|
||
|
{
|
||
|
$response = [
|
||
|
'error' => true,
|
||
|
'repCode' => '6111',
|
||
|
'repData' => null,
|
||
|
'repMsg' => $msg,
|
||
|
'success' => false,
|
||
|
];
|
||
|
throw new HttpResponseException(Response::create($response, 'json'));
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|