117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?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'));
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |