SmsService.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace app\extra\service\basic;
  3. use app\extra\basic\Service;
  4. use app\model\system\SystemUser;
  5. use Hzdad\Codecheck\Codecheck;
  6. use Overtrue\EasySms\EasySms;
  7. use support\think\Cache;
  8. class SmsService extends Service
  9. {
  10. /**
  11. * 发送短信
  12. * @param int $mobile
  13. * @param string $scene
  14. * @param bool $empty true 验证手机号是否注册
  15. * @return array
  16. */
  17. public function sendSceneSms(int $mobile,string $scene = "login",bool $empty = false): array
  18. {
  19. try {
  20. $mobileUser =(new SystemUser)->where("mobile",$mobile)->findOrEmpty();
  21. if (!$empty && $mobileUser->isEmpty()) return [0,trans("error.mobile-empty")];
  22. if ($empty && !$mobileUser->isEmpty()) return [0,trans("error.mobile-exist")];
  23. $cacheCode = Cache::get(KeyService::smsKey($mobile,$scene));
  24. if (!empty($cacheCode)) return [0,trans("error.sms-repeat")];
  25. $code = (new Codecheck)->mobile($mobile)->scene($scene)->create();
  26. if (!in_array($mobile,$this->mobileWhite)) {
  27. $smsConfig = $this->smsConfig();
  28. $resp = (new EasySms($smsConfig['config']))->send($mobile,[
  29. "template" => $smsConfig['template'],
  30. "data" => [
  31. "code" => $code
  32. ]
  33. ]);
  34. if (!isset($resp[$smsConfig['config']['default']['gateways']]['status'])) return [0,trans("error.sms")];
  35. $msg = trans("success.sms",['%mobile%' => hide_mobile($mobile)]);
  36. } else {
  37. $msg = "当前号码为测试号码,验证码为{$code}";
  38. }
  39. Cache::set(KeyService::smsKey($mobile,$scene),$code,60);
  40. return [1,$msg];
  41. } catch (\Throwable $throwable) {
  42. echo $throwable->getMessage()."\n";
  43. echo $throwable->getFile()."\n";
  44. echo $throwable->getLine()."\n";
  45. return [0,$throwable->getMessage()];
  46. }
  47. }
  48. }