package com.dy.pmsWechat.login; import com.alibaba.fastjson2.JSONObject; import com.dy.pmsGlobal.daoMp.MpOpenIdMapper; import com.dy.pmsGlobal.pojoMp.MpOpenId; import com.dy.pmsWechat.util.JwtUtil; import com.dy.pmsWechat.util.RestTemplateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; @Service public class WeChatService { @Value("${wechat.appId}") private String appId; @Value("${wechat.appSecret}") private String appSecret; @Value("${wechat.loginUrl}") private String loginUrl; @Value("${wechat.jwt.secret-key}") private String secretKey; @Value("${wechat.jwt.ttl}") private long ttlMillis; private final RestTemplateUtil restTemplateUtil; private MpOpenIdMapper mpOpenIdDao; public WeChatService(RestTemplateUtil restTemplateUtil) { this.restTemplateUtil = restTemplateUtil; } @Autowired private void setMpOpenIdDao(MpOpenIdMapper mpOpenIdDao) { this.mpOpenIdDao = mpOpenIdDao; } public JSONObject login(String code) throws IOException { Map queryParams = new HashMap<>(); queryParams.put("appid", appId); queryParams.put("secret", appSecret); queryParams.put("js_code", code); queryParams.put("grant_type", "authorization_code"); Map headerParams = new HashMap<>(); JSONObject wxMpUser = restTemplateUtil.get(loginUrl, queryParams, headerParams); String openId = wxMpUser.get("openid").toString(); //获取微信信息添加到数据库 //先根据openid查询用户信息 MpOpenId userInfo = mpOpenIdDao.getInfoByOpenId(openId); if(userInfo == null){ //数据库没有时添加到数据库中 userInfo = new MpOpenId(); userInfo.setOpenId(openId); userInfo.setCreateTime(new Date()); mpOpenIdDao.insert(userInfo); } //授权完成之后,跳转到具体的功能页面 //生成token,按照一定规则生成字符串,可以包含用户信息 //登陆controller中生成,返回给客户端 Map claims = new HashMap<>(); claims.put("openId",openId); String token = JwtUtil.createJwt(secretKey,ttlMillis,claims); return new JSONObject().fluentPut("token",token); } }