Captcha.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace app\storeapi\controller;
  3. use think\captcha\facade\Captcha as ThinkCaptcha;
  4. use think\facade\Cache;
  5. class Captcha extends BaseStoreApi
  6. {
  7. public function __construct()
  8. {
  9. $this->params = input();
  10. }
  11. /**
  12. * 验证码
  13. */
  14. public function captcha()
  15. {
  16. if (isset($this->params[ 'captcha_id' ]) && !empty($this->params[ 'captcha_id' ])) {
  17. Cache::delete($this->params[ 'captcha_id' ]);
  18. }
  19. $captcha_data = ThinkCaptcha::create(null, true);
  20. $captcha_id = md5(uniqid(null, true));
  21. // 验证码10分钟有效
  22. Cache::set($captcha_id, $captcha_data[ 'code' ], 600);
  23. return $this->response($this->success([ 'id' => $captcha_id, 'img' => $captcha_data[ 'img' ] ]));
  24. }
  25. /**
  26. * 检测验证码
  27. * @param boolean $snapchat 阅后即焚
  28. */
  29. public function checkCaptcha($snapchat = true) : array
  30. {
  31. if (!isset($this->params[ 'captcha_id' ]) || empty($this->params[ 'captcha_id' ])) {
  32. return $this->error('', 'REQUEST_CAPTCHA_ID');
  33. }
  34. if (!isset($this->params[ 'captcha_code' ]) || empty($this->params[ 'captcha_code' ])) {
  35. return $this->error('', 'REQUEST_CAPTCHA_CODE');
  36. }
  37. if ($snapchat) $captcha_data = Cache::pull($this->params[ 'captcha_id' ]);
  38. else $captcha_data = Cache::get($this->params[ 'captcha_id' ]);
  39. if (empty($captcha_data)) return $this->error('', 'CAPTCHA_FAILURE');
  40. if ($this->params[ 'captcha_code' ] != $captcha_data) return $this->error('', 'CAPTCHA_ERROR');
  41. return $this->success();
  42. }
  43. }