Пример #1
0
        private string[] ScList;          //参数集

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            try
            {
                //获取请求json
                using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
                {
                    CsJson = reader.ReadToEnd();
                }

                if (CsJson == "")
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }
                CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
                //json转Hashtable
                Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
                Hashtable returnhash = jgobj as Hashtable;
                if (returnhash == null)
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }
                string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
                string path    = context.Request.Path.Replace("Sign.ashx", "getsign");
                //验证请求sign
                string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);
                ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + returnhash["Sign"].ToString() + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
                if (sign != returnhash["Sign"].ToString())
                {
                    context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                    return;
                }

                //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
                AppWyy    = ToolsClass.GetConfig("AppWyy");
                ScList    = AppWyy.Split('$');
                agentId   = ScList[0].ToString();
                corpId    = ScList[1].ToString();
                appKey    = ScList[2].ToString();
                appSecret = ScList[3].ToString();

                isWrite = ToolsClass.GetConfig("isWrite");

                //获取access_token
                url    = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret;
                FhJson = ToolsClass.ApiFun("GET", url, "");

                TokenClass tokenClass = new TokenClass();
                tokenClass   = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass));
                access_token = tokenClass.access_token;
                errcode      = tokenClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}");
                    return;
                }

                //JSAPI鉴权
                url    = returnhash["url"].ToString();
                FhJson = ToolsClass.ApiFun("GET", "https://oapi.dingtalk.com/get_jsapi_ticket?access_token=" + access_token, "");

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nSign=>入参:" + CsJson + "\r\nappKey:" + appKey + "\r\nappsecret:" + appSecret + "\r\naccess_token:" + access_token + "\r\nJSAPI鉴权Fh:" + FhJson);
                }

                SignClass signClass = new SignClass();
                signClass = (SignClass)JsonConvert.DeserializeObject(FhJson, typeof(SignClass));
                ticket    = signClass.ticket;
                errcode   = signClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"JSAPI鉴权报错," + signClass.errmsg + "(DD0005)\",\"errcode\":1}");
                    return;
                }

                //获取的口令
                //token = context.Request.Headers.Get("ID").ToString();
                timeStamp = GetTimeStamp();
                nonceStr  = ToolsClass.GetRandomString(8);
                string        assemble = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", ticket, nonceStr, timeStamp, url);
                SHA1          sha;
                ASCIIEncoding enc;
                sha = new SHA1CryptoServiceProvider();
                enc = new ASCIIEncoding();
                byte[] dataToHash = enc.GetBytes(assemble);
                byte[] dataHashed = sha.ComputeHash(dataToHash);
                sign = BitConverter.ToString(dataHashed).Replace("-", "");
                sign = sign.ToLower();

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\n签名串:" + assemble + "\r\nSign:" + sign + "\r\n");
                }
                string fh = "{\"errmsg\":\"ok\",\"errcode\":0,\"url\":\"" + url + "\",\"nonceStr\":\"" + nonceStr + "\",\"agentId\":\"" + agentId + "\",\"timeStamp\":\"" + timeStamp + "\",\"corpId\":\"" + corpId + "\",\"signature\":\"" + sign + "\"}";
                ToolsClass.TxtLog("DDLog", "\r\n返回给前端的信息:" + fh + "\r\n");
                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0,\"url\":\"" + url + "\",\"nonceStr\":\"" + nonceStr + "\",\"agentId\":\"" + agentId + "\",\"timeStamp\":\"" + timeStamp + "\",\"corpId\":\"" + corpId + "\",\"signature\":\"" + sign + "\"}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                return;
            }
        }
