Login.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | [ WE CAN DO IT MORE SIMPLE ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2018-2020 rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: TABLE ME
  8. // +----------------------------------------------------------------------
  9. // | Date: 2020-08-25 17:23
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\api\controller\v1;
  13. use app\BaseController;
  14. use app\model\api\Member;
  15. use app\model\Api\SiteProduct;
  16. use app\model\api\SmsYzm;
  17. use app\Request;
  18. use library\services\UtilService;
  19. use library\utils\AdvertUtils;
  20. use library\utils\Icon;
  21. use library\utils\Sms;
  22. use think\facade\Db;
  23. class Login extends BaseController
  24. {
  25. public function aaa(){
  26. $icon = new Icon;
  27. $icon->mkIcon(app()->getRootPath().'public/1.png');
  28. }
  29. /**
  30. * 登录中心
  31. * @param Request $request
  32. */
  33. public function l(Request $request) {
  34. [$userName,$passWord] = UtilService::getMore([
  35. ['userName','','empty','请输入账户账号'],
  36. ['passWord','','empty','请输入登录密码']
  37. ],$request,true);
  38. //获取登录
  39. $meberInfo = Member::login($userName,$passWord);
  40. if(empty($meberInfo)) {
  41. return app('json')->fail(Member::getErrorInfo('用户名错误,请重新输入'));
  42. }
  43. //生成令牌
  44. $token = Member::createToken($meberInfo, 'xxlm');
  45. if(empty($token)) {
  46. return app('json')->fail(Member::getErrorInfo());
  47. }
  48. Member::where('uid',$meberInfo['uid'])->save(['lasttime'=>time()]);
  49. $data['uid'] = $meberInfo['uid'];
  50. $data['ip'] = $request->ip();
  51. $data['time'] = time();
  52. Db::name("login_record")->insert($data);
  53. return app('json')->success([
  54. 'token' => $token,
  55. 'user_info' => [
  56. 'mobile' => $meberInfo->getData('mobile'),
  57. 'name' => $meberInfo->getData('name'),
  58. 'avatar' => $meberInfo->getData('avatar'),
  59. 'money' => $meberInfo->getData('money'),
  60. 'openid' => $meberInfo->getData('openid')
  61. ],
  62. ]);
  63. }
  64. /**
  65. * 注册1号
  66. * @param Request $request
  67. */
  68. public function reg1(Request $request) {
  69. [$mobile,$yzm] = UtilService::getMore([
  70. ['mobile','','empty','请输入手机号码'],
  71. ['yzm','']
  72. ],$request,true);
  73. //判断验证码
  74. $bool = (new SmsYzm)->VerCode($mobile,$yzm,'yzm',$request->site['sassid']);
  75. if(!$bool) {
  76. return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
  77. }
  78. //判断是否被注册了
  79. $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
  80. if($count > 0) {
  81. return app('json')->fail("用户已经被注册,请勿重复操作!");
  82. }
  83. //生成MD5
  84. $param = ['mobile'=>$mobile,'sassid'=>$request->site['sassid'],'time'=>time()];
  85. $secret_key = $request->site['secret_key'];
  86. $token =base64_encode( @crypto_encrypt(json_encode($param), $secret_key));
  87. return app('json')->success([
  88. 'token' => $token
  89. ]);
  90. }
  91. /**
  92. * 注册2
  93. * @param Request $request
  94. */
  95. public function reg2(Request $request) {
  96. $post = UtilService::getMore([
  97. ['token','','empty','参数错误'],
  98. ['password','','empty','请输入正确的密码'],
  99. ['nickname',''],
  100. ['avatar',''],
  101. ['tjUid',''],
  102. ['weixin_name','']
  103. ],$request);
  104. $time = time();
  105. $secret_key = $request->site['secret_key'];
  106. $tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), $secret_key),true);
  107. //注册token大于30分钟或者超过30分钟
  108. if(empty($tokenData) || ($time - $tokenData['time']) > 30 * 60){
  109. return app('json')->fail("注册过期,请重新注册");
  110. }
  111. //判断是否被注册了
  112. $count = (new Member)->where('mobile',$tokenData['mobile'])->where('sassid',$request->site['sassid'])->count();
  113. if($count > 0) {
  114. return app('json')->fail("用户已经被注册!");
  115. }
  116. //推荐码
  117. if(!empty($post['tjUid'])){
  118. $tjuid = crypto_decrypt(base64_decode($post['tjUid']),$request->site['secret_key']);
  119. $save['i_uid'] = $tjuid;
  120. }
  121. $save['mobile'] = $tokenData['mobile'];
  122. $save['username'] = '';
  123. $save['password'] = md5($post['password']);
  124. $save['nickname'] = $post['nickname'];
  125. $save['name'] = '';
  126. $save['avatar'] = $post['avatar'];
  127. $save['regip'] = $request->ip();
  128. $save['regtime'] = $time;
  129. $save['lasttime'] = $time;
  130. $save['sassid'] = $request->site['sassid'];
  131. $save['weixin_name'] = $post['weixin_name'];
  132. $save['status'] = 1;
  133. $uid = (new Member)->insertGetId($save);
  134. $meberInfo = Member::where('uid',$uid)->find();
  135. //生成令牌
  136. $token = Member::createToken($meberInfo, $request->site['secret_key']);
  137. return app('json')->success([
  138. 'token' => $token,
  139. 'user_info' => [
  140. 'mobile' => $meberInfo->getData('mobile'),
  141. 'name' => $meberInfo->getData('name'),
  142. 'avatar' => $meberInfo->getData('avatar'),
  143. 'money' => $meberInfo->getData('money')
  144. ],
  145. ]);
  146. }
  147. public function mreg(Request $request) {
  148. $post = UtilService::getMore([
  149. ['mobile','','empty','请输入正确的手机号码'],
  150. ['code','','empty','请输入正确的验证码'],
  151. ['passWord','','empty','请输入正确的密码'],
  152. ['tjUid',''],
  153. ['weixin','']
  154. ],$request);
  155. //判断验证码
  156. $bool = (new SmsYzm)->VerCode($post['mobile'],$post['code'],'yzm',$request->site['sassid']);
  157. if(!$bool) {
  158. return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
  159. }
  160. //判断是否被注册了
  161. $count = (new Member)
  162. ->where('mobile',$post['mobile'])
  163. ->where('sassid',$request->site['sassid'])
  164. ->count();
  165. if($count > 0) {
  166. return app('json')->fail("用户已经被注册,请勿重复操作!");
  167. }
  168. //推荐码
  169. if(!empty($post['tjUid'])){
  170. $tjuid = crypto_decrypt(base64_decode($post['tjUid']),$request->site['secret_key']);
  171. $save['i_uid'] = $tjuid;
  172. }
  173. $time = time();
  174. $save['mobile'] = $post['mobile'];
  175. $save['username'] = '';
  176. $save['password'] = md5($post['passWord']);
  177. $save['nickname'] = '';
  178. $save['name'] = '';
  179. $save['avatar'] = '';
  180. $save['regip'] = $request->ip();
  181. $save['regtime'] = $time;
  182. $save['lasttime'] = $time;
  183. $save['sassid'] = $request->site['sassid'];
  184. $save['weixin_name'] = $post['weixin_name'];
  185. $save['status'] = 1;
  186. $uid = (new Member)->insertGetId($save);
  187. $meberInfo = Member::where('uid',$uid)->find();
  188. //生成令牌
  189. $token = Member::createToken($meberInfo, $request->site['secret_key']);
  190. return app('json')->success([
  191. 'user_info' => [
  192. 'mobile' => $meberInfo->getData('mobile'),
  193. 'name' => $meberInfo->getData('name'),
  194. 'avatar' => $meberInfo->getData('avatar'),
  195. 'money' => $meberInfo->getData('money')
  196. ],
  197. ]);
  198. }
  199. /**
  200. * 获取验证码
  201. * @param Request $request
  202. */
  203. public function yzm(Request $request) {
  204. [$mobile,$time,$token] = UtilService::getMore([
  205. ['mobile','','empty','请输入手机号码'],
  206. ['time',''],
  207. ['token','']
  208. ],$request,true);
  209. $secret_key = $request->site['secret_key'];
  210. $outStr = @crypto_decrypt(base64_decode($token), $secret_key);
  211. if($mobile != $outStr) {
  212. return app('json')->fail("获取验证码失败!");
  213. }
  214. $lastTime = 120;//
  215. $time = time();
  216. $smsTime = (new SmsYzm)->where('mobile',$mobile)
  217. ->where("action","yzm")
  218. ->order("time desc")
  219. ->value("time");
  220. //验证码
  221. if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
  222. $data['status'] = 2;
  223. $data['time'] = $time - $smsTime;
  224. return app('json')->success($data);
  225. }
  226. //发送验证码
  227. $code = randString(6, true);
  228. $send = (new Sms)->SmsCode($mobile, "718562",$request->site['sassid'], array("1" => $code,"2"=>"30"));
  229. if ($send['status'] == 1) {
  230. $savedata['mobile'] = $mobile;
  231. $savedata['code'] = $code;
  232. $savedata['action'] = 'yzm';
  233. $savedata['time'] = time();
  234. $savedata['sassid'] = $request->site['sassid'];
  235. (new SmsYzm)->insert($savedata);
  236. $data['status'] = 1;
  237. } else {
  238. $data = $send;
  239. }
  240. if($data['status'] == 1) {
  241. return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
  242. } else {
  243. return app('json')->fail($data['error']);
  244. }
  245. }
  246. /**
  247. * 忘记密码验证码
  248. * @param Request $request
  249. */
  250. public function forgetYzm(Request $request){
  251. [$mobile,$time,$token] = UtilService::getMore([
  252. ['mobile','','empty','请输入手机号码'],
  253. ['time',''],
  254. ['token','']
  255. ],$request,true);
  256. $secret_key = $request->site['secret_key'];
  257. $outStr = @crypto_decrypt(base64_decode($token), $secret_key);
  258. if($mobile != $outStr) {
  259. return app('json')->fail("获取验证码失败!");
  260. }
  261. //count
  262. $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
  263. if($count <= 0) {
  264. return app('json')->fail("账号未注册!");
  265. }
  266. $lastTime = 120;//
  267. $time = time();
  268. $smsTime = (new SmsYzm)->where('mobile',$mobile)
  269. ->where("action","forget_yzm")
  270. ->order("time desc")
  271. ->value("time");
  272. //验证码
  273. if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
  274. $data['status'] = 2;
  275. $data['time'] = $time - $smsTime;
  276. return app('json')->success($data);
  277. }
  278. //发送验证码
  279. $code = randString(6, true);
  280. $send = (new Sms)->SmsCode($mobile, "718570",$request->site['sassid'], array("1" => $code));
  281. if ($send['status'] == 1) {
  282. $savedata['mobile'] = $mobile;
  283. $savedata['code'] = $code;
  284. $savedata['action'] = 'forget_yzm';
  285. $savedata['time'] = time();
  286. $savedata['sassid'] = $request->site['sassid'];
  287. (new SmsYzm)->insert($savedata);
  288. $data['status'] = 1;
  289. } else {
  290. $data = $send;
  291. }
  292. if($data['status'] == 1) {
  293. return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
  294. } else {
  295. return app('json')->fail($data['error']);
  296. }
  297. }
  298. /**
  299. * 账号找回第一
  300. * @param Request $request
  301. */
  302. public function forget1(Request $request) {
  303. [$mobile,$yzm] = UtilService::getMore([
  304. ['mobile','','empty','请输入手机号码'],
  305. ['yzm','']
  306. ],$request,true);
  307. //判断验证码
  308. $bool = (new SmsYzm)->VerCode($mobile,$yzm,'forget_yzm',$request->site['sassid']);
  309. if(!$bool) {
  310. return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
  311. }
  312. //判断是否被注册了
  313. $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
  314. if($count <= 0) {
  315. return app('json')->fail("找不到账号!");
  316. }
  317. //生成MD5
  318. $param = ['mobile'=>$mobile,'sassid'=>$request->site['sassid'],'time'=>time()];
  319. $secret_key = $request->site['secret_key'];
  320. $token =base64_encode( @crypto_encrypt(json_encode($param), $secret_key));
  321. return app('json')->success([
  322. 'token' => $token
  323. ]);
  324. }
  325. /**
  326. * 账号找回第二
  327. * @param Request $request
  328. */
  329. public function forget2(Request $request) {
  330. $post = UtilService::getMore([
  331. ['token','','empty','参数错误'],
  332. ['password','','empty','请输入正确的密码']
  333. ],$request);
  334. $time = time();
  335. $secret_key = $request->site['secret_key'];
  336. $tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), $secret_key),true);
  337. //注册token大于30分钟或者超过30分钟
  338. if(empty($tokenData) || ($time - $tokenData['time']) > 30 * 60){
  339. return app('json')->fail("操作已过期,返回重新操作");
  340. }
  341. //判断是否被注册了
  342. $data = (new Member)->where('mobile',$tokenData['mobile'])->where('sassid',$request->site['sassid'])->find();
  343. if(empty($data)) {
  344. return app('json')->fail("找不到账号!");
  345. }
  346. $save['password'] = md5($post['password']);
  347. (new Member)->where('uid',$data['uid'])->save($save);
  348. return app('json')->success("找回成功!");
  349. }
  350. }