C# 企业微信第三方应用开发(随手笔记)

OAuth2简介

OAuth2的设计背景,在于允许用户在不告知第三方自己的帐号密码情况下,通过授权方式,让第三方服务可以获取自己的资源信息。

1.注册企业

  1. 注册地址:点击即跳转
  2. 注册完后跳转到登录页面,下次访问页面时是支持手机端APP企业微信扫描登录的;
  3. 登录地址:点击即跳转

2.新建第三方应用

1.应用-自建-创建应用,示例:
在这里插入图片描述

3.网页授权链接

官方API地址:点击跳转

1.获取Code,需要准备企业ID(appid),企业应用ID(agentid),回调地址(指手机端企业微信的应用默认地址,企业微信接口会把Code返回给这个地址)

1.1.官方示例截图:
在这里插入图片描述
1.2.应用ID位置截图(应用ID在最近新建的应用里面,点击打开就能看见)
在这里插入图片描述
1.3.企业ID截图
在这里插入图片描述
代码示例:
在这里插入图片描述
注意

 1. 回调的网址必须放在公网上,不然企业微信访问不了。(这里建议使用**花生壳**内网穿透)
 2. 必须发布在IIS站点下面,这里是不好调试的

2.获取身份验证的suite_access_token

官方API地址:点击跳转

2.1.官方示例截图:
在这里插入图片描述
2.2应用secret位置截图:
在这里插入图片描述
代码示例:

        /// <summary>
        /// 获取token
        /// </summary>
        /// <param name="appid">企业ID,也叫corpid,可以找微信号中可以找到</param>
        /// <param name="secret">应用的凭证密钥</param>
        /// <returns></returns>
        public string GetObtainToke()
        {
            try
            {
                string appid = "ww1769a401136be1bb";
                var secret = "mZwzx6k7EuvIfyrtgEjPEzLOG69ZHkiDlRftH7vgRps";
                string url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?";
                StringBuilder str = new StringBuilder();
                str.Append(url);
                str.Append("corpid=" + appid + "&corpsecret=" + secret + "");
                string Tokes = HttpUtils.DoGet(str.ToString(), null).ToString();
                dynamic jsondata = JToken.Parse(Tokes) as dynamic;
                Log.CreateLogManager().Error("获取access_token状态为:" + jsondata["errcode"]);

                if (jsondata["errcode"] == 0)
                {
                    return jsondata["access_token"];
                }
                else
                {
                    return "";
                }
            }
            catch (Exception ex)
            {
                Log.CreateLogManager().Error("获取access_token出现异常:" + ex);
                return "";
            }
        }

3.获取用户信息

官网API地址:点击即跳转

官网截图:
在这里插入图片描述

代码示例:

        /// <summary>
        /// 企业微信登录方法(获取用户名)
        /// </summary>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public Object GetUserLoginBs(string code,string state)
        {
            DateTime dr = DateTime.Now;

            object encryptTicket = new { };

            try
            {
                if (code != null)
                {
                    string Token = GetObtainToke();
                    if (Token != "")
                    {
                        string UserUrl = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?";
                        StringBuilder UserStr = new StringBuilder();
                        UserStr.Append(UserUrl);
                        UserStr.Append("access_token=" + Token + "&code=" + code + "");
                        string JsonValue = HttpUtils.DoGet(UserStr.ToString(), null).ToString();
                        dynamic ResultValue = JToken.Parse(JsonValue) as dynamic;
                        Log.CreateLogManager().Error("获取企业微信用户状态为:" + ResultValue["errcode"]);
                        Log.CreateLogManager().Error("获取企业微信用户UserId为:" + ResultValue["UserId"]);

                        if (ResultValue["errcode"] == 0)
                        {
                            string User = ResultValue["UserId"];
                            string StaffUrl = "https://qyapi.weixin.qq.com/cgi-bin/user/get?";
                            StringBuilder StaffStr = new StringBuilder();
                            StaffStr.Append(StaffUrl);
                            StaffStr.Append("access_token=" + Token + "&userid=" + User + "");
                            string StaffResult = HttpUtils.DoGet(StaffStr.ToString(), null).ToString();
                            Root jsonStaff = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(StaffResult);

                            if (jsonStaff.errcode == 0)
                            {

                            }
                            else
                            {
                                encryptTicket = new { Success = false, Msg = "员工号获取失败" };
                            }
                        }
                        else
                        {
                            encryptTicket = new { Success = false, Msg = "UserID获取失败" };
                        }
                    }
                    else
                    {
                        encryptTicket = new { Success = false, Msg = "access_token获取失败" };
                    }
                }
            }
            catch (Exception ex)
            {
                encryptTicket = new { Success = false, Msg = "出现异常" };
                Log.CreateLogManager().Error("异常:" + ex);
            }

            return encryptTicket;
        }
发布了25 篇原创文章 · 获赞 5 · 访问量 911

猜你喜欢

转载自blog.csdn.net/qq_41863998/article/details/102518809