package com.template.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.template.annotation.PassToken; import com.template.api.AppletLoginControllerAPI; import com.template.common.utils.AesUtils; import com.template.common.utils.HttpsClient; import com.template.common.utils.JWTUtil; import com.template.model.pojo.Admin; import com.template.model.pojo.AdminMenu; import com.template.model.pojo.PermissionSetting; import com.template.model.pojo.Users; import com.template.model.result.CommonResult; import com.template.services.AdminMenuService; import com.template.services.AdminService; import com.template.services.PermissionSettingService; import com.template.services.UsersService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.client.RestTemplate; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @Slf4j @Controller public class AppletLoginController implements AppletLoginControllerAPI { @Autowired UsersService usersService; @Autowired AdminService adminService; @Autowired AdminMenuService adminMenuService; @Autowired PermissionSettingService permissionSettingService; @Override @PassToken public String weixiaoAuth(String wxcode, String state) throws UnsupportedEncodingException { // 先获取wxcode log.info("wxcode参数=======>>>>wxcode: "+wxcode); log.info("state参数=======>>>>state: "+state); String tokenUrl = "https://open.wecard.qq.com/connect/oauth2/token"; Map tokenParams = new HashMap<>(); tokenParams.put("wxcode", wxcode); tokenParams.put("app_key", "4FD5599032819781"); tokenParams.put("app_secret", "0174DFB98063A612526C6B69F941E14A"); tokenParams.put("grant_type", "authorization_code"); tokenParams.put("redirect_uri", state); // 该地址需要与发起授权地址保持一直 try { // wecode换取token RestTemplate client = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity> request = new HttpEntity<>(tokenParams, headers); //ResponseEntity tokenResponse = client.postForEntity(tokenUrl, tokenParams, String.class);(需要加头部) ResponseEntity tokenResponse = client.postForEntity(tokenUrl, request, String.class); ObjectMapper mapper = new ObjectMapper(); Map jsonMap = mapper.readValue(tokenResponse.getBody(), new TypeReference>() { }); String accessToken = (String) jsonMap.get("access_token"); log.info("access_token参数=======>>>>accessToken: "+accessToken); // token换取用户信息 String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info"; Map userInfoParam = new HashMap<>(); userInfoParam.put("access_token", accessToken); log.info("请求地址=======>>>>userInfoUrl: "+userInfoUrl); log.info("请求参数=======>>>>userInfoParam: "+userInfoParam); // ResponseEntity userInfoResponse = client.postForEntity(userInfoUrl, userInfoParam, String.class);(需要加头部) HttpEntity> request2 = new HttpEntity<>(userInfoParam, headers); ResponseEntity userInfoResponse = client.postForEntity(userInfoUrl, request2, String.class); log.info("请求返回值=======>>>>userInfoUrl: "+userInfoResponse); Map userInfoMap = mapper.readValue(userInfoResponse.getBody(), new TypeReference>() { }); // // 身份证 String idCard = userInfoMap.get("id_card").toString(); System.out.println("idCard = " + idCard); // 用户姓名 String name = userInfoMap.get("name").toString(); String encodeName = URLEncoder.encode(name,"utf-8"); System.out.println("encodeName = " + encodeName); // 身份职称 String identityTitle = userInfoMap.get("identity_type").toString(); // 用户电子卡号/学工号 String cardNumber = userInfoMap.get("card_number").toString(); System.out.println("cardNumber = " + cardNumber); // 手机号 String telephone = userInfoMap.get("telephone").toString(); String headImage = userInfoMap.get("head_image").toString(); // 判断账号是否以添加, LambdaQueryWrapper wrapperU=new LambdaQueryWrapper<>(); wrapperU.eq(Users::getCardNumber,cardNumber); Users users = usersService.getOne(wrapperU); String token = JWTUtil.getUsersToken(cardNumber); String adminId=""; String adminMenuId=""; String adminMenuName=""; String usersId=""; String manager="0"; if (ObjectUtils.isNotEmpty(users)) { usersId = String.valueOf(users.getId()); // 通过用户id找到管理端用户id和角色id LambdaQueryWrapper wrapperA=new LambdaQueryWrapper<>(); wrapperA.eq(Admin::getUsersId,usersId); Admin admin = adminService.getOne(wrapperA); // 通过用户找到管理端用户和管理端角色,有则返回,没有则不返回 if (ObjectUtils.isNotEmpty(admin)) { adminId = String.valueOf(admin.getId()); adminMenuId = admin.getAdminMenuId(); AdminMenu adminMenu = adminMenuService.getById(adminMenuId); if (ObjectUtils.isNotEmpty(adminMenu)) { adminMenuName = adminMenu.getName(); } // 判断是否是管理员 PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId); if (ObjectUtils.isNotEmpty(permissionSetting)) { // 判断该用户是否拥有权限 // 判断该用户是否拥有权限 String processManagement = permissionSetting.getProcessManagement(); if (processManagement.equals("0")) { manager="1"; }else if (processManagement.contains("3")&&processManagement.contains("4")&&processManagement.contains("5")){ manager="1"; } } } users.setDepartment(identityTitle); users.setUserName(name); users.setIdCard(idCard); users.setCardNumber(cardNumber); users.setPhone(telephone); users.setHeadImage(headImage); usersService.updateById(users); }else { Users users1 = new Users(); users1.setDepartment(identityTitle); users1.setUserName(name); users1.setIdCard(idCard); users1.setCardNumber(cardNumber); users1.setPhone(telephone); users1.setHeadImage(headImage); usersService.save(users1); usersId=String.valueOf(users1.getId()); } String user_head = AesUtils.encrypt(adminId); // System.out.println("重定向路径=" + "redirect:"+ "https://chtech.ncjti.edu.cn/hotel/h5/#/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head); return "redirect:"+ "https://chtech.ncjti.edu.cn/hotel/h5/#/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head+"&name="+encodeName+"&telephone="+telephone+"&department="+identityTitle+"&manager="+manager; // return "redirect:"+ "http://192.168.161.33:8000/hotel/h5/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head+"&name="+encodeName+"&telephone="+telephone+"&department="+identityTitle+"&manager="+manager; } catch (Exception e) { e.printStackTrace(); return "redirect:" + "https://chtech.ncjti.edu.cn/hotel/h5/#/error/?errorMsg=" + URLEncoder.encode("获取用户信息失败", "utf-8"); // return "redirect:" + "http://192.168.161.33:8000/hotel/h5/#/error/?errorMsg=" + URLEncoder.encode("获取用户信息失败", "utf-8"); } } @Override public CommonResult getOpenid(String code) throws Exception { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + "wxd87cbe1db0437303" + "&secret=" + "18e17f97e674e1c03fc255f12d12ca4d" + "&code=" + code + "&grant_type=authorization_code"; String s = HttpsClient.httpsRequestReturnString(url, "GET", ""); JSONObject jsonObject = JSONObject.parseObject(s); return CommonResult.ok(jsonObject); // System.out.println("jsonObject = " + jsonObject); // if (!jsonObject.containsKey("openid")) { // return CommonResult.fail("code有误"); // } // String openid = jsonObject.getString("openid"); // System.out.println("openid = " + openid); // return CommonResult.ok(jsonObject); } }