107 lines
2.5 KiB
PHP
107 lines
2.5 KiB
PHP
|
<?php
|
|||
|
declare(strict_types=1);
|
|||
|
|
|||
|
namespace App\Http\Controllers;
|
|||
|
|
|||
|
use Fastknife\Exception\ParamException;
|
|||
|
use Fastknife\Service\BlockPuzzleCaptchaService;
|
|||
|
use Fastknife\Service\ClickWordCaptchaService;
|
|||
|
use Fastknife\Service\Service;
|
|||
|
use Illuminate\Support\Facades\Request;
|
|||
|
|
|||
|
class IndexController
|
|||
|
{
|
|||
|
public function index()
|
|||
|
{
|
|||
|
try {
|
|||
|
$service = $this->getCaptchaService();
|
|||
|
$data = $service->get();
|
|||
|
} catch (\Exception $e) {
|
|||
|
return $this->error($e->getMessage());
|
|||
|
}
|
|||
|
return $this->success($data);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 一次验证
|
|||
|
* @return array
|
|||
|
*/
|
|||
|
public function check()
|
|||
|
{
|
|||
|
try {
|
|||
|
$data = $this->validate();
|
|||
|
$service = $this->getCaptchaService();
|
|||
|
$service->check($data['token'], $data['pointJson']);
|
|||
|
} catch (\Exception $e) {
|
|||
|
return $this->error($e->getMessage());
|
|||
|
}
|
|||
|
return $this->success([]);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 二次验证
|
|||
|
* @return array
|
|||
|
*/
|
|||
|
public function verification()
|
|||
|
{
|
|||
|
try {
|
|||
|
$data = $this->validate();
|
|||
|
$service = $this->getCaptchaService();
|
|||
|
$service->verification($data['token'], $data['pointJson']);
|
|||
|
} catch (\Exception $e) {
|
|||
|
return $this->error($e->getMessage());
|
|||
|
}
|
|||
|
return $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()
|
|||
|
{
|
|||
|
return Request::instance()->validate([
|
|||
|
'token' => 'bail|required',
|
|||
|
'pointJson' => 'required',
|
|||
|
]);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
protected function success($data)
|
|||
|
{
|
|||
|
return [
|
|||
|
'error' => false,
|
|||
|
'repCode' => '0000',
|
|||
|
'repData' => $data,
|
|||
|
'repMsg' => null,
|
|||
|
'success' => true,
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
protected function error($msg)
|
|||
|
{
|
|||
|
return [
|
|||
|
'error' => true,
|
|||
|
'repCode' => '6111',
|
|||
|
'repData' => null,
|
|||
|
'repMsg' => $msg,
|
|||
|
'success' => false,
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
}
|