SmsService.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Think.Admin
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://think.ctolog.com
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( https://mit-license.org )
  10. // +----------------------------------------------------------------------
  11. // | github开源项目:https://github.com/zoujingli/Think.Admin
  12. // +----------------------------------------------------------------------
  13. namespace service;
  14. use library\Sms;
  15. use think\Cache;
  16. /**
  17. * 短信服务
  18. *
  19. * @package service
  20. * @author Anyon <zoujingli@qq.com>
  21. * @date 2016/12/14 16:50
  22. */
  23. class SmsService extends BasicService {
  24. /**
  25. * 给手机发送短信
  26. * @param string $phone 手机号码
  27. * @param string $content 短信内容
  28. * @param array $data 短信内容模板数据
  29. * @return bool
  30. */
  31. static public function send($phone, $content, $data = []) {
  32. $sms = new Sms();
  33. return $sms->render($content, $data)->send($phone);
  34. }
  35. /**
  36. * 给指定手机号码发送验证码
  37. * @param string $phone 手机号码
  38. * @param int $length 验证码长度
  39. * @param string $string 验证码可选字符
  40. * @param string $code
  41. * @return array
  42. */
  43. static public function verify($phone, $length = 4, $string = "0123456789", $code = '') {
  44. $max = strlen($string) - 1;
  45. for ($i = 0; $i < $length; $i++) {
  46. $code .= $string[rand(0, $max)];
  47. }
  48. $cache_key = "sms_verify_{$phone}";
  49. $cache = Cache::get($cache_key);
  50. if ($cache && !empty($cache['time']) && $cache['time'] + 60 > time()) {
  51. return self::_data('同一手机号码60秒内只能发送一条短信哦!', 'SMS_60S_ONLY_SEND_A_SMS');
  52. }
  53. $result = self::send($phone, 'sms_tpl_register', ['code' => $code]);
  54. if ($result) {
  55. $cache = ['phone' => $phone, 'code' => $code, 'time' => time()];
  56. Cache::set($cache_key, $cache, 180);
  57. return self::_data('验证码发送成功,请查看手机短信!', 'SUCCESS');
  58. }
  59. return self::_data('验证码发送失败,请稍候再试!', 'ERROR');
  60. }
  61. /**
  62. * 获取再次发送短信的等待时间
  63. * @param string $phone
  64. * @return int
  65. */
  66. static public function getVerifyWaitTime($phone) {
  67. $cache_key = "sms_verify_{$phone}";
  68. $cache = Cache::get($cache_key);
  69. if (empty($cache) || empty($cache['time']) || $cache['time'] + 60 < time()) {
  70. return 0;
  71. }
  72. return time() - $cache['time'] - 60;
  73. }
  74. /**
  75. * 统一验证码验证
  76. * @param string $phone
  77. * @param string $code
  78. * @return array
  79. */
  80. static public function checkVerify($phone, $code) {
  81. $cache_key = "sms_verify_{$phone}";
  82. $cache = Cache::get($cache_key);
  83. if (empty($cache) || empty($cache['code']) || $cache['code'] !== $code) {
  84. return self::_data('验证码验证失败,请输入正确的验证码!', 'SMS_VERIFY_FAILD');
  85. }
  86. Cache::rm($cache_key);
  87. return self::_data('验证码验证成功!', 'SUCCESS');
  88. }
  89. }