企业微信之网页授权登录

场景:要在企业微信里面集成企业自建应用,点击应用进入应用功能列表,获取当前企业微信用户信息。

Ⅰ.概述

企业微信提供了OAuth的授权登录方式,可以让网页和企业微信共享用户ID,从而免去登录的环节。

此文档面向网页开发者介绍企业微信网页授权如何使用及相关注意事项。

Ⅱ.企业微信OAuth2接入流程

img

Ⅲ.准备工作

  1. 企业微信后台,应用管理-创建应用,新建应用
    在这里插入图片描述
    secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。

    自建应用secret。在管理后台->“应用与小程序”->“应用”->“自建”,点进某个应用,即可看到。

  2. 构造网页授权链接

    如果企业需要在打开的网页里面携带用户的身份信息,需要构造如下的链接来获取code参数:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
    

    参数说明:

    参数必须说明
    appid企业的CorpID
    redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type返回类型,此时固定为:code
    scope应用授权作用域。企业自建应用固定填写:snsapi_base
    state重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
    #wechat_redirect终端使用此参数判断是否需要带上身份信息

    员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。code长度最大为512字节。
    在这里插入图片描述

  3. 设置可信域名

    REDIRECT_URL中的域名,需要先配置至应用的“可信域名”,否则跳转时会提示“redirect_uri参数错误”。
    要求配置的可信域名,必须与访问链接的域名完全一致;若访问链接URL带了端口号,端口号也需要登记到可信域名中
    在这里插入图片描述

Ⅳ.接入流程说明

  1. 获取access_token

    为了安全考虑,开发者请勿将access_token返回给前端,需要开发者保存在后台,所有访问企业微信api的请求由后台发起

    获取access_token是调用企业微信API接口的第一步,相当于创建了一个登录凭证,其它的业务API接口,都需要依赖于access_token来鉴权调用者身份。

  2. 获取code

    • 需根据构造网页授权链接获取code

      https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的企业ID&redirect_uri=重定向链接并urlencode编码&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

    • 重定向链接

      http://域名:端口/qywx?redirectAlias=workBench&agentId=1000001

      参数,**redirectAlias:**授权成功后重定向URI别名,**agentId:**授权的企业微信应用ID。可根据需要自定义,此处为了实现动态配置多个自建应用。 在这里插入图片描述

  3. 根据code获取成员信息

Ⅴ.关键代码实现

此处用servlet进行接口实现,也可用controller接口进行实现。

  1. web.xml配置

    <servlet>
    	<servlet-name>QYWXServlet</servlet-name>
    	<servlet-class>com.very.mobile.weixin.QYWXServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>QYWXServlet</servlet-name>
       <url-pattern>/qywx</url-pattern>
    </servlet-mapping>
    
  2. 代码编写

    以下SysPropertyUtil.getByAlias根据别名获取参数,根据实际情况实现该方法。常量类,数据库等。

    • QYWXServlet

      public class QYWXServlet extends HttpServlet {
          private static final long serialVersionUID = 1L;
      
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              //获取企业微信返回code参数
              String code = req.getParameter("code");
              //获取授权的企业微信应用ID
              String agentId = req.getParameter("agentId");
              //获取授权成功后重定向URI别名
              String redirectAlias = req.getParameter("redirectAlias");
              
              if (StringUtil.isNotEmpty(code)) {
                  //根据code获取用户信息
                  String userUrl = WeixinConsts.getQyWxUserInfo(code, agentId);
                  String json = HttpUtil.sendHttpsRequest(userUrl, "", "GET");
                  JSONObject jsonObj = JSONObject.fromObject(json);
                  
                  //获取用户信息之后做业务处理,此处完成后台登录,可根据实际情况编写
                  String userId = jsonObj.getString("UserId");
                  SecurityUtil.login(req, userId, "", true);            
                  
                  //根据别名获取重定向URI,完成跳转
                  String redirect = SysPropertyUtil.getByAlias(redirectAlias);
                  resp.sendRedirect(redirect);
              }
          }
      
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              super.doPost(req, resp);
          }
      }
      
    • WeixinConsts

      public class WeixinConsts {
          //生成获取access_token的URL
          public static String getToKen(String agentId) {
              //获取企业ID
              String corpId = SysPropertyUtil.getByAlias("corpid");
              //根据agentId获取自建应用secret
              String secret = SysPropertyUtil.getByAlias(agentId);
              return "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpId + "&corpsecret=" + secret;
          }
          
          //生成获取用户信息的URL
          public static String getQyWxUserInfo(String code, String agentId) {
              String accessToken = TokenUtil.getAgentToken(agentId);
              String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + accessToken + "&code=" + code;
              return url;
          }
      }
      
    • TokenUtil

      public class TokenUtil {
          //根据agentId获取access_token
          public static synchronized String getAgentToken(String agentId) {
              String url = WeixinConsts.getToKen(agentId);
              String rtn = HttpUtil.sendHttpsRequest(url, "", "GET");
              JSONObject jsonObj = JSONObject.fromObject(rtn);
              String errMsg;
              if ((Integer)jsonObj.get("errcode") == 0) {
                  token = jsonObj.getString("access_token");
                  return token;
              } else {
                  errMsg = jsonObj.getString("errmsg");
                  log.error(errMsg);
                  return "-1";
              }
          }
      
      }
      
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UniApp是一个跨平台的开发框架,可以同时开发iOS和Android平台的应用程序。而企业微信网页授权是指企业在使用微信办公平台时,通过网页授权的方式获取用户在企业微信中的基本信息。 在UniApp中实现企业微信网页授权,首先需要在企业微信开放平台创建一个应用,并获取到相应的corpId和agentId。然后,在UniApp的代码中,可以使用uni.request方法向企业微信网页授权接口发送请求,需要传递的参数包括corpId、agentId、redirect_uri和state等。其中,redirect_uri表示授权后重定向的回调链接,state可以用于传递额外的参数。 当用户访问需要授权的页面时,可以在页面中使用uni.request方法发起授权请求。企业微信网页授权接口会返回一个重定向链接,UniApp可以通过uni.navigateTo方法将用户重定向到该链接,用户在企业微信授权后会跳回到该链接所指向的页面,并携带授权结果等参数。 在UniApp中接收授权结果的方法比较灵活,可以在重定向的页面中通过uni.getLaunchOptionsSync方法获取到授权结果等参数。也可以通过uni.onAppShow方法监听小程序的启动和切前台事件,在事件回调中处理授权结果。 总之,通过UniApp实现企业微信网页授权需要调用企业微信网页授权接口,并在UniApp中处理授权结果等参数。这样可以方便地在UniApp中开发企业微信相关的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值