[ ['name' => 'telno', 'title' => '手机号', 'require' => true, 'type' => 'numeric'], ['name' => 'code', 'title' => '验证码', 'require' => true, 'type' => 'numeric'], ], 'sendsms' => [ ['name' => 'telno', 'title' => '手机号', 'require' => true, 'type' => 'numeric'], ], 'loginbypwd' => [ ['name' => 'account', 'title' => '账号', 'require' => true], ['name' => 'passwd', 'title' => '密码', 'require' => true], ], ]; return $list; } //后台或数据库直接添加数据 public function login($arr) { $result = $this->checkparam(__FUNCTION__, $arr); if (1 != $result['status']) { return $result; } $data = $result['data']; $telno = $data['telno']; $code = $data['code']; //验证用户 $m_w = new webusermodel(); $winfo = $m_w->getinfobytelno($telno); if (empty($winfo)) { return backarr(0, "无用户数据"); } $wid = $winfo['id']; //验证code $m_s = new smscoderecordmodel(); $result = $m_s->checkcode($telno, $code); if (!$result['status']) { return $result; } $row = $m_w->settoken($wid, $telno); if (empty($row)) { return backarr(0, "用户token修改失败"); } $winfo = $m_w->getinfobyid($wid, ['token']); return backarr(1, "用户登录成功", $winfo); } /** * 校验token * * @param [type] $token * @return void * @author wj * @date 2022-07-25 */ public function checktoken($token) { $m_w = new webusermodel(); $info = $m_w->getinfobytoken($token); return $info ? true : false; } /** * 发送短信 * * @return void * @author wj * @date 2022-07-25 */ public function sendsms($arr) { $result = $this->checkparam(__FUNCTION__, $arr); if (1 != $result['status']) { return $result; } $data = $result['data']; $telno = $data['telno']; if (!isMoblid($telno)) { return backarr(0, "手机号格式错误"); } //查未使用的验证码 $m_s = new smscoderecordmodel(); $where = ['telno' => $telno]; $list = $m_s->getList($where, 'smscode', 1, 1)->toArray(); if (empty($list)) { //发送短信 $code = randomStr(); //$code = "8888"; $smsData = [ 'telno' => $telno, 'smscode' => $code, ]; $row = $m_s->insertData($smsData); if (empty($row)) { return backarr(0, "验证码添加失败"); } } else { $code = $list[0]['smscode']; } //发送验证码 $sendresult = $this->sendsmscode($telno, $code); if (!$sendresult['status']) { return backarr(0, $sendresult['msg']); } return backarr(1, "验证码发送成功"); } /** * 发送验证码 * * @return void * @author wj * @date 2022-07-26 */ private function sendsmscode($telno, $code) { $appdid = "1400598579"; //$templateId = "1218744"; $templateId = "1493466"; $SignName = '水猫工匠'; $array = array( "PhoneNumberSet" => [$telno], "SmsSdkAppId" => $appdid, "TemplateId" => $templateId, "TemplateParamSet" => [$code], "SignName" => $SignName, ); $s_tc = new tencentcloudserver(); $result = $s_tc->sendsms($array); return $result; } /** * 通过验证码登陆 * * @param [type] $arr * @return void * @author wj * @date 2022-08-18 */ public function loginbypwd($arr) { $result = $this->checkparam(__FUNCTION__, $arr); if (1 != $result['status']) { return $result; } $data = $result['data']; $account = $data['account']; $passwd = $data['passwd']; //验证用户 $m_w = new webusermodel(); //手机号作为账户号 $winfo = $m_w->getinfobytelno($account); if (empty($winfo)) { return backarr(0, "无用户数据"); } $wid = $winfo['id']; $telno = $winfo['telno']; $pwd = $winfo['userpwd']; if (empty($pwd)) { //密码为空设为默认 $pwd = $this->getpwd("000000"); $row = $m_w->setpwd($wid, $pwd); if (empty($row)) { return backarr(0, "密码修改失败"); } } //验证密码 if (!password_verify($passwd, $pwd)) { return backarr(0, "密码错误"); } //重置token $row = $m_w->settoken($wid, $telno); if (empty($row)) { return backarr(0, "用户token修改失败"); } $winfo = $m_w->getinfobyid($wid, ['token']); return backarr(1, "用户登录成功", $winfo); } /** * 获取加密后的密码 * * @param string $salt * @return void * @author wj * @date 2022-08-20 */ public function getpwd($pwd = "") { $defaultpwd = "000000"; if (empty($pwd) || !is_string($pwd)) { $pwd = $defaultpwd; } $options = [ 'cost' => 12, //递归层数 ]; $pwd = password_hash($pwd, PASSWORD_DEFAULT, $options); return $pwd; } }