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.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.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; 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); //获取微信信息添加到数据库 //先根据openid查询用户信息 MpOpenId userInfo = mpOpenIdDao.getInfoByOpenId(wxMpUser.get("openid").toString()); if(userInfo == null){ //数据库没有时添加到数据库中 userInfo = new MpOpenId(); userInfo.setOpenId(wxMpUser.get("openid").toString()); mpOpenIdDao.insert(userInfo); } //授权完成之后,跳转到具体的功能页面 //生成token,按照一定规则生成字符串,可以包含用户信息 String token= JwtHelper.createToken(userInfo.getId(),userInfo.getNickName()); //localhost:8080/weixin?a=1&token=222 if(returnUrl.indexOf("?")==-1){//若returnUrl中没有参数 return "redirect:"+returnUrl+"?token="+token; }else{ return "redirect:"+returnUrl+"&token="+token; } } }