Login.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <?php
  2. namespace app\api\controller\v1;
  3. use app\BaseController;
  4. use app\model\api\Member;
  5. use app\model\api\SmsYzm;
  6. use app\Request;
  7. use library\services\UtilService;
  8. use library\utils\Sms;
  9. use think\facade\Db;
  10. class Login extends BaseController
  11. {
  12. /**
  13. * 登录
  14. * @param Request $request
  15. */
  16. public function l(Request $request) {
  17. [$userName,$passWord] = UtilService::getMore([
  18. ['userName','','empty','请输入账户账号'],
  19. ['passWord','','empty','请输入登录密码']
  20. ],$request,true);
  21. //获取登录
  22. $meberInfo = Member::login($userName,$passWord);
  23. if(empty($meberInfo)) {
  24. return app('json')->fail(Member::getErrorInfo('用户名错误,请重新输入'));
  25. }
  26. //生成令牌
  27. $token = Member::createToken($meberInfo, 'xxlm');
  28. if(empty($token)) {
  29. return app('json')->fail(Member::getErrorInfo());
  30. }
  31. Member::where('uid',$meberInfo['uid'])->save(['lasttime'=>time()]);
  32. $data['uid'] = $meberInfo['uid'];
  33. $data['ip'] = $request->ip();
  34. $data['time'] = time();
  35. Db::name("login_record")->insert($data);
  36. return app('json')->success([
  37. 'token' => $token,
  38. 'user_info' => [
  39. 'mobile' => $meberInfo->getData('mobile'),
  40. 'name' => $meberInfo->getData('name'),
  41. 'avatar' => $meberInfo->getData('avatar'),
  42. 'money' => $meberInfo->getData('money'),
  43. 'openid' => $meberInfo->getData('openid')
  44. ],
  45. ]);
  46. }
  47. /**
  48. * 获取验证码
  49. * @param Request $request
  50. */
  51. public function yzm(Request $request) {
  52. [$mobile,$time,$token] = UtilService::getMore([
  53. ['mobile','','empty','请输入手机号码'],
  54. ['time',''],
  55. ['token','']
  56. ],$request,true);
  57. $outStr = @crypto_decrypt(base64_decode($token), 'xxlm');
  58. if($mobile != $outStr) {
  59. return app('json')->fail("获取验证码失败!");
  60. }
  61. $lastTime = 120;
  62. $time = time();
  63. $smsTime = (new SmsYzm)->where('mobile',$mobile)
  64. ->where("action","yzm")
  65. ->order("time desc")
  66. ->value("time");
  67. //验证码
  68. if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
  69. $data['status'] = 2;
  70. $data['time'] = $time - $smsTime;
  71. return app('json')->success($data);
  72. }
  73. //发送验证码
  74. $code = randString(6, true);
  75. $send = (new Sms)->SmsCode($mobile, "718562", array("1" => $code,"2"=>"30"));
  76. if ($send['status'] == 1) {
  77. $savedata['mobile'] = $mobile;
  78. $savedata['code'] = $code;
  79. $savedata['action'] = 'yzm';
  80. $savedata['time'] = time();
  81. (new SmsYzm)->insert($savedata);
  82. $data['status'] = 1;
  83. } else {
  84. $data = $send;
  85. }
  86. if($data['status'] == 1) {
  87. return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
  88. } else {
  89. return app('json')->fail($data['error']);
  90. }
  91. }
  92. /**
  93. * 注册第一步
  94. * @param Request $request
  95. */
  96. public function reg1(Request $request) {
  97. [$mobile,$yzm] = UtilService::getMore([
  98. ['mobile','','empty','请输入手机号码'],
  99. ['yzm','']
  100. ],$request,true);
  101. //判断验证码
  102. $bool = (new SmsYzm)->VerCode($mobile,$yzm,'yzm');
  103. if(!$bool) {
  104. return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
  105. }
  106. //判断是否被注册了
  107. $count = (new Member)->where('mobile',$mobile)->count();
  108. if($count > 0) {
  109. return app('json')->fail("用户已经被注册,请勿重复操作!");
  110. }
  111. //生成MD5
  112. $param = ['mobile'=>$mobile,'time'=>time()];
  113. $token =base64_encode( @crypto_encrypt(json_encode($param), 'xxlm'));
  114. return app('json')->success([
  115. 'token' => $token
  116. ]);
  117. }
  118. /**
  119. * 注册第二步
  120. * @param Request $request
  121. */
  122. public function reg2(Request $request) {
  123. $post = UtilService::getMore([
  124. ['mobile',''],
  125. ['wechat',''],
  126. ['shopname',''],
  127. ['platform',''],
  128. ['password','','empty','请输入正确的密码'],
  129. ['tjUid','']
  130. ],$request);
  131. $time = time();
  132. /*$tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), 'xxlm'),true);
  133. //没有token或者超过30分钟
  134. if(empty($tokenData) || ($time - $tokenData['time']) > 30 * 60){
  135. return app('json')->fail("验证码过期,请重新获取");
  136. }*/
  137. //判断是否被注册了
  138. $count = (new Member)->where('mobile',$post['mobile'])->count();
  139. if($count > 0) {
  140. return app('json')->fail("用户已经被注册!");
  141. }
  142. //推荐码
  143. if(!empty($post['tjUid'])){
  144. $tjuid = crypto_decrypt(base64_decode($post['tjUid']),'xxlm');
  145. $save['i_uid'] = $tjuid;
  146. }
  147. $save['mobile'] = $post['mobile'];
  148. $save['wechat'] = $post['wechat'];
  149. $save['shopname'] = $post['shopname'];
  150. $save['platform'] = $post['platform'];
  151. $save['password'] = md5($post['password']);
  152. $save['regip'] = $request->ip();
  153. $save['regtime'] = $time;
  154. $save['lasttime'] = $time;
  155. $save['status'] = 1;
  156. $uid = (new Member)->insertGetId($save);
  157. $memberInfo = Member::where('uid',$uid)->find();
  158. //生成令牌
  159. $token = Member::createToken($memberInfo, 'xxlm');
  160. return app('json')->success([
  161. 'token' => $token,
  162. 'user_info' => [
  163. 'mobile' => $memberInfo->getData('mobile'),
  164. 'wechat' => $memberInfo->getData('wechat'),
  165. 'money' => $memberInfo->getData('money')
  166. ],
  167. ]);
  168. }
  169. /**
  170. * 忘记密码验证码
  171. * @param Request $request
  172. */
  173. public function forgetYzm(Request $request){
  174. [$mobile,$time,$token] = UtilService::getMore([
  175. ['mobile','','empty','请输入手机号码'],
  176. ['time',''],
  177. ['token','']
  178. ],$request,true);
  179. $secret_key = $request->site['secret_key'];
  180. $outStr = @crypto_decrypt(base64_decode($token), $secret_key);
  181. if($mobile != $outStr) {
  182. return app('json')->fail("获取验证码失败!");
  183. }
  184. $count = (new Member)->where('mobile',$mobile)->count();
  185. if($count <= 0) {
  186. return app('json')->fail("账号未注册!");
  187. }
  188. $lastTime = 120;
  189. $time = time();
  190. $smsTime = (new SmsYzm)->where('mobile',$mobile)
  191. ->where("action","forget_yzm")
  192. ->order("time desc")
  193. ->value("time");
  194. //验证码
  195. if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
  196. $data['status'] = 2;
  197. $data['time'] = $time - $smsTime;
  198. return app('json')->success($data);
  199. }
  200. //发送验证码
  201. $code = randString(6, true);
  202. $send = (new Sms)->SmsCode($mobile, "718570", array("1" => $code));
  203. if ($send['status'] == 1) {
  204. $savedata['mobile'] = $mobile;
  205. $savedata['code'] = $code;
  206. $savedata['action'] = 'forget_yzm';
  207. $savedata['time'] = time();
  208. (new SmsYzm)->insert($savedata);
  209. $data['status'] = 1;
  210. } else {
  211. $data = $send;
  212. }
  213. if($data['status'] == 1) {
  214. return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
  215. } else {
  216. return app('json')->fail($data['error']);
  217. }
  218. }
  219. /**
  220. * 重置密码第一步
  221. * @param Request $request
  222. */
  223. public function forget1(Request $request) {
  224. [$mobile,$yzm] = UtilService::getMore([
  225. ['mobile','','empty','请输入手机号码'],
  226. ['yzm','']
  227. ],$request,true);
  228. //判断验证码
  229. $bool = (new SmsYzm)->VerCode($mobile,$yzm,'forget_yzm');
  230. if(!$bool) {
  231. return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
  232. }
  233. //判断是否被注册了
  234. $count = (new Member)->where('mobile',$mobile)->count();
  235. if($count <= 0) {
  236. return app('json')->fail("找不到账号!");
  237. }
  238. //生成MD5
  239. $param = ['mobile'=>$mobile,'time'=>time()];
  240. $token =base64_encode( @crypto_encrypt(json_encode($param), 'xxlm'));
  241. return app('json')->success([
  242. 'token' => $token
  243. ]);
  244. }
  245. /**
  246. * 重置密码第二步
  247. * @param Request $request
  248. */
  249. public function forget2(Request $request) {
  250. $post = UtilService::getMore([
  251. ['token','','empty','参数错误'],
  252. ['password','','empty','请输入正确的密码']
  253. ],$request);
  254. $time = time();
  255. $secret_key = $request->site['secret_key'];
  256. $tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), $secret_key),true);
  257. //注册token大于30分钟或者超过30分钟
  258. if(empty($tokenData) || ($time - $tokenData['time']) > 30 * 60){
  259. return app('json')->fail("操作已过期,返回重新操作");
  260. }
  261. //判断是否被注册了
  262. $data = (new Member)->where('mobile',$tokenData['mobile'])->find();
  263. if(empty($data)) {
  264. return app('json')->fail("找不到账号!");
  265. }
  266. $save['password'] = md5($post['password']);
  267. (new Member)->where('uid',$data['uid'])->save($save);
  268. return app('json')->success("找回成功!");
  269. }
  270. }