package com.ruoyi.abuwxapi; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.abuwx.domain.AbucoderWxuser; import com.ruoyi.abuwx.service.IAbucoderWxuserService; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.framework.config.ServerConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/wxapi/") public class WxLoginController { private static final Logger log = LoggerFactory.getLogger(WxLoginController.class); @Autowired private IAbucoderWxuserService iAbucoderWxuserService; @Autowired private ServerConfig serverConfig; /** * 你自己的微信小程序APPID */ private final static String AppID = "你自己的微信小程序APPID"; /** * 你自己的微信APP密钥 */ private final static String AppSecret = "你自己的微信APP密钥"; /** * 登录时获取的 code(微信官方提供的临时凭证) * @param object * @return */ @PostMapping("/wxlogin") public AjaxResult wxLogin(@RequestBody JSONObject object){ //微信官方提供的微信小程序登录授权时使用的URL地址 String url = "https://api.weixin.qq.com/sns/jscode2session"; log.info("微信登录,传入参数:"+object); /** * 拼接需要的参数 * appid = AppID 你自己的微信小程序APPID * js_code = AppSecret 你自己的微信APP密钥 * grant_type=authorization_code = code 微信官方提供的临时凭证 */ String params = StrUtil.format("appid={}&secret={}&js_code={}&grant_type=authorization_code", AppID, AppSecret, object.get("code")); //开始发起网络请求,若依管理系统自带网络请求工具,直接使用即可 String res = HttpUtils.sendGet(url,params); JSONObject jsonObject = JSON.parseObject(res); String openid = (String) jsonObject.get("openid"); if (StrUtil.isEmpty(openid)) { return AjaxResult.error("未获取到openid"); } /**先通过openid来查询是否存在*/ AbucoderWxuser abucoderWxuser = iAbucoderWxuserService.selectAbucoderWxuserOpenID(openid); if (abucoderWxuser == null){ /**如果不存在就插入到我们的数据库里*/ AbucoderWxuser wxuser = new AbucoderWxuser(); wxuser.setOpenid(openid); wxuser.setCreateTime(DateUtils.getNowDate()); iAbucoderWxuserService.insertAbucoderWxuser(wxuser); /**返回结果集到前段*/ return AjaxResult.success(wxuser); }else { /**返回结果集到前段*/ return AjaxResult.success(abucoderWxuser); } } @PostMapping("/upload") @ResponseBody public AjaxResult uploadFile(MultipartFile file) throws Exception { System.out.println(file); try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("url", url); ajax.put("fileName", fileName); ajax.put("newFileName", FileUtils.getName(fileName)); ajax.put("originalFilename", file.getOriginalFilename()); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } /** * 保存昵称与头像信息到用户信息里 * @param object * @return */ @PostMapping("/saveUserInfo") @ResponseBody public AjaxResult saveUserInfo(@RequestBody JSONObject object){ System.out.println(object); AbucoderWxuser abucoderWxuser = iAbucoderWxuserService.selectAbucoderWxuserOpenID(String.valueOf(object.get("openid"))); if (StringUtils.hasLength(String.valueOf(object.get("nickName")))){ abucoderWxuser.setNickname(String.valueOf(object.get("nickName"))); abucoderWxuser.setCreateBy(String.valueOf(object.get("nickName"))); } if (StringUtils.hasLength(String.valueOf(object.get("avatarUrl")))){ abucoderWxuser.setAvatar(String.valueOf(object.get("avatarUrl"))); } abucoderWxuser.setUpdateTime(DateUtils.getNowDate()); iAbucoderWxuserService.updateAbucoderWxuser(abucoderWxuser); //返回前段需要的数据 return AjaxResult.success(abucoderWxuser); } }