在企业微信客户端进行用户授权并获取用户账号

sam 2024-01-02 00:17:09

封装的代码

得到Client

     public static WechatWorkClient GetClient()
        {
            WechatWorkClient client = new WechatWorkClient(new WechatWorkClientOptions()
            {
                CorpId = QyWxConst.CorpId,
                AgentSecret = QyWxConst.CorpSecret,
                AgentId = QyWxConst.AgentId
            });

            return client;
        }

得到全局的AccessToken

        /// <summary>
        /// 得到AccessToken
        /// </summary>
        /// <returns></returns>
        public static String GetAccessTokenByServer()
        {
            var client = GetClient();

            CgibinGetTokenRequest request = new CgibinGetTokenRequest();

            var rep = client.ExecuteCgibinGetTokenAsync(request);

            if (rep != null && rep.Result != null)
            {
                if (!string.IsNullOrEmpty(rep.Result.AccessToken))
                {
                    Cache.Default.Set("QyWeChat-AccessToken", rep.Result.AccessToken);
                }
            }

            return rep.Result.AccessToken;
        }

采用缓存的方式的得到AccessToken

        /// <summary>
        /// 通过缓存的方式来得到AccessToken
        /// </summary>
        /// <returns></returns>
        public static String GetAccessToken()
        {
            string cacheKey = "QyWeChat-AccessToken";

            return Cache.Default.Get<string>(cacheKey);
        }

根据授权的Code得到企业微信用户账号

        /// <summary>
        /// 根据授权的code获取用户的UserId
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string GetUserIdByQyWeChatAsync(string code)
        {
            var client = GetClient();

            string accessToken = GetAccessToken();
            CgibinAuthGetUserInfoRequest request = new CgibinAuthGetUserInfoRequest();
            request.AccessToken = accessToken;
            request.Code = code;

            var rep = client.ExecuteCgibinAuthGetUserInfoAsync(request);

            LogHelper.WriteLog("得到用户信息的json" + rep.Result.ToJson());

            return rep.Result.UserId;
        }

定义的控制器Default

企业微信应用的默认首页

        /// <summary>
        /// 企业微信的登录
        /// </summary>
        /// <returns></returns>
        public IActionResult QyWxIndex()
        {
            string redirectUrl = QyWxConst.BaseUrl + "/default/Auth";
            WechatWorkClient client = new WechatWorkClient(new WechatWorkClientOptions()
            {
                CorpId = QyWxConst.CorpId,
                AgentSecret = QyWxConst.CorpSecret,
                AgentId = QyWxConst.AgentId
            });

            

            string newUrl = client.GenerateParameterizedUrlForConnectOAuth2Authorize(redirectUrl, "");
            ViewBag.NewUrl = newUrl;

            return View();
        }

前端的cshtml页面文件

@{
    Layout = null;

    string newUrl = ViewBag.NewUrl ?? "";
}

<!DOCTYPE html>
<html>
<head></head>
<body>
    
跳转的Url : @Html.Raw(newUrl)
<script>
    location.href = "@Html.Raw(newUrl)";
</script>
</body>
</html>

控制器Action,用于得到腾讯向服务器传递的code

        /// <summary>
        /// 得到腾讯返回过来的Code
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public IActionResult Auth(string code)
        {
            ContentResult cr = new ContentResult();
            cr.Content = "当前的code:" + code;

            string accessToken = QyWeChatHelper.GetAccessToken();

            if (String.IsNullOrEmpty(accessToken))
            {
                return Content("AccessToken为空");
            }

            //

            string userId = QyWeChatHelper.GetUserIdByQyWeChatAsync(code);


            cr.Content = "当前用户的UserId为:" + userId;

            //得到用户的userid 后就可以进行相关的操作,根据qywx的userid 与系统用户的绑定操作



            return cr;
        }

到此 可以获取企业微信的账号了。

下面可以进行相关的业务扩展

1、如果企业微信的账户 与 应用的用户不存在一一对应的关系,则跳转于绑定页

2、如果已经一一对应的,则获取对应系统的用户相关的角色与权限等,到此为止,则与企业微信进行了绑定。


使用企业的客户端另外一个好处就是 安全性大大提高,如果不是企业的用户则不能登录此系统。

回帖
  • 消灭零回复
相关文章