xgl-case/src/main/java/com/nbclass/activity/controller/casesfirst/WxController.java
2021-12-03 18:27:07 +08:00

219 lines
7.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.nbclass.activity.controller.casesfirst;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.nbclass.activity.model.WeiXiUser;
import com.nbclass.activity.service.WxService;
import com.nbclass.exception.ParameterException;
import com.nbclass.util.HttpUtils;
import com.nbclass.util.JWTUtils;
import com.nbclass.vo.base.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 微信接口
* @author gao
* @datetime 2021年10月14日
*/
@Controller
@RequestMapping("/wx")
public class WxController {
/**
* wx的AppID
*/
private static final String appId = "wx013ea7738ce6991f";
/**
* wx的AppSecret
*/
private static final String AppSecret = "03255f509c6b53cb2b94c9bd21b8aaa8";
/**
* 企业微信corpid
*/
private static final String corpid = "wwc0b239a20872ff25";
/**
* 企业微信corpsecret(客户的secret)
*/
private static final String corpsecret = "VuJ-Sd2X-oUwFUCzzdQfDZDe0Ryb3IbvkczFu8KUP0o";
@Autowired
private WxService wxService;
@RequestMapping("/loginPage")
public String loginPage(){
return "loginPage";
}
@RequestMapping("/weixinLogin")
public String weixinLogin(){
return "weixinLogin";
}
@RequestMapping("/demo")
public String demo(){
return "demo";
}
/**
* 获取微信用户信息
* @param request
* @return
*/
@GetMapping("/getWxUser")
@ResponseBody
public Result getWxUser(HttpServletRequest request){
if(request.getParameter("code")==null){
throw new ParameterException("code参数异常!");
}
//获取code
String code = request.getParameter("code");
//获取access_token
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
url = String.format(url,appId,AppSecret,code);
JSONObject jsonObject = HttpUtils.httpGet(url);
if(jsonObject.getString("access_token")==null){
throw new ParameterException("access_token参数异常!");
}
if(jsonObject.getString("openid")==null){
throw new ParameterException("openid参数异常!");
}
String accessToken = jsonObject.getString("access_token");
String openid = jsonObject.getString("openid");
//String wxUnionId = jsonObject.getString("unionid");
//数据库查询是否有该openid如果有直接从数据库获取用户信息
int result = wxService.getOpenId(openid);
if(result == 0){
//获取用户信息
String url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
url2 = String.format(url2,accessToken,openid);
JSONObject jsonUser = HttpUtils.httpGet(url2);
WeiXiUser weiXiUser = jsonUser.toJavaObject(WeiXiUser.class);
//添加用户信息到数据库
wxService.saveWxUser(weiXiUser);
}
//数据库获取用户信息
WeiXiUser weiXiUser = wxService.getWxUser(openid);
WeiXiUser user = new WeiXiUser();
user.setId(weiXiUser.getId());
user.setOpenid(weiXiUser.getOpenid());
String token = "";
//生成token
String subject = JSON.toJSONString(user);
try {
token = JWTUtils.createJWT(UUID.randomUUID().toString(), "admin", subject, 7200 * 1000, null);
} catch (Exception e) {
e.printStackTrace();
}
Map<String,Object> map = new HashMap<>();
map.put("token",token);
map.put("nickname",weiXiUser.getNickname());
map.put("headimgurl",weiXiUser.getHeadimgurl());
//获取企业微信的access_token
/* String qyWxUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
qyWxUrl = String.format(qyWxUrl,corpid,corpsecret);
JSONObject qyWxJson = HttpUtils.httpGet(qyWxUrl);
if(qyWxJson.getString("access_token")==null){
throw new ParameterException("企业微信的access_token参数异常!");
}
String qyWxAccessToken = qyWxJson.getString("access_token");
//获取客户群列表
String qyWxListUrl = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/list?access_token=%s";
qyWxListUrl = String.format(qyWxListUrl,qyWxAccessToken);
String limit = "{\"limit\": 1000}";
String s1 = HttpUtil.doPostJson(qyWxListUrl, limit);
JSONObject jsonObject = JSON.parseObject(s1);
if(jsonObject.getString("group_chat_list")==null){
throw new ParameterException("企业微信的chatId参数异常!");
}
String s = jsonObject.toJSONString();
System.out.println(s);
Map groupChats = JSONObject.parseObject(s,Map.class);
JSONArray jsonArray = JSONArray.parseArray(groupChats.get("group_chat_list").toString());
//获取chatId
String chatId = jsonArray.getJSONObject(0).getString("chat_id");
//获取客户群详情
String khUrl = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=%s";
khUrl = String.format(khUrl,qyWxAccessToken);
String chat_id = "{\"chat_id\": \""+chatId+"\"}";
String s2 = HttpUtil.doPostJson(khUrl, chat_id);
System.out.println(s2);
String group_chat = JSON.parseObject(s2).get("group_chat").toString();
GroupChat groupChat = JSONObject.parseObject(group_chat, GroupChat.class);
System.out.println(groupChat);
List<MemberList> memberLists = groupChat.getMember_list();
List<String> list = new ArrayList<>();
for (MemberList memberList : memberLists) {
*//* if(wxUnionId.equals(memberList.getUnionid())){
}*//*
System.out.println(memberList.getUnionid());
}*/
return Result.success(map);
}
/**
* 查看用户基础信息
* @return
*/
@GetMapping("/getUserBasicData")
@ResponseBody
public Result getUserBasicData(HttpServletRequest request){
String token = request.getHeader("token");
String userId = JWTUtils.getUserId(token);
WeiXiUser weiXiUser = wxService.getUserBasicData(Long.parseLong(userId));
return Result.success(weiXiUser);
}
/**
* 更新用户基础信息
* @param weiXiUser
* @return
*/
@PostMapping("/updateBasicData")
@ResponseBody
public Result updateBasicData(WeiXiUser weiXiUser, HttpServletRequest request){
String token = request.getHeader("token");
String userId = JWTUtils.getUserId(token);
weiXiUser.setId(Long.parseLong(userId));
weiXiUser.setUpdateTime(new Date());
wxService.updateBasicData(weiXiUser);
return Result.success();
}
}