Sms.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <?php
  2. namespace app\api\controller;
  3. use Alicode\Alisms;
  4. use app\admin\model\Smslog;
  5. use app\common\controller\Api;
  6. use app\common\library\Sms as Smslib;
  7. use app\common\model\User;
  8. use think\Hook;
  9. /**
  10. * 手机短信接口
  11. */
  12. class Sms extends Api
  13. {
  14. protected $noNeedLogin = '*';
  15. protected $noNeedRight = '*';
  16. public function add_sms_log($user_id){
  17. $sms_log_model= new Smslog();
  18. $sms_info = $sms_log_model->whereTime('create_time','today')->find();
  19. if($sms_info){
  20. $sms_log_model->isUpdate(true,['id'=>$sms_info['id']])->save(['number'=>$sms_info['number']+1]);
  21. }
  22. else {
  23. $data = [
  24. 'user_id'=>$user_id,
  25. 'number' => 1,
  26. 'create_time' => time(),
  27. ];
  28. $sms_log_model->insert($data);
  29. }
  30. }
  31. public function SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code)
  32. {
  33. $sendSmsRequest = [
  34. "TemplateCode" => $TemplateCode,
  35. "phoneNumber" => $phoneNumber,
  36. "TemplateParam" => $TemplateParam
  37. ];
  38. $res = Alisms::sendSmsCode($sendSmsRequest);
  39. if($res['Code']=='OK') {
  40. // 短信发送记录
  41. $sms_model = new \app\common\model\Sms();
  42. $insert_data = [
  43. 'mobile' => $phoneNumber,
  44. 'event' => $event,
  45. 'code' => $code,
  46. 'times' => 1,
  47. 'createtime' => time(),
  48. ];
  49. $sms_model->insert($insert_data);
  50. }
  51. return $res['Code'] == 'OK' ? true : false;
  52. }
  53. //发送短信验证码
  54. public function send_register(){
  55. $mobile = input('mobile');
  56. $event = input('event');
  57. $TemplateCode = "SMS_269130458";
  58. $phoneNumber = $mobile;
  59. $code = rand('000000','999999');
  60. $TemplateParam = json_encode(['code' => $code]);
  61. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code);
  62. if($code){
  63. $this->success('发送成功');
  64. }
  65. else{
  66. $this->error('发送失败,请重新发送');
  67. }
  68. }
  69. //发送午餐通知
  70. public function wucna_tongzhi($mobiles,$user_id){
  71. foreach ($mobiles as $value){
  72. $event = 'tongzhi';
  73. $TemplateCode = "SMS_269235572";
  74. $phoneNumber = $value['mobile'];
  75. $code =0000;
  76. $TemplateParam = '';
  77. $ls=$this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code);
  78. if($ls) {
  79. $this->add_sms_log($user_id);
  80. }
  81. }
  82. }
  83. //发送超时未核销
  84. public function order_guoshi($mobiles,$order_no,$price,$user_id){
  85. $event = 'guoshi';
  86. $TemplateCode = "SMS_269210582";
  87. $phoneNumber = $mobiles;
  88. $code =0000;
  89. $TemplateParam = json_encode(['date' => $order_no,'price'=>$price]);;
  90. $ls=$this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code);
  91. if($ls) {
  92. $this->add_sms_log($user_id);
  93. }
  94. }
  95. //开始前半小时
  96. public function order_sta($mobiles,$date,$user_id){
  97. $event = 'sta';
  98. $TemplateCode = "SMS_269075614";
  99. $phoneNumber = $mobiles;
  100. $code =0000;
  101. $TemplateParam = json_encode(['date' => $date]);;
  102. $ls=$this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code);
  103. if($ls) {
  104. $this->add_sms_log($user_id);
  105. }
  106. }
  107. //结束前半小时
  108. public function order_end($mobiles,$date,$user_id){
  109. $event = 'sta';
  110. $TemplateCode = "SMS_269100595";
  111. $phoneNumber = $mobiles;
  112. $code =0000;
  113. $TemplateParam = json_encode(['date' => $date]);;
  114. $ls=$this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$code);
  115. if($ls) {
  116. $this->add_sms_log($user_id);
  117. }
  118. }
  119. //鱼塘主审核通过通知
  120. public function yutangzhu_shenhe($mobile,$name){
  121. $event = 'tongzhi';
  122. $TemplateCode = "SMS_269235572";
  123. $phoneNumber =$mobile;
  124. $TemplateParam =json_encode(['name' => $name]);;
  125. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$name);
  126. return $code;
  127. }
  128. //鱼塘主审核拒绝通知
  129. public function yutang_jujue($mobile,$name){
  130. $event = 'tongzhi';
  131. $TemplateCode = "SMS_269215520";
  132. $phoneNumber =$mobile;
  133. $TemplateParam =json_encode(['name' => $name]);;
  134. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,$name);
  135. return $code;
  136. }
  137. //订单退款通知
  138. public function order_reund($mobile,$order_no,$price){
  139. $event = 'tongzhi';
  140. $TemplateCode = "SMS_269180579";
  141. $phoneNumber =$mobile;
  142. $TemplateParam =json_encode(['date' => $order_no,'price'=>$price]);;
  143. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,'退款');
  144. return $code;
  145. }
  146. //订单退款通知
  147. public function yuchang_jujue($mobile,$name){
  148. $event = 'tongzhi';
  149. $TemplateCode = "SMS_269200606";
  150. $phoneNumber =$mobile;
  151. $TemplateParam =json_encode(['name' => $name]);;
  152. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,'渔场主驳回');
  153. return $code;
  154. }
  155. //订单退款通知
  156. public function yuchang_shenhe($mobile,$name){
  157. $event = 'tongzhi';
  158. $TemplateCode = "SMS_269200606";
  159. $phoneNumber =$mobile;
  160. $TemplateParam =json_encode(['name' => $name]);;
  161. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,'渔场主审核');
  162. return $code;
  163. }
  164. //订单退款通知
  165. public function dainyue_xiaoxi($mobile,$ytang_name,$number,$price,$date){
  166. $event = 'tongzhi';
  167. $TemplateCode = "SMS_269605122";
  168. $phoneNumber =$mobile;
  169. $TemplateParam =json_encode(['name' => $ytang_name,'number'=>$number,'price'=>$price,'date'=>$date]);
  170. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,'订阅消息');
  171. return $code;
  172. }
  173. public function order_huiyu($mobile,$order_no,$nickname){
  174. $event = 'tongzhi';
  175. $TemplateCode = "SMS_269065590";
  176. $phoneNumber =$mobile;
  177. $TemplateParam =json_encode(['code' => $order_no,'name'=>$nickname]);
  178. $code = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam,$event,'回鱼信息');
  179. return $code;
  180. }
  181. /**
  182. * 发送验证码
  183. *
  184. * @ApiMethod (POST)
  185. * @param string $mobile 手机号
  186. * @param string $event 事件名称
  187. */
  188. public function send()
  189. {
  190. $mobile = $this->request->post("mobile");
  191. $event = $this->request->post("event");
  192. $event = $event ? $event : 'register';
  193. if (!$mobile || !\think\Validate::regex($mobile, "^1\d{10}$")) {
  194. $this->error(__('手机号不正确'));
  195. }
  196. $last = Smslib::get($mobile, $event);
  197. if ($last && time() - $last['createtime'] < 60) {
  198. $this->error(__('发送频繁'));
  199. }
  200. $ipSendTotal = \app\common\model\Sms::where(['ip' => $this->request->ip()])->whereTime('createtime', '-1 hours')->count();
  201. if ($ipSendTotal >= 5) {
  202. $this->error(__('发送频繁'));
  203. }
  204. if ($event) {
  205. $userinfo = User::getByMobile($mobile);
  206. if ($event == 'register' && $userinfo) {
  207. //已被注册
  208. $this->error(__('已被注册'));
  209. } elseif (in_array($event, ['changemobile']) && $userinfo) {
  210. //被占用
  211. $this->error(__('已被占用'));
  212. } elseif (in_array($event, ['changepwd', 'resetpwd']) && !$userinfo) {
  213. //未注册
  214. $this->error(__('未注册'));
  215. }
  216. }
  217. if (!Hook::get('sms_send')) {
  218. $this->error(__('请在后台插件管理安装短信验证插件'));
  219. }
  220. $ret = Smslib::send($mobile, null, $event);
  221. if ($ret) {
  222. $this->success(__('发送成功'));
  223. } else {
  224. $this->error(__('发送失败,请检查短信配置是否正确'));
  225. }
  226. }
  227. /**
  228. * 检测验证码
  229. *
  230. * @ApiMethod (POST)
  231. * @param string $mobile 手机号
  232. * @param string $event 事件名称
  233. * @param string $captcha 验证码
  234. */
  235. public function check()
  236. {
  237. $mobile = $this->request->post("mobile");
  238. $event = $this->request->post("event");
  239. $event = $event ? $event : 'register';
  240. $captcha = $this->request->post("captcha");
  241. if (!$mobile || !\think\Validate::regex($mobile, "^1\d{10}$")) {
  242. $this->error(__('手机号不正确'));
  243. }
  244. if ($event) {
  245. $userinfo = User::getByMobile($mobile);
  246. if ($event == 'register' && $userinfo) {
  247. //已被注册
  248. $this->error(__('已被注册'));
  249. } elseif (in_array($event, ['changemobile']) && $userinfo) {
  250. //被占用
  251. $this->error(__('已被占用'));
  252. } elseif (in_array($event, ['changepwd', 'resetpwd']) && !$userinfo) {
  253. //未注册
  254. $this->error(__('未注册'));
  255. }
  256. }
  257. $ret = Smslib::check($mobile, $captcha, $event);
  258. if ($ret) {
  259. $this->success(__('成功'));
  260. } else {
  261. $this->error(__('验证码不正确'));
  262. }
  263. }
  264. }