得到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、如果已经一一对应的,则获取对应系统的用户相关的角色与权限等,到此为止,则与企业微信进行了绑定。
使用企业的客户端另外一个好处就是 安全性大大提高,如果不是企业的用户则不能登录此系统。