微信服务类
哪吒 2020/1/1
点击勘误issues (opens new window),哪吒感谢大家的阅读
# 微信服务类
# 结构
- im-pc 是聊天客户端,支持打包成exe 和 h5网页。
- im-server 是服务端代码,集成了ruoyi的模块。
# 优势
- PC端支持docx,xlsx,pdf,txt在线打开
- 手机app端支持使用系统自动软件打开office,pdf附件
- 支持图片右键复制为blob类型
- 附件图标支持office类型图标
- 支持ARM平台linux打包deb类型安装包
- 多终端支持:PC(windows、linux、mac、web)
- 手机(安卓、IOS、H5、小程序);
- 上传支持两种方案(直接存服务器和minio); 聊天记录存储在mongoDB; 支持国产化部署,服务端已对接到snowy开源项目(分支版本)。
//微信快捷登录
weChatQuickLogin函数 Java
/**
* 获取微信授权信息
*
* @param code 微信授权码
* @param operatorId 运营商ID
* @return 微信应用授权信息
* @throws Exception 如果获取过程中发生异常
*/
//根据code和operatorId获取微信授权信息
public WXAppAuthVO getWxCode(String code,String operatorId) throws Exception {
//获取appid和secret
String appid = wxConfigBean.getMaps().get(operatorId).getAppid();
String secret = wxConfigBean.getMaps().get(operatorId).getSecret();
//发送 code 到微信服务器换取 session_key
StringBuilder url = new StringBuilder()
.append("https://api.weixin.qq.com/sns/jscode2session")
.append("?appid=").append(appid)
.append("&secret=").append(secret)
.append("&js_code=").append(code)
.append("&grant_type=authorization_code");
//创建URL对象
URL urlGet = new URL(url.toString());
//打开连接
HttpURLConnection con = (HttpURLConnection) urlGet.openConnection();
//设置请求方法为GET
con.setRequestMethod("GET");
//获取输入流
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
//读取输入流
String inputLine;
//创建StringBuffer对象,用于存储响应数据
StringBuffer response = new StringBuffer();
//循环读取输入流
while ((inputLine = in.readLine()) != null) {
//将读取的数据添加到StringBuffer对象中
response.append(inputLine);
}
//关闭输入流
in.close();
//打印响应数据
log.info("response:{}",GsonUtils.getJsonFromObject(response));
//反序列化数据
return GsonUtils.getObjectFromJson(response.toString(), WXAppAuthVO.class);
}
/**
* 获取微信用户登录信息
*
* @param loginReq 登录请求对象
* @return 更新后的登录请求对象
* @throws Exception 如果获取过程中发生异常
*/
public LoginReq getLoginReqInfo(LoginReq loginReq) throws Exception {
//根据 code 和 operatorId 获取微信授权信息
WXAppAuthVO wxAppAuthVO = getWxCode(loginReq.getCode(),loginReq.getOperatorId());
//获取 session_key
String sessionKey = wxAppAuthVO.getSession_key();
//使用 session_key 对 encryptedData 进行解密
String decryptedData = WeChatUtil.decryptData(loginReq.getEncryptedData(),sessionKey,loginReq.getIv());
log.info("==>解析数据 {}",decryptedData);
//解密后得到的数据包含了 用户的手机号,以及 unionId(如果用户已绑定公众号) // 解析响应结果
WxUserInfo wxUserInfo = GsonUtils.getObjectFromJson(decryptedData, WxUserInfo.class);
//返回 openid 和手机号等信息
loginReq.setWxOpenId(wxAppAuthVO.getOpenid());
loginReq.setMobile(wxUserInfo.getPurePhoneNumber());
return loginReq;
}