CaptchaService.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. declare (strict_types=1);
  3. namespace App\Service;
  4. /**
  5. * 验证码服务
  6. */
  7. class CaptchaService
  8. {
  9. /**
  10. * 生成验证码
  11. * @param $scene 场景
  12. * @param $dataType 返回类型:1-常用图片流对象,2-base图片地址(API接口使用)
  13. */
  14. public static function makeCode($scene='default', $dataType=1){
  15. $redis = $this->container->get(\Hyperf\Redis\Redis::class);
  16. $config = new \EasySwoole\VerifyCode\Conf();
  17. $code = new \EasySwoole\VerifyCode\VerifyCode($config);
  18. //系统验证码
  19. $result = $code->DrawCode();
  20. // 获取自定义配置
  21. $config = config('verify_code.'.$scene);
  22. $isNoise = isset($config['noise'])? $config['noise'] : false;
  23. if($isNoise){
  24. $result->setUseNoise();
  25. }
  26. $img_code = $result->getImageCode();
  27. //写入缓存 用于其他方法验证 并且设置过期时间
  28. $expire = isset($config['expire'])? intval($config['expire']) : 0;
  29. $redis->set("codes:{$scene}_".session_id(), $img_code, $expire? $expire : 180);
  30. // 返回类型
  31. if($dataType == 2){
  32. return ['url'=> $result->getImageBase64(), 'scene'=> $scene];
  33. }else{
  34. return $result->getImageByte();
  35. }
  36. }
  37. /**
  38. * 验证码校验
  39. */
  40. public static function checkCode($code, $scene='default'){
  41. $redis = $this->container->get(\Hyperf\Redis\Redis::class);
  42. $cacheCode = $redis->get("codes:{$scene}_".session_id());
  43. return $cacheCode == $code? true : false;
  44. }
  45. }