using System; using System.Text; using BP.DA; using BP.GPM.WeiXin; using BP.Tools; using System.Linq; using static BP.WF.WeiXin.GZH.WeiXinGZHModel; using System.Collections; namespace BP.WF.HttpHandler { /// /// 集成企业微信OA类 /// public class WF_MyOA : DirectoryPageBase { /// /// 集成企业微信OA类 /// public WF_MyOA() { } /// /// 初始化(处理登录用户) /// /// public string MyOA_Init() { string code = this.GetRequestVal("code"); //string state = this.GetRequestVal("state"); //执行标记. Hashtable myht = new Hashtable(); if (BP.Web.WebUser.No == null) { /* 如果当前登录人员帐号为 null .*/ string accessToken = WeiXinEntity.getAccessToken(); //获取 AccessToken myht.Add("Token", accessToken); string userId = getUserId(code, accessToken); User user = FormatToJson.ParseFromJson(userId); if (user.ErrCode != 0) { //throw new Exception("err@当前登录帐号为空,请检查AccessToken是否正确:" + accessToken); return "err@当前登录帐号为空,请检查AccessToken是否正确:" + accessToken; } else { BP.Port.Emps emps = new BP.Port.Emps(); int num = emps.Retrieve(BP.Port.EmpAttr.No, user.UserId); if (num <= 0) { //是否使用微信企业号中的组织结构进行登录 if (BP.Difference.SystemConfig.OZType == "1") { string url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&userid=" + user.UserId; string str = BP.DA.DataType.ReadURLContext(url, 4000, Encoding.UTF8); //人员详细信息 UserEntity userEn = FormatToJson.ParseFromJson(str); //所属部门 Array depts = userEn.department as Array; foreach (object item in depts) { BP.Port.Depts dts = new BP.Port.Depts(); url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + accessToken + "&id=" + item; str = BP.DA.DataType.ReadURLContext(url, 4000, Encoding.UTF8); //部门详细信息 DeptList mydepts = FormatToJson.ParseFromJson(str); //如果部门不存在,插入部门信息 if (dts.Retrieve(BP.Port.DeptAttr.No, item) <= 0) { foreach (DeptEntity deptMent in mydepts.department) { dts = new BP.Port.Depts(); if (dts.Retrieve(BP.Port.DeptAttr.No, item) > 0) continue; else { BP.Port.Dept dp = new BP.Port.Dept(); dp.No = deptMent.id; dp.Name = deptMent.name; dp.ParentNo = deptMent.parentid; dp.Insert(); } } } else //如果存在,更新部门名称 { foreach (DeptEntity deptMent in mydepts.department) { BP.Port.Dept dp = new BP.Port.Dept(deptMent.id); dp.Name = deptMent.name; dp.ParentNo = deptMent.parentid; dp.Update(); } } //插入人员表 BP.Port.Emp emp = new BP.Port.Emp(); emp.No = user.UserId; emp.DeptNo = item.ToString(); emp.Name = userEn.name; emp.Tel = userEn.mobile; emp.Insert(); //插入部门表 BP.Port.DeptEmp deptEmp = new BP.Port.DeptEmp(); deptEmp.MyPK = item + "_" + user.UserId; deptEmp.DeptNo = item.ToString(); deptEmp.EmpNo = user.UserId; deptEmp.Insert(); } //执行登录 BP.WF.Dev2Interface.Port_Login(user.UserId); } else { emps = new BP.Port.Emps(); num = emps.Retrieve(BP.Port.EmpAttr.Tel, user.UserId); if (num <= 0) { //throw new Exception("err@用户名错误,没有找到登录信息:" + accessToken); return "err@用户名错误,没有找到登录信息:" + accessToken; } foreach (BP.Port.Emp emp in emps) { BP.WF.Dev2Interface.Port_Login(emp.No); break; } } } else { BP.WF.Dev2Interface.Port_Login(user.UserId); } } } return BP.Tools.Json.ToJson(myht); //if (!state.Contains(',')) // Response.Redirect("../CCMobile/" + state + ".htm"); //else //{ // string[] vals = state.Split(','); // if (vals[0].Contains("URL_") == true) // { // string url = vals[0].Substring(4); // string dummyData = url.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+"); // if (dummyData.Length % 4 > 0) // { // dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '='); // } // //Base64位解码 // byte[] bytes = Convert.FromBase64String(dummyData); // url = UTF8Encoding.UTF8.GetString(bytes); // Response.Redirect(url); // } // if (vals[0].Contains("MyView") == true) // { // Response.Redirect("../CCMobile/MyView.htm?WorkID=" + vals[1].Replace("WorkID_", "") + "&FK_Node=" + vals[2].Replace("FK_Node_", "") + ""); // } // if (vals[0].Contains("FlowNo")) // { // string[] pks = vals[0].Split('_'); // Response.Redirect("../CCMobile/MyFlow.htm?FK_Flow=" + pks[1] + "&state=" + vals[1] + ""); // } //} } /// /// 获得用户ID /// /// /// /// public string getUserId(string code, string accessToken) { string url = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=" + accessToken + "&code=" + code; return DataType.ReadURLContext(url, 39000, Encoding.UTF8); } } }