/// <summary> /// 创建部门到微信中 /// </summary> /// <param name="name"></param> /// <param name="parentid"></param> /// <param name="order"></param> /// <param name="id"></param> /// <param name="compid"></param> /// <returns></returns> public ReturnJson CreateDep(string name, int parentid, int order, int id, string compid) { string sqlstr = string.Format($"select * from Company where CompanyID='{compid}'"); DataTable dt = sql.GetDataTableCommand(sqlstr); string accecctoken2 = AccessTokenHelper.GetQiye(dt.Rows[0]["Longcode"].ToString(), compid, dt.Rows[0]["attoken"].ToString(), DateTime.Parse(dt.Rows[0]["expressYxq"].ToString())); string accecctoken = "q5hqUNPXpenqP8CYoBKIXk_O1BQeEgGPGbAFAH4RZ0tlwbHg7RfUnehzzTflsBrzgTZ3SAfQoTyw-3JNenL8ZwqbJ032lpIdlzg9mHfi0JFq3i5hngTrQ39cgaSlXBCdbuFjox6je9mOIPwIJsDmJHNbznpjvJENrq5cIWzehBHSiruAKatdqY0leae1kFWJqW_izuoDRo3VpUB1r1GYfA"; if (accecctoken.Contains("access_token")) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(QiYeaccess_token)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(accecctoken)); QiYeaccess_token obj = (QiYeaccess_token)ser.ReadObject(ms); string sqlstr2 = string.Format($"exec proc_Weixin 'UpdateAtoken','','','','','{compid}','','{obj.access_token}','{DateTime.Now.AddSeconds(int.Parse(obj.expires_in)).ToString("yyyy-MM-dd HH:mm:ss")}'"); string info2 = sql.EditDataCommand(sqlstr2); BonusHelper.AppConfig.Access_Token_Qiye = obj.access_token; BonusHelper.AppConfig.Qiye_YouXRQ = DateTime.Now.AddSeconds(int.Parse(obj.expires_in)).ToString("yyyy-MM-dd HH:mm:ss"); } //string accecctoken = "q5hqUNPXpenqP8CYoBKIXk_O1BQeEgGPGbAFAH4RZ0tlwbHg7RfUnehzzTflsBrzgTZ3SAfQoTyw-3JNenL8ZwqbJ032lpIdlzg9mHfi0JFq3i5hngTrQ39cgaSlXBCdbuFjox6je9mOIPwIJsDmJHNbznpjvJENrq5cIWzehBHSiruAKatdqY0leae1kFWJqW_izuoDRo3VpUB1r1GYfA"; string url = $"https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={accecctoken}"; string strpost = "{\"name\": \"" + name + "\", \"parentid\": " + parentid + ", \"order\": " + order + "}"; string strResult = httpHelp.PostWebRequest(url, strpost, Encoding.UTF8); try { if (!string.IsNullOrWhiteSpace(strResult) && strResult.Substring(0, 1) == "{" && strResult.Substring(strResult.Length - 1, 1) == "}") { return(JSON.parse <ReturnJson>(strResult)); } else { return(new ReturnJson() { errmsg = string.IsNullOrWhiteSpace(strResult) ? "error" : strResult }); } } catch (Exception ex) { log.AppenLog("创建部门到微信中失败:" + ex.Message); return(new ReturnJson() { errmsg = string.IsNullOrWhiteSpace(strResult) ? "error" : strResult }); } }
/// <summary> /// 得到永久授权码 /// </summary> /// <param name="rc"></param> private void GetLongCode(object rc) { weixinStrct bs = (weixinStrct)rc; string ShortCode = bs.ShortCode; string corId = bs.corpId; string SuiteTicket = bs.SuiteTicket; log.AppenLog("线程:ShortCode:" + ShortCode + "_corId:" + corId + "_SuiteTicket:" + SuiteTicket); try { #region //通过临时授权码得到永久授权码 //得到第三方应用凭证 string suite_access_token = AccessTokenHelper.IssuitResult(corId, BonusHelper.AppConfig.Corpsecret, SuiteTicket); log.AppenLog("第三方应用凭证:" + suite_access_token); #region //ReturnJson rj = new ReturnJson(); //if (!string.IsNullOrWhiteSpace(suitResult) && suitResult.Substring(0, 1) == "{" && suitResult.Substring(suitResult.Length - 1, 1) == "}") //{ // log.AppenLog("不为null"); // rj=JSON.parse<ReturnJson>(suitResult); //} //else //{ // log.AppenLog("为null"); // rj =new ReturnJson() { errmsg = string.IsNullOrWhiteSpace(suitResult) ? "error" : suitResult }; //} #endregion //通过第三方应用凭证得到永久授权码 Tuple <bool, LongShouquan> tu = GetLongCode(suite_access_token, ShortCode); if (tu.Item1) { log.AppenLog("tu.Item1"); string sqlstr = string.Format($"exec proc_Weixin 'ZhuceCompany','{tu.Item2.auth_corp_info.corp_full_name}','{tu.Item2.auth_user_info.userid}','{tu.Item2.auth_corp_info.corp_square_logo_url}','{tu.Item2.permanent_code}','{tu.Item2.auth_corp_info.corpid}','{tu.Item2.auth_user_info.name}'"); log.AppenLog("Sqlstr:" + sqlstr); //string str = ""; //Session[str] = tu.Item2; string info = sql.EditDataCommand(sqlstr); if (info == "0") { log.AppenLog("跟新成功"); //获取企业AccessToken 用于得到用户和部门 string Access_Token = AccessTokenHelper.GetQiye(tu.Item2.permanent_code.Replace("\"", ""), tu.Item2.auth_corp_info.corpid, string.Empty, DateTime.Now.AddDays(-1)); log.AppenLog("获取企业AccessToken:" + Access_Token); if (Access_Token.Contains("access_token")) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(QiYeaccess_token)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Access_Token)); QiYeaccess_token obj = (QiYeaccess_token)ser.ReadObject(ms); string sqlstr2 = string.Format($"exec proc_Weixin 'UpdateAtoken','','','','','{tu.Item2.auth_corp_info.corpid}','','{obj.access_token}','{DateTime.Now.AddSeconds(int.Parse(obj.expires_in)).ToString("yyyy-MM-dd HH:mm:ss")}'"); string info2 = sql.EditDataCommand(sqlstr2); BonusHelper.AppConfig.Access_Token_Qiye = obj.access_token; BonusHelper.AppConfig.Qiye_YouXRQ = DateTime.Now.AddSeconds(int.Parse(obj.expires_in)).ToString("yyyy-MM-dd HH:mm:ss"); } } else { log.AppenLog("跟新失败"); } } else { log.AppenLog("false"); } #endregion } catch (Exception ex) { log.AppenLog("线程错误:" + ex.Message); } //通过永久和id得到token }
/// <summary> /// 获取指定公司部门可见信息 /// </summary> /// <param name="compid">公司id</param> /// <returns></returns> public ActionResult SelectDep(string compid) { compid = Base64MIMA.JIE(compid); string sqlstr = string.Format($"select * from Company where CompanyID='{compid}'"); DataTable dt = sql.GetDataTableCommand(sqlstr); string accecctoken = AccessTokenHelper.GetQiye(dt.Rows[0]["Longcode"].ToString(), compid, dt.Rows[0]["attoken"].ToString(), DateTime.Parse(dt.Rows[0]["expressYxq"].ToString())); QiYeaccess_token obj = new QiYeaccess_token(); if (accecctoken.Contains("access_token")) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(QiYeaccess_token)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(accecctoken)); obj = (QiYeaccess_token)ser.ReadObject(ms); string sqlstr2 = string.Format($"exec proc_Weixin 'UpdateAtoken','','','','','{compid}','','{obj.access_token}','{DateTime.Now.AddSeconds(int.Parse(obj.expires_in)).ToString("yyyy-MM-dd HH:mm:ss")}'"); string info2 = sql.EditDataCommand(sqlstr2); accecctoken = obj.access_token; } //数据库里的部门 string sqldep = string.Format($"select * from Depart where CompanyID='wx512ad5972960e003'"); DataTable dtdep = sql.GetDataTableCommand(sqldep); string url = $"https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={accecctoken}&id=ID"; string strResult = httpHelp.GetWebRequest(url); log.AppenLog("部门:" + strResult); try { if (!string.IsNullOrWhiteSpace(strResult) && strResult.Substring(0, 1) == "{" && strResult.Substring(strResult.Length - 1, 1) == "}") { WechatReturnDep wrd = JSON.parse <WechatReturnDep>(strResult); if (wrd.errcode == "0") { List <WechatDep> listDep = wrd.department; if (listDep.Count > 0) { string sqlstr2 = ""; #region 将数据库里的数据给修改过来,以微信为准 var vupdate = (from s in listDep where dtdep.AsEnumerable().Any(x => s.id == x.Field <int>("DepartID") && compid == x.Field <string>("CompanyID") || s.name != x.Field <string>("DepartName") || s.parentid != x.Field <int>("PID")) select s).ToList(); log.AppenLog("vupdate:" + vupdate.Count); if (vupdate.Count > 0) { foreach (var item in vupdate) { string JX = Pinyin.GetInitials(item.name); //简写 string QP = Pinyin.GetPinyin(item.name).Replace(" ", ""); //全拼 sqlstr2 += string.Format($"update Depart set SpellJX='{JX}',SpellQP='{QP}',DepartName='{item.name}',PID='{item.parentid}' where DepartID={item.id} and CompanyID='{compid}' "); } } #endregion #region 将数据库里有微信没有的删掉 var vupdel = (from s in dtdep.AsEnumerable() where !listDep.Any(x => x.id == s.Field <int>("DepartID") && compid == s.Field <string>("CompanyID")) select s).ToList(); if (vupdel.Count > 0) { foreach (var item in vupdel) { sqlstr2 += string.Format($"delete Depart where DepartID={item.Field<int>("DepartID")} and CompanyID='{compid}' "); } } #endregion #region 将数据库中没有,微信中有的增加 var vupadd = (from s in listDep where !dtdep.AsEnumerable().Any(x => s.id == x.Field <int>("DepartID") && compid == x.Field <string>("CompanyID")) select s).ToList(); foreach (var item in vupadd) { //看数据库里是否又这个部门,如果有就不用添加到数据库 //else //{ string JX = Pinyin.GetInitials(item.name); //简写 string QP = Pinyin.GetPinyin(item.name).Replace(" ", ""); //全拼 sqlstr2 += string.Format($"insert into Depart(DepartID,DepartName, PID, DepartPrincipal, Remark,SpellJX,SpellQP,CompanyId) values({item.id},'{item.name}', '{item.parentid}', null, '','{JX}','{QP}','{compid}') "); //} //循环添加到数据库中 } #endregion if (sqlstr2 == "") { return(Content("数据一致,不需要同步")); } string num = sql.EditDataCommand(sqlstr2); if (num == "0") { return(Content("ok")); } else { return(Content("同步失败")); } } else { return(Content("暂无信息需要同步")); } } else { return(Content("error:" + strResult)); } } else { return(Content("error:" + strResult)); //return new ReturnJson() { errmsg = string.IsNullOrWhiteSpace(strResult) ? "error" : strResult }; } } catch (Exception ex) { log.AppenLog("从微信中读取数据失败:" + ex.Message); return(Content("从微信中读取数据失败:" + strResult)); } }