webuserlogic.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace app\app\logic;
  3. use app\common\model\smscoderecordmodel;
  4. use app\common\model\webusermodel;
  5. use app\common\server\tencentcloudserver;
  6. /**
  7. * 登记记录表
  8. *
  9. * @author wj
  10. * @date 2022-07-22
  11. */
  12. class webuserlogic extends baselogic
  13. {
  14. /**
  15. * 设置请求数据规则
  16. * 20220107
  17. * wj
  18. */
  19. protected function setrules()
  20. {
  21. $list = [
  22. 'login' => [
  23. ['name' => 'telno', 'title' => '手机号', 'require' => true, 'type' => 'numeric'],
  24. ['name' => 'code', 'title' => '验证码', 'require' => true, 'type' => 'numeric'],
  25. ],
  26. 'sendsms' => [
  27. ['name' => 'telno', 'title' => '手机号', 'require' => true, 'type' => 'numeric'],
  28. ],
  29. 'loginbypwd' => [
  30. ['name' => 'account', 'title' => '账号', 'require' => true],
  31. ['name' => 'passwd', 'title' => '密码', 'require' => true],
  32. ],
  33. ];
  34. return $list;
  35. }
  36. //后台或数据库直接添加数据
  37. public function login($arr)
  38. {
  39. $result = $this->checkparam(__FUNCTION__, $arr);
  40. if (1 != $result['status']) {
  41. return $result;
  42. }
  43. $data = $result['data'];
  44. $telno = $data['telno'];
  45. $code = $data['code'];
  46. //验证用户
  47. $m_w = new webusermodel();
  48. $winfo = $m_w->getinfobytelno($telno);
  49. if (empty($winfo)) {
  50. return backarr(0, "无用户数据");
  51. }
  52. $wid = $winfo['id'];
  53. //验证code
  54. $m_s = new smscoderecordmodel();
  55. $result = $m_s->checkcode($telno, $code);
  56. if (!$result['status']) {
  57. return $result;
  58. }
  59. $row = $m_w->settoken($wid, $telno);
  60. if (empty($row)) {
  61. return backarr(0, "用户token修改失败");
  62. }
  63. $winfo = $m_w->getinfobyid($wid, ['token']);
  64. return backarr(1, "用户登录成功", $winfo);
  65. }
  66. /**
  67. * 校验token
  68. *
  69. * @param [type] $token
  70. * @return void
  71. * @author wj
  72. * @date 2022-07-25
  73. */
  74. public function checktoken($token)
  75. {
  76. $m_w = new webusermodel();
  77. $info = $m_w->getinfobytoken($token);
  78. return $info ? true : false;
  79. }
  80. /**
  81. * 发送短信
  82. *
  83. * @return void
  84. * @author wj
  85. * @date 2022-07-25
  86. */
  87. public function sendsms($arr)
  88. {
  89. $result = $this->checkparam(__FUNCTION__, $arr);
  90. if (1 != $result['status']) {
  91. return $result;
  92. }
  93. $data = $result['data'];
  94. $telno = $data['telno'];
  95. if (!isMoblid($telno)) {
  96. return backarr(0, "手机号格式错误");
  97. }
  98. //查未使用的验证码
  99. $m_s = new smscoderecordmodel();
  100. $where = ['telno' => $telno];
  101. $list = $m_s->getList($where, 'smscode', 1, 1)->toArray();
  102. if (empty($list)) {
  103. //发送短信
  104. $code = randomStr();
  105. //$code = "8888";
  106. $smsData = [
  107. 'telno' => $telno,
  108. 'smscode' => $code,
  109. ];
  110. $row = $m_s->insertData($smsData);
  111. if (empty($row)) {
  112. return backarr(0, "验证码添加失败");
  113. }
  114. } else {
  115. $code = $list[0]['smscode'];
  116. }
  117. //发送验证码
  118. $sendresult = $this->sendsmscode($telno, $code);
  119. if (!$sendresult['status']) {
  120. return backarr(0, $sendresult['msg']);
  121. }
  122. return backarr(1, "验证码发送成功");
  123. }
  124. /**
  125. * 发送验证码
  126. *
  127. * @return void
  128. * @author wj
  129. * @date 2022-07-26
  130. */
  131. private function sendsmscode($telno, $code)
  132. {
  133. $appdid = "1400598579";
  134. //$templateId = "1218744";
  135. $templateId = "1493466";
  136. $SignName = '水猫工匠';
  137. $array = array(
  138. "PhoneNumberSet" => [$telno],
  139. "SmsSdkAppId" => $appdid,
  140. "TemplateId" => $templateId,
  141. "TemplateParamSet" => [$code],
  142. "SignName" => $SignName,
  143. );
  144. $s_tc = new tencentcloudserver();
  145. $result = $s_tc->sendsms($array);
  146. return $result;
  147. }
  148. /**
  149. * 通过验证码登陆
  150. *
  151. * @param [type] $arr
  152. * @return void
  153. * @author wj
  154. * @date 2022-08-18
  155. */
  156. public function loginbypwd($arr)
  157. {
  158. $result = $this->checkparam(__FUNCTION__, $arr);
  159. if (1 != $result['status']) {
  160. return $result;
  161. }
  162. $data = $result['data'];
  163. $account = $data['account'];
  164. $passwd = $data['passwd'];
  165. //验证用户
  166. $m_w = new webusermodel();
  167. //手机号作为账户号
  168. $winfo = $m_w->getinfobytelno($account);
  169. if (empty($winfo)) {
  170. return backarr(0, "无用户数据");
  171. }
  172. $wid = $winfo['id'];
  173. $telno = $winfo['telno'];
  174. $pwd = $winfo['userpwd'];
  175. if (empty($pwd)) {
  176. //密码为空设为默认
  177. $usepwd = substr($telno, 0, 2) . substr($telno, -4);
  178. //$pwd = $this->getpwd("000000");
  179. $pwd = $this->getpwd($usepwd);
  180. $row = $m_w->setpwd($wid, $pwd);
  181. if (empty($row)) {
  182. return backarr(0, "密码修改失败");
  183. }
  184. }
  185. //验证密码
  186. if (!password_verify($passwd, $pwd)) {
  187. return backarr(0, "密码错误");
  188. }
  189. //重置token
  190. $row = $m_w->settoken($wid, $telno);
  191. if (empty($row)) {
  192. return backarr(0, "用户token修改失败");
  193. }
  194. $winfo = $m_w->getinfobyid($wid, ['token']);
  195. return backarr(1, "用户登录成功", $winfo);
  196. }
  197. /**
  198. * 获取加密后的密码
  199. *
  200. * @param string $salt
  201. * @return void
  202. * @author wj
  203. * @date 2022-08-20
  204. */
  205. public function getpwd($pwd = "")
  206. {
  207. $defaultpwd = "000000";
  208. if (empty($pwd) || !is_string($pwd)) {
  209. $pwd = $defaultpwd;
  210. }
  211. $options = [
  212. 'cost' => 12, //递归层数
  213. ];
  214. $pwd = password_hash($pwd, PASSWORD_DEFAULT, $options);
  215. return $pwd;
  216. }
  217. }