Vue 企业微信 扫码登陆

目录

前期准备

创建企业应用

获取AgentId和Secret以及appid(企业id)

 配置回调授权登陆和网页授权可信域名(这到时候与redirect_uri保持一致)

 开发部分

在public下index.html增加js引用

vue部分


前期准备

  • 创建企业应用

  • 获取AgentId和Secret以及appid(企业id)

  •  配置回调授权登陆和网页授权可信域名(这到时候与redirect_uri保持一致)

 开发部分

  • 在public下index.html增加js引用

<script src="https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js"></script>
  • vue部分

<div id="wx_qrcode" class="WxQrCode" />
    
    // 监听路有变化获取code参数值
    watch: {
      "$route.query": {
        handler(newVal, oldVal) {
          console.info(newVal, oldVal);
          this.authCode = this.$route.query["code"];
          this.authCode && this.getStaffInfo(); //获取到code,调用后端接口换取token
        },
        deep: true,
        immediate: true,
      },
    },
    //挂载调用初始化二维码方法 方法在下面
    mounted() {
      this.initCode();
    },
// 构造实例的方法 放在methods里
      initCode() {
        new WwLogin({
          id: "wx_qrcode",
          // [appid] 企业微信的CorpID,在企业微信管理端查看
          appid: "",
          // [agentid] 授权方的网页应用ID,在具体的网页应用中查看
          agentid: "",
          // [redirect_uri] 重定向地址,需要进行UrlEncode 可以增加path
          redirect_uri: encodeURIComponent("https://xxxx"),
          // [state] 用于保持请求和回调的状态,授权请求后原样带回给企业。
          // 该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验
          state: "",	//填写你的签名
          // [href] 自定义样式链接,企业可根据实际需求覆盖 默认样式
          href: "",
        });
      },

  • 服务端代码
     

    //控制器层
    
    	/**
    	 * 企业微信扫码登陆
    	 *
    	 * @param jsonObject
    	 * @return
    	 */
    	@ApiOperation("企业微信扫码登陆")
    	@PostMapping("/wxQrCodeLogin")
    	public Result<JSONObject> wxQrCodeLogin(@RequestBody JSONObject jsonObject) {
    		Result<JSONObject> result = new Result<JSONObject>();
    		String code = jsonObject.getString("code");
    		String appid = jsonObject.getString("appid");
    		String userId = weChatService.getUserId(code);
    		CorpWechatUserInfoVO userInfo = weChatService.getUserInfo(userId);
    
    		//校验用户有效性
    		SysUser sysUser = sysUserService.getUserByPhone(code);
    		result = sysUserService.checkUserIsEffective(sysUser);
    		if(!result.isSuccess()) {
    			return result;
    		}
    
    		String smscode = jsonObject.getString("captcha");
    //		Object code = redisUtil.get(code);
    		if (!smscode.equals(code)) {
    			result.setMessage("手机验证码错误");
    			return result;
    		}
    		//用户信息
    		userInfo(sysUser, result);
    		//添加日志
    		baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
    
    		return result;
    	}
    //service层
    
    
    public interface ICorpWeChatService {
        /**
         * 获取Token
         */
        String getToken();
    
        void getToken(String corpId);
    
        /**
         * 获取用户ID
         */
        String getUserId(String code);
    
        void getUserId(String code, String corpId);
    
        /**
         * 获取用户信息
         */
        CorpWechatUserInfoVO getUserInfo(String userId);
    
        void getUserInfo(String userId, String corpId);
    }
    
    
    //impl
    
    import com.alibaba.fastjson.JSONObject;
    import lombok.extern.slf4j.Slf4j;
    import org.jeecg.common.util.HttpUtils;
    import org.jeecg.common.util.RedisUtil;
    import org.jeecg.modules.system.service.ICorpWeChatService;
    import org.jeecg.modules.system.vo.CorpWechatUserInfoVO;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;
    
    @Slf4j
    @Service
    public class ICorpWeChatServiceImpl implements ICorpWeChatService {
    
        @Autowired
        @Lazy
        private RedisUtil redisUtil;
    
        private final String corpIdKey = "";
        private final String iFBootCorpId = "";
        private final String iFBootCorpSecret = "";
        private final Long time = 600000L;
    
        /**
         * 获取用户资料uri
         */
        private final String userIdUri = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo";
    
        /**
         * 获取access_token uri
         */
        private final String accessTokenUri = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
    
    
        /**
         * 读取通讯录用户信息uri
         */
        private final String getUserInfoUri = "https://qyapi.weixin.qq.com/cgi-bin/user/get";
    
    
    
        @Override
        public String getToken() {
            Object accessToken = redisUtil.get(corpIdKey + iFBootCorpId);
            if(!StringUtils.isEmpty(accessToken)){
                return accessToken.toString();
            }
            //请求参数
            String params = "corpid=" + iFBootCorpId + "&corpsecret=" + iFBootCorpSecret;
            //发送请求
            String sr = HttpUtils.sendGet(accessTokenUri, params);
            //解析相应内容(转换成json对象)
            JSONObject json = JSONObject.parseObject(sr);
            //获取会话密钥(access_token)
            String access_token = json.get("access_token").toString();
            redisUtil.set(corpIdKey + iFBootCorpId, access_token, time);
            return access_token;
        }
    
        @Override
        public void getToken(String appid) {
    
        }
    
        @Override
        public String getUserId(String code) {
            //请求参数 access_token=ACCESS_TOKEN&code=CODE
            String params = "access_token=" + getToken() + "&code=" + code;
            //发送请求
            String sr = HttpUtils.sendGet(userIdUri, params);
            //解析相应内容(转换成json对象)
            JSONObject json = JSONObject.parseObject(sr);
            //获取会话密钥(access_token)
            String userid = json.get("userid").toString();
            return userid;
        }
    
        @Override
        public void getUserId(String code, String corpId) {
    
        }
    
        @Override
        public CorpWechatUserInfoVO getUserInfo(String userId) {
            //请求参数 access_token=ACCESS_TOKEN&userid=USERID
            String params = "access_token=" + getToken() + "&userid=" + userId;
            //发送请求
            String sr = HttpUtils.sendGet(getUserInfoUri, params);
            //解析相应内容(转换成json对象)
            JSONObject json = JSONObject.parseObject(sr);
            String errcode = json.get("errcode").toString();
            if(!"0".equals(errcode)){
                throw new RuntimeException("getUserInfo error");
            }
            CorpWechatUserInfoVO userInfoVO = JSONObject.parseObject(sr, CorpWechatUserInfoVO.class);
            return userInfoVO;
        }
    
        @Override
        public void getUserInfo(String userId, String corpId) {
    
        }
    }
    

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue企业微信扫码登录是一种在Vue框架下实现的方式,用于实现用户通过扫描企业微信二维码进行系统登录的需求。在实现这个需求时,需要解决两个关键技术问题。首先是如何在网页端生成企业微信的二维码,其次是用户扫码完成后如何确定是哪个用户扫描的二维码,或者如何将这个信息告知后端。下面我将一步步为您解释如何实现这个需求。 首先,生成企业微信的二维码可以通过构造扫码登录链接来实现。在企业微信扫码登录流程中,有两种方法可以构造扫码登录链接:一种是构造独立窗口登录二维码,另一种是内嵌登录二维码。根据您的需求,内嵌登录二维码更符合要求。 其次,为了确定是哪个用户扫描的二维码,或者将这个信息告知后端,需要进行企业微信后台管理平台的配置。您可以登录企业微信后台管理平台,通过扫描企业微信二维码进入管理平台。请注意,只有企业的管理员角色才能登录进入管理平台。如果您没有权限,可以请管理员帮助您赋予权限。如果没有企业或者想先进行测试,您可以在企业微信的app端上以个人为主体创建一个企业组织。 通过以上步骤,您就可以在Vue框架下实现企业微信扫码登录的需求了。希望对您有所帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Vue 实现企业微信扫码登录](https://blog.csdn.net/weixin_36894745/article/details/106125761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue实现网页端企业微信扫码登录功能(前端部分)](https://blog.csdn.net/weixin_38611617/article/details/128643445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨章隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值