ShortMessageService.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Elton
  5. * Date: 2019/4/12
  6. * Time: 17:46
  7. */
  8. namespace app\common\service;
  9. use fast\Http;
  10. use think\Config;
  11. class ShortMessageService
  12. {
  13. const CODE_ERROR = 0;
  14. const CODE_SUCCESS = 1;
  15. const SEND_SUCCESS_CODE = 1000;
  16. protected static $instance;
  17. public static function instance(){
  18. if (is_null(self::$instance)) {
  19. self::$instance = new static();
  20. }
  21. return self::$instance;
  22. }
  23. /**
  24. * 发送单条短信
  25. * @param $content 短信内容
  26. * @param $mobi 手机号码
  27. * @return bool
  28. * @throws \think\exception\DbException
  29. */
  30. public function singleMsg($content, $mobi)
  31. {
  32. $content = trim($content);
  33. if (empty($content)) {
  34. return json_encode(['code'=> self::CODE_ERROR, 'msg'=>'发送内容不能为空']);
  35. }
  36. if (empty($mobi) || !preg_match("/^1[345789]\d{9}$/", $mobi)) {
  37. return json_encode(['code'=> self::CODE_ERROR, 'msg'=>'手机格式错误']);
  38. }
  39. $data = Http::post(
  40. Config::get('site.shortsms_url'),
  41. [
  42. 'sid' => Config::get('site.shortsms_sid'),
  43. 'mobi' => $mobi,
  44. 'sign' => md5(Config::get('site.shortsms_cpid') . Config::get('site.shortsms_key')),
  45. 'msg' => urlencode(base64_encode($content))
  46. ]
  47. );
  48. LogService::info('[ Shortmessage ] [ singleMsg ]' . $data);
  49. $ret = explode('|', $data);
  50. if ($ret[0] == self::SEND_SUCCESS_CODE) {
  51. LogService::info('[ Shortmessage ] [ singleMsg ] [ Success ]' . $content);
  52. return json_encode(['code' => self::CODE_SUCCESS, 'msg' => '发送成功']);
  53. } else {
  54. LogService::error('[ Shortmessage ] [ singleMsg ] [ Fail ]' . $data);
  55. LogService::error('[ Shortmessage ] [ singleMsg ] [ Fail ]' . $content);
  56. return json_encode(['code' => self::CODE_ERROR, 'msg' => '发送失败']);
  57. }
  58. }
  59. /**
  60. * 发送单条短信
  61. * @param $content 短信内容
  62. * @param $mobi 手机号码
  63. * @return bool
  64. * @throws \think\exception\DbException
  65. */
  66. public function singleShortMsg($content, $mobi)
  67. {
  68. $content = trim($content);
  69. if (empty($content)) {
  70. return ['code'=> self::CODE_ERROR, 'msg'=>'发送内容不能为空'];
  71. }
  72. if (empty($mobi) || !preg_match("/^1[345789]\d{9}$/", $mobi)) {
  73. return ['code'=> self::CODE_ERROR, 'msg'=>'手机格式错误'];
  74. }
  75. $data = Http::post(
  76. Config::get('site.shortsms_url'),
  77. [
  78. 'sid' => Config::get('site.shortsms_sid'),
  79. 'mobi' => $mobi,
  80. 'sign' => md5(Config::get('site.shortsms_cpid') . Config::get('site.shortsms_key')),
  81. 'msg' => urlencode(base64_encode($content))
  82. ]
  83. );
  84. LogService::info('[ Shortmessage ] [ singleMsg ]' . $data);
  85. $ret = explode('|', $data);
  86. if ($ret[0] == self::SEND_SUCCESS_CODE) {
  87. LogService::info('[ Shortmessage ] [ singleMsg ] [ Success ]' . $content);
  88. return ['code' => self::CODE_SUCCESS, 'msg' => '发送成功'];
  89. } else {
  90. LogService::error('[ Shortmessage ] [ singleMsg ] [ Fail ]' . $content);
  91. return ['code' => self::CODE_ERROR, 'msg' => '发送失败'];
  92. }
  93. }
  94. /**
  95. * 生成短信验证码
  96. * @param int $length
  97. * @return int
  98. */
  99. public function generateSMSCode($length = 4)
  100. {
  101. $min = pow(10, ($length - 1));
  102. $max = pow(10, $length) -1 ;
  103. return rand($min, $max);
  104. }
  105. }