Пример #2
0
        private string ddUrl = "";   //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            try
            {
                string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
                //数据库链接
                connectionString = ToolsClass.GetConfig("DataOnLine");
                //sqlServer
                da = new DbHelper.SqlHelper("SqlServer", connectionString);
                //获取请求json
                using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
                {
                    CsJson = reader.ReadToEnd();
                }

                if (CsJson == "")
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }
                CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
                //json转Hashtable
                ToolsClass.TxtLog("GetUser入参", "\r\nGetUser入参:" + CsJson);
                Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
                Hashtable returnhash = jgobj as Hashtable;
                if (returnhash == null)
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }

                string path1 = context.Request.Path.Replace("GetUser.ashx", "getuser");
                string path2 = context.Request.Path.Replace("GetUser.ashx", "getdepart");
                //验证请求sign
                string sign1 = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32);
                string sign2 = ToolsClass.md5(signUrl + path2 + "Romens1/DingDing2" + path2, 32);
                ToolsClass.TxtLog("生成的sign", "生成的" + "sign1:" + sign1 + "sign2:" + sign2 + "传入的sign" + returnhash["Sign"].ToString() + "\r\n 后台字符串:" + signUrl + path2 + "Romens1/DingDing2" + path2);
                if (sign1 != returnhash["Sign"].ToString() && sign2 != returnhash["Sign"].ToString())
                {
                    context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                    return;
                }

                selType = returnhash["TypeId"].ToString();
                if (returnhash.Contains("id"))
                {
                    selId = returnhash["id"].ToString();
                    if (selId == "")
                    {
                        context.Response.Write("{\"errmsg\":\"ID不允许为空(DD2001)\",\"errcode\":1}");
                        return;
                    }
                }

                //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
                AppWyy    = ToolsClass.GetConfig("AppWyy");
                ScList    = AppWyy.Split('$');
                agentId   = ScList[0].ToString();
                corpId    = ScList[1].ToString();
                appKey    = ScList[2].ToString();
                appSecret = ScList[3].ToString();
                isWrite   = ToolsClass.GetConfig("isWrite");
                ddUrl     = ToolsClass.GetConfig("ddUrl");

                //获取access_token
                url    = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret;
                FhJson = ToolsClass.ApiFun("GET", url, "");

                TokenClass tokenClass = new TokenClass();
                tokenClass   = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass));
                access_token = tokenClass.access_token;
                errcode      = tokenClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}");
                    return;
                }
                //取用户信息
                if (selType == "SelUser01")
                {
                    url    = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + access_token + "&code=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");

                    //免登授权码 获取用户userid
                    GetUserId userClass = new GetUserId();
                    userClass = (GetUserId)JsonConvert.DeserializeObject(FhJson, typeof(GetUserId));
                    errcode   = userClass.errcode;
                    if (errcode != 0)
                    {
                        context.Response.Write("{\"errmsg\":\"" + userClass.errmsg + "\",\"errcode\":1}");
                        return;
                    }

                    //获取用户详情
                    url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + userClass.userid;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                    GetUserXq userXqClass = new GetUserXq();
                    userXqClass = (GetUserXq)JsonConvert.DeserializeObject(FhJson, typeof(GetUserXq));
                    errcode     = userXqClass.errcode;
                    if (errcode != 0)
                    {
                        context.Response.Write("{\"errmsg\":\"" + userClass.errmsg + "\",\"errcode\":1}");
                        return;
                    }

                    //查询用户信息
                    sql = "select Top 1 A.GUID OperatorGuid,A.EmployeeCode JobNumber,A.EmployeeName OperatorName,A.OrgCode,b.Name OrgName from FlowEmployee a left join ORGANIZATION b on a.OrgCode=b.Code where a.EmployeeCode='" + userXqClass.jobnumber + "'";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    if (dt.Rows.Count > 0)
                    {
                        FhJson = "{\"errmsg\":\"ok\",\"errcode\":0,\"userid\":\"" + userClass.userid + "\",\"OperatorGuid\":\"" + dt.Rows[0]["OperatorGuid"].ToString() +
                                 "\",\"OperatorName\":\"" + dt.Rows[0]["OperatorName"].ToString() +
                                 "\",\"Avatar\":\"" + userXqClass.avatar +
                                 "\",\"JobNumber\":\"" + dt.Rows[0]["JobNumber"].ToString() +
                                 "\",\"OrgCode\":\"" + dt.Rows[0]["OrgCode"].ToString() +
                                 "\",\"OrgName\":\"" + dt.Rows[0]["OrgName"].ToString() + "\"}";
                    }
                    else
                    {
                        FhJson = "{\"errmsg\":\"当前用户不存在\",\"errcode\":1}";
                    }
                }
                //获取用户详情
                else if (selType == "SelUser02")
                {
                    url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户userid列表
                else if (selType == "SelUser03")
                {
                    url    = "https://oapi.dingtalk.com/user/getDeptMember?access_token=" + access_token + "&deptId=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户列表
                else if (selType == "SelUser04")
                {
                    url    = "https://oapi.dingtalk.com/user/simplelist?access_token=" + access_token + "&department_id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户详情
                else if (selType == "SelUser05")
                {
                    url    = "https://oapi.dingtalk.com/user/listbypage?access_token=" + access_token + "&department_id=" + selId + "&offset=0&size=10";
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取管理员列表
                else if (selType == "SelUser06")
                {
                    url    = "https://oapi.dingtalk.com/user/get_admin?access_token=" + access_token;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取管理员通讯录权限范围
                else if (selType == "SelUser07")
                {
                    url    = "https://oapi.dingtalk.com/topapi/user/get_admin_scope?access_token=" + access_token + "&userid=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取子部门ID列表
                else if (selType == "SelDepart01")
                {
                    url    = "https://oapi.dingtalk.com/department/list_ids?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门列表
                else if (selType == "SelDepart02")
                {
                    url    = "https://oapi.dingtalk.com/department/list?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门详情
                else if (selType == "SelDepart03")
                {
                    url    = "https://oapi.dingtalk.com/department/get?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //查询部门的所有上级父部门
                else if (selType == "SelDepart04")
                {
                    url    = "https://oapi.dingtalk.com/department/list_parent_depts_by_dept?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取企业员工人数
                else if (selType == "SelDepart05")
                {
                    //onlyActive 0:包含未激活钉钉的人员数量 1:不包含未激活钉钉的人员数量
                    url    = "https://oapi.dingtalk.com/user/get_org_user_count?access_token=" + access_token + "&onlyActive=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"查询其他信息请关机(DD1003)\",\"errcode\":1}");
                    return;
                }
                ToolsClass.TxtLog("GetUser", "\r\n返给前端json:" + FhJson);
                context.Response.Write(FhJson);
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                return;
            }
        }