| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- package com.dtb.portal.controller;
- import com.alibaba.fastjson.JSONObject;
- import com.dtb.portal.config.interceptor.LoginClassAnnotation;
- import com.dtb.portal.controller.view.RestResponse;
- import com.dtb.portal.entity.SysUser;
- import com.dtb.portal.service.impl.SysUserServiceImpl;
- import com.dtb.portal.util.WxPhoneNumberUtils;
- import io.swagger.annotations.*;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletRequest;
- @Slf4j
- @RestController
- @Api(tags = {"登录控制器"}, value = "LoginController")
- @LoginClassAnnotation
- public class LoginController {
- @Autowired
- private RedisTemplate<String, String> redisTemplate;
- @Autowired
- private SysUserServiceImpl userService;
- @ApiOperation("登录")
- @GetMapping("/login")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "accountName", required = true, value = "用户名"),
- @ApiImplicitParam(name = "password", required = true, value = "密码"),
- })
- public RestResponse<SysUser> login(@RequestParam(name = "accountName", required = true) String accountName,
- @RequestParam(name = "password", required = false) String password, HttpServletRequest request) {
- SysUser sysUser = userService.login(accountName, password);
- return RestResponse.ok(sysUser);
- }
- @ApiOperation("登出")
- @GetMapping("/logout")
- public RestResponse<?> logout(HttpServletRequest request) {
- return RestResponse.ok();
- }
- /* @ApiOperation("生成验证码")
- @GetMapping("generateCode")
- RestResponse<Map<String, Object>> getCodeImage() {
- return RestResponse.ok(getRandomCodeImage());
- }*/
- @ApiOperation(value = "APP微信登录")
- @RequestMapping(value = "loginByWxApp", method = RequestMethod.GET)
- @ApiImplicitParams({
- @ApiImplicitParam(name = "code", required = true, value = "微信登录code"),
- @ApiImplicitParam(name = "avatarUrl", required = false, value = "头像URL"),
- @ApiImplicitParam(name = "nickName", required = false, value = "昵称")
- })
- public RestResponse<SysUser> loginByWxApp(
- @RequestParam(value = "code", required = true) String code,
- @RequestParam(value = "avatarUrl", required = false) String avatarUrl,
- @RequestParam(value = "nickName", required = false) String nickName) {
- log.info("收到APP微信登录请求 - code: {}, nickName: {}", code, nickName);
- try {
- SysUser sysUser = userService.loginByWxApp(code, avatarUrl, nickName);
- log.info("APP微信登录成功 - userId: {}, openId: {}", sysUser.getId(), sysUser.getOpenId());
- return RestResponse.ok(sysUser);
- } catch (Exception e) {
- log.error("APP微信登录失败 - code: {}, error: {}", code, e.getMessage());
- throw e;
- }
- }
- @ApiOperation(value = "小程序微信登录")
- @RequestMapping(value = "loginByWxMini", method = RequestMethod.GET)
- @ApiImplicitParams({
- @ApiImplicitParam(name = "code", required = true, value = "微信登录code"),
- @ApiImplicitParam(name = "phoneCode", required = true, value = "手机号code")
- })
- public RestResponse<SysUser> loginByWxMini(
- @RequestParam(value = "code", required = true) String code,
- @RequestParam(value = "phoneCode", required = true) String phoneCode) {
- log.info("收到小程序微信登录请求 - code: {}, phoneCode: {}", code, phoneCode);
- try {
- SysUser sysUser = userService.loginByWxMini(code, phoneCode);
- log.info("小程序微信登录成功 - userId: {}, openId: {}", sysUser.getId(), sysUser.getOpenId());
- return RestResponse.ok(sysUser);
- } catch (Exception e) {
- log.error("小程序微信登录失败 - code: {}, phoneCode: {}, error: {}", code, phoneCode, e.getMessage());
- throw e;
- }
- }
- @ApiOperation(value = "发送短信验证码")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "phone", required = true, value = "手机号")
- })
- @RequestMapping(value = "sendSms", method = RequestMethod.GET)
- public RestResponse<Object> sendSms(@RequestParam(value = "phone") String phone) {
- userService.sendSms(phone);
- return RestResponse.ok();
- }
- @ApiOperation(value = "短信验证码登录")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "phone", required = true, value = "手机号"),
- @ApiImplicitParam(name = "checkCode", required = true, value = "验证码"),
- @ApiImplicitParam(name = "openId", required = false, value = "微信openId")
- })
- @RequestMapping(value = "loginBySms", method = RequestMethod.GET)
- public RestResponse<SysUser> loginBySms(@RequestParam(value = "phone") String phone,
- @RequestParam(value = "checkCode") String checkCode,
- @RequestParam(value = "openId", required = false) String openId) {
- SysUser sysUser = userService.loginBySms(phone, checkCode, openId);
- // newUser 字段已在 service 层设置
- return RestResponse.ok(sysUser);
- }
- @ApiOperation(value = "绑定手机号")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", required = true, value = "用户id"),
- @ApiImplicitParam(name = "phone", required = true, value = "手机号"),
- @ApiImplicitParam(name = "checkCode", required = true, value = "验证码")
- })
- @RequestMapping(value = "bindPhone", method = RequestMethod.GET)
- public RestResponse<SysUser> bindPhone(
- @RequestParam(value = "id") String id,
- @RequestParam(value = "phone") String phone,
- @RequestParam(value = "checkCode") String checkCode) {
- SysUser sysUser = userService.bindPhone(id, phone, checkCode);
- return RestResponse.ok(sysUser);
- }
- @RequestMapping(value = "forgotPasswordByPhone", method = RequestMethod.GET)
- public RestResponse<SysUser> forgotPasswordByPhone(
- @RequestParam(value = "phone") String phone,
- @RequestParam(value = "password") String password,
- @RequestParam(value = "checkCode") String checkCode) {
- SysUser sysUser = userService.forgotPasswordByPhone(phone,password, checkCode);
- return RestResponse.ok(sysUser);
- }
- @RequestMapping(value = "forgotPassword", method = RequestMethod.GET)
- public RestResponse<SysUser> forgotPassword(
- @RequestParam(value = "phone") String phone) {
- SysUser sysUser = userService.forgotPassword(phone);
- return RestResponse.ok(sysUser);
- }
- @ApiOperation(value = "微信手机号登录")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "phoneCode", required = true, value = "微信获取手机号的code"),
- @ApiImplicitParam(name = "loginCode", required = true, value = "微信登录获取openId的code")
- })
- @RequestMapping(value = "loginByWxPhoneNumber", method = RequestMethod.GET)
- public RestResponse<SysUser> loginByWxPhoneNumber(
- @RequestParam(value = "phoneCode", required = true) String phoneCode,
- @RequestParam(value = "loginCode", required = true) String loginCode) {
- log.info("收到微信手机号登录请求 - phoneCode: {}, loginCode: {}", phoneCode, loginCode);
- try {
- SysUser sysUser = userService.loginByWxPhoneNumber(phoneCode, loginCode);
- log.info("微信手机号登录成功 - userId: {}, phone: {}", sysUser.getId(), sysUser.getPhone());
- return RestResponse.ok(sysUser);
- } catch (Exception e) {
- log.error("微信手机号登录失败 - phoneCode: {}, loginCode: {}, 错误: {}", phoneCode, loginCode, e.getMessage());
- throw e;
- }
- }
- @ApiOperation(value = "调试微信手机号code")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "code", required = true, value = "微信获取手机号的code")
- })
- @RequestMapping(value = "debugWxPhoneCode", method = RequestMethod.GET)
- public RestResponse<Object> debugWxPhoneCode(
- @RequestParam(value = "code", required = true) String code) {
- String appId = userService.getWxAppId();
- String appSecret = userService.getWxAppSecret();
- JSONObject debugInfo = WxPhoneNumberUtils.debugCode(appId, appSecret, code);
- return RestResponse.ok(debugInfo);
- }
- @ApiOperation(value = "调试APP微信配置")
- @RequestMapping(value = "debugWxAppConfig", method = RequestMethod.GET)
- public RestResponse<Object> debugWxAppConfig() {
- JSONObject debug = new JSONObject();
- try {
- String appId = userService.getWxAppAppId();
- String appSecret = userService.getWxAppAppSecret();
-
- debug.put("appId", appId);
- debug.put("appSecret", "***" + appSecret.substring(appSecret.length() - 4)); // 只显示最后4位
-
- // 测试获取access_token
- String url = String.format(
- "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",
- appId, appSecret);
-
- JSONObject result = WxPhoneNumberUtils.httpGet(url);
- debug.put("test_result", result);
-
- return RestResponse.ok(debug);
- } catch (Exception e) {
- debug.put("error", e.getMessage());
- return RestResponse.ok(debug);
- }
- }
- }
|