企业微信扫码登陆

编程入门 行业动态 更新时间:2024-10-11 05:25:57

<a href=https://www.elefans.com/category/jswz/34/1769442.html style=企业微信扫码登陆"/>

企业微信扫码登陆

以下是实现的pc端企微扫码登陆,话不多时,直接上代码。。。

第1步:企业微信自建应用

第二步:获取到之后拿到

整体流程:
1.企业发起授权登录请求,企业微信用户允许授权后,企业微信会重定向到企业网站,并且带上授权临时票据code参数;
2.然后企业应用通过 corpid 和 corpsecret 获取access_token ;
3.企业应用通过 access_token 和 code 获取用户身份,进入相应的系统。

相关的代码 如下:
1.通过后端获取到信息,前端加载二维码

   /*** 加载二维码** @return*/@GetMapping("getWecom")@ApiOperation("企微登陆获取二维码信息")@ResponseBodypublic AjaxResult getErWeiMa() throws UnsupportedEncodingException {AjaxResult res = new AjaxResult();res.setData(qwWeiXinUtil.loginGetErWeiMa());return res;}

2.根据返回的code与accessToken获取用户信息

@GetMapping("loginQwOrGetInfo")@ApiOperation("回调并获取用户信息")public AjaxResult getCode(HttpServletRequest request, String code) {if(StringUtils.isEmpty(code)){AjaxResult.error("请重新扫码登陆");}try {AjaxResult ajax = AjaxResult.success();//todo 此处是前端传入codeString userId = qwWeiXinUtil.getUserID(code);WeiXinUserInfoDTO weiXinUserInfoDTO = qwWeiXinUtil.getUserInfo(userId);//获取到手机号并与库中关联并生成令牌String token = loginService.loginByWecom(weiXinUserInfoDTO.getMobile());log.info(token);ajax.setData(token);return ajax;} catch (Exception e) {return AjaxResult.error(e.getMessage());}}

以下是用到的相关的工具类

package com.cogo.framework.util;import com.alibaba.fastjson.JSONObject;
import com.cogomon.core.redis.RedisCache;
import com.cogomon.utils.StringUtils;
import com.cogo.core.domain.vo.WeiXinLoginDTO;
import com.cogo.core.domain.vo.WeiXinUserInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.UnsupportedEncodingException;
import java.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;@Component
@Slf4j
public class QwWeiXinUtil {@Autowiredprivate RedisCache redisCache;@Autowiredprivate  WecomUtil wecomUtil;/*** 获取用户ID** @param accessToken* @param code* @return*/public  String getUserIDByToken(String accessToken, String code) {//1.获取请求的urlString url = wecomUtil.getUserIDUrl.replace("ACCESS_TOKEN", accessToken).replace("CODE", code);//2.调用接口,发送请求,获取成员JSONObject jsonObject = SendRequest.sendGet(url);//3.错误消息处理if (null != jsonObject && 0 != jsonObject.getIntValue("errcode")) {log.error("获取成员失败 errcode:{} errmsg:{}", jsonObject.getIntValue("errcode"), jsonObject.getString("errmsg"));} else {log.info("用户ID:" + jsonObject.getString("UserId"));log.info("OpenID:" + jsonObject.getString("OpenId"));if (!StringUtils.isEmpty(jsonObject.getString("UserId"))) {return jsonObject.getString("UserId");} else if (jsonObject.getString("OpenId") != null) {log.info("该用户不是本企业人员,OpenID为:" + jsonObject.getString("OpenId"));return null;}}return null;}/*** 初始加载二维码** @return* @throws UnsupportedEncodingException*/public  WeiXinLoginDTO loginGetErWeiMa() throws UnsupportedEncodingException {String redirect_uri = URLEncoder.encode(wecomUtil.redirectUri, "utf-8");WeiXinLoginDTO weiXinLoginDTO = new WeiXinLoginDTO();weiXinLoginDTO.setAppid(wecomUtil.appId);weiXinLoginDTO.setAgentid(wecomUtil.agentId);weiXinLoginDTO.setRedirectUri(redirect_uri);return weiXinLoginDTO;}/*** 获取token** @return*/public  String getToken() {String token = getFirstAccessToken(wecomUtil.appId, wecomUtil.secret);redisCache.setCacheObject("qwChatToken", token, 100, TimeUnit.SECONDS);return token;}/*** 获取token** @param appid* @param appsecret* @return*/public  String getFirstAccessToken(String appid, String appsecret) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String saveDate = sdf.format(new Date());log.info("获取微信TOKN请求开始,当前时间:" + saveDate);String requestUrl = wecomUtil.accessTokenUrl.replace("{corpId}", appid).replace("{corpsecret}", appsecret);JSONObject jsonObject = SendRequest.sendGet(requestUrl);// 如果请求成功if (null != jsonObject && jsonObject.getIntValue("errcode") == 0) {try {log.info("获取的token: " + jsonObject.getString("access_token"));log.info("时间" + saveDate);return jsonObject.getString("access_token");} catch (Exception e) {// 获取token失败log.error("获取token失败 errcode:{} errmsg:{}",jsonObject.getString("errmsg"));}} else {log.error("获取token失败 errcode:{} errmsg:{}",jsonObject.getString("errmsg"));}return null;}/*** 获取用户** @param accessToken* @param userId* @return*/public  WeiXinUserInfoDTO getUserInfoByID(String accessToken, String userId) {//1.获取请求的urlString url = wecomUtil.getUserUrl.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);//2.调用接口,发送请求,获取成员JSONObject jsonObject = SendRequest.sendGet(url);//3.错误消息处理if (null != jsonObject && 0 != jsonObject.getIntValue("errcode")) {log.error("获取成员失败 errcode:{} errmsg:{}", jsonObject.getIntValue("errcode"), jsonObject.getString("errmsg"));} else {log.info("用户ID:" + jsonObject.getString("userid"));log.info("用户名称:" + jsonObject.getString("name"));log.info("用户手机号:" + jsonObject.getString("mobile"));log.info("用户邮箱:" + jsonObject.getString("email"));WeiXinUserInfoDTO weiXinUserInfoDTO = new WeiXinUserInfoDTO();weiXinUserInfoDTO.setUserid(jsonObject.getString("userid"));weiXinUserInfoDTO.setName(jsonObject.getString("name"));weiXinUserInfoDTO.setMobile(jsonObject.getString("mobile"));weiXinUserInfoDTO.setEmail(jsonObject.getString("email"));weiXinUserInfoDTO.setAvatar(jsonObject.getString("avatar"));//头像weiXinUserInfoDTO.setEnable(jsonObject.getString("enables"));//成员启用状态。1表示启用的成员,0表示被禁用。注意,服务商调用接口不会返回此字段return weiXinUserInfoDTO;}return null;}/*** 获取用户ID** @param code*/public  String getUserID(String code) {log.info("code:" + code);//逻辑判断token是否过期,如果过期刷新,没有过期直接拿来使用Object qwChatToken = redisCache.getCacheObject("qwChatToken");String token =qwChatToken !=null ? qwChatToken.toString() : this.getToken();return this.getUserIDByToken(token, code);}/*** 获取用户信息** @param userId* @return*/public  WeiXinUserInfoDTO getUserInfo(String userId) {//逻辑判断token是否过期,如果过期刷新,没有过期直接拿来使用String token = this.getToken();//根据userID和token获取用户的基本信息WeiXinUserInfoDTO weiXinUserInfoDTO = this.getUserInfoByID(token, userId);return weiXinUserInfoDTO;}
}

获取配置的工具类

package com.cogo.framework.util;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;/*** 微信配置** @author wangjunjie* @version 1.0* @date 2023/5/30 20:50*/
@Configuration
public class WecomUtil {//企业ID@Value("${qwchat.appId}")public String appId;//应用AgentId@Value("${qwchat.agentId}")public  String agentId;//第三方网站指定自己的端口@Value("${qwchat.redirectUri}")public  String redirectUri;@Value("${qwchat.secret}")public  String secret;public  String accessTokenUrl;@Value("${qwchat.accessTokenUrl}")public void setAccessTokenUrl(String accessTokenUrl) {this.accessTokenUrl = accessTokenUrl;}public String getUserIDUrl;@Value("${qwchat.getUserIDUrl}")public void setGetUserIDUrl(String getUserIDUrl) {this.getUserIDUrl = getUserIDUrl;}public  String getUserUrl;@Value("${qwchat.getUserUrl}")public void setGetUserUrl(String getUserUrl) {this.getUserUrl = getUserUrl;}}

更多推荐

企业微信扫码登陆

本文发布于:2024-02-13 21:26:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760809.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:企业   微信扫码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!