public ApiBase(string apiKey, EnvironmentSetting setting) { if (string.IsNullOrEmpty(apiKey)) { throw new ArgumentException("API key must be not null or empty"); } ParameterValidator.ValidateNotNull(setting, "Environment Setting"); Environment = setting.EnvironmentName; if (setting.Services.ContainsKey(apiKey)) { var serviceSetting = setting.Services[apiKey]; Host = serviceSetting.Host; ResourceAddress = serviceSetting.ResourceAddress; SubscriptionKey = serviceSetting.SubscriptionKey; } BaseUrl = Host; UserAccount = setting.UserAccounts.Where(x => x.Agent.Equals("breeze", StringComparison.CurrentCultureIgnoreCase)).First(); AccessToken = AccessTokenHelper.GetAccessToken(setting.BrowserName, setting.WebUrl, UserAccount.Email, UserAccount.Password); }
public HttpResponseMessage PostUser(UserModel user) { try { var isValidToken = AccessTokenHelper.ValidateAccessToken(user.AccessToken); if (!isValidToken) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Invalid access token!") }); } var service = new DbService(); service.PostUser(user); return(new HttpResponseMessage(HttpStatusCode.OK)); } catch (Exception ex) { if (ex.Message.Contains("Duplicate") && ex.Message.Contains("MobileNumber")) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Mobile Number already exits please provide a unique Number") }); } return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(ex.Message) }); } }
public async Task <RefreshTokenDm> RefreshAsync(RefreshTokenVm refreshTokenVm) { await SetActiveAccessTokenAsync(refreshTokenVm.RefreshToken); if (_activeAccessToken is null) { return(CreateInvalidResult(EResultStatus.InvalidRefreshToken)); } if (!_activeAccessToken.IsActive) { return(CreateInvalidResult(EResultStatus.InvalidRefreshToken)); } if (!IsValidationAccessToken(refreshTokenVm.AccessToken)) { return(CreateInvalidResult(EResultStatus.InvalidRefreshToken)); } if (!AccessTokenHelper.IsValidationExpirationDate(_activeAccessToken.ExpirationDate)) { return(CreateInvalidResult(EResultStatus.RefreshTokenExpired)); } return(CreateSuccessResult()); }
public void OnAuthorization(AuthorizationFilterContext context) { var guidAccessToken = ApplicationHelper.GetAuthorizationToken(context.HttpContext); if (IsNullOrWhiteSpace(guidAccessToken)) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } var jsonAccessToken = EncryptionHelper.AesDecryptString(guidAccessToken); if (IsNullOrEmpty(jsonAccessToken)) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } var accessTokenDataVm = jsonAccessToken.ObjectDeserialize <AccessTokenDataVm>(); if (accessTokenDataVm is null) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } if (!AccessTokenHelper.IsValidationExpirationDate(accessTokenDataVm.ExpirationDate)) { context.Result = CreateResult(EResultStatus.AccessTokenExpired); } }
public void GetAccessTokenTest() { string appid = ConfigurationManager.AppSettings["WeixinAppId"]; string secret = ConfigurationManager.AppSettings["WeixinAppSecret"]; string access_token = AccessTokenHelper.GetTokenForSqlServer(appid, secret); Assert.IsNotNull(access_token); }
/// <summary> /// 订阅(关注)事件 /// </summary> /// <returns></returns> public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) { //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); //responseMessage.Content = GetWelcomeInfo(); //if (!string.IsNullOrEmpty(requestMessage.EventKey)) //{ // responseMessage.Content += "\r\n============\r\n场景值:" + requestMessage.EventKey; //} var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); WeixinUserInfoResult user = null; try { user = WeixinApi.GetUserInfo(AccessTokenHelper.GetTokenForSqlServer(ConfigurationManager.AppSettings["WeixinAppId"], ConfigurationManager.AppSettings["WeixinAppSecret"]), WeixinOpenId); responseMessage.Articles.Add(new Article() { Title = user.nickname + ",您有一个0元设计未领", PicUrl = "http://material-ui.net/content/zixun.jpg", Url = "http://material-ui.net/booking.html", Description = user.nickname + ",您有一个0元设计未领。实力整装,省钱,省力,省心。" }); } catch (Exception ex) { responseMessage.Articles.Add(new Article() { Title = "您有一个0元设计未领", PicUrl = "http://material-ui.net/content/zixun.jpg", Url = "http://material-ui.net/booking.html", Description = "您有一个0元设计未领。实力整装,省钱,省力,省心。" + ex.Message }); } //获取订阅用户昵称 //responseMessage.Articles.Add(new Article() { Title = user.nickname+",您有一个0元设计未领", PicUrl = "http://material-ui.net/content/zixun.jpg", Url = "http://material-ui.net/booking.html", Description = user.nickname+",您有一个0元设计未领。实力整装,省钱,省力,省心。" }); //推送消息 //下载文档 //if (requestMessage.EventKey.StartsWith("qrscene_")) //{ // var sceneId = long.Parse(requestMessage.EventKey.Replace("qrscene_", "")); // //var configHelper = new ConfigHelper(new HttpContextWrapper(HttpContext.Current)); // var codeRecord = // ConfigHelper.CodeCollection.Values.FirstOrDefault(z => z.QrCodeTicket != null && z.QrCodeId == sceneId); // if (codeRecord != null) // { // //确认可以下载 // codeRecord.AllowDownload = true; // AdvancedAPIs.CustomApi.SendText(null, WeixinOpenId, GetDownloadInfo(codeRecord)); // } //} return(responseMessage); }
public void SendTemplateMsg() { //var data = new { // touser= "******", // template_id= "qjoS1AGFKs9FuFRJI2oh5W1HMz9J5Og1XT9fTQmtZQU", // data = new{ // first = new{ // value= "徐航,订单绑定成功。" // }, // OrderSn = new // { // value= "242226243293916259" // }, // OrderStatus = new // { // value="已付款" // }, // remark = new // { // value= "可在“我的订单”中查看追踪订单信息。订单付款28.00元,预计可返现0.98元。" // } // } //}; var data = new { touser = "******", template_id = "WdfEogtJVP1p1uD2MyvQawv1bWwJZVg_F5gJvqo-8sg", url = "http://tb.yshizi.cn/", data = new { first = new { value = "贤~枫之霖,您的返现已到账。" }, order = new { value = "244813188846738893" }, money = new { value = "5.28元" }, remark = new { value = "请领取您的红包。" } } }; var result = WeixinHelper.SendTemplateMsg(AccessTokenHelper.GetAccessToken(), JsonConvert.SerializeObject(data)); Assert.IsNull(result); }
public async Task <IActionResult> IsLoggedIn() { try { await AccessTokenHelper.GetAccessToken(HttpContext, AzureAdB2COptions); } catch { return(Unauthorized()); } return(Ok()); }
public void OnAuthorization(AuthorizationFilterContext context) { var guidAccessToken = ApplicationHelper.GetAuthorizationToken(context.HttpContext); if (IsNullOrWhiteSpace(guidAccessToken)) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } var jsonAccessToken = EncryptionHelper.AesDecryptString(guidAccessToken); if (IsNullOrEmpty(jsonAccessToken)) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } var accessTokenDataVm = jsonAccessToken.ObjectDeserialize <AccessTokenDataVm>(); if (accessTokenDataVm is null) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } if (!AccessTokenHelper.IsValidationExpirationDate(accessTokenDataVm.ExpirationDate)) { context.Result = CreateResult(EResultStatus.AccessTokenExpired); return; } var service = context.HttpContext.RequestServices.GetService <IInMemoryUserAccessService>(); var userAccessInMemoryVm = service.Get(accessTokenDataVm.UserId); if (userAccessInMemoryVm is null) { context.Result = CreateResult(EResultStatus.InvalidToken); return; } var hasAccess = HasUserAccess(userAccessInMemoryVm.UserAccessIds); if (!hasAccess) { context.Result = CreateResult(EResultStatus.AccessDenied); } }
/// <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 }); } }
public HttpResponseMessage AccessToken() { try { var token = AccessTokenHelper.GetAccessToken(); return(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonConvert.SerializeObject(token)) }); } catch (Exception ex) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(ex.Message) }); } }
public static void Register() { Token = System.Configuration.ConfigurationManager.AppSettings["Token"]; EncodingAESKey = System.Configuration.ConfigurationManager.AppSettings["EncodingAESKey"]; AppID = System.Configuration.ConfigurationManager.AppSettings["AppID"]; AppSecret = System.Configuration.ConfigurationManager.AppSettings["AppSecret"]; PartnerKey = System.Configuration.ConfigurationManager.AppSettings["PartnerKey"]; Domain = System.Configuration.ConfigurationManager.AppSettings["Domain"]; APIDomain = System.Configuration.ConfigurationManager.AppSettings["APIDomain"]; mch_id = System.Configuration.ConfigurationManager.AppSettings["mch_id"]; DeviceInfo = System.Configuration.ConfigurationManager.AppSettings["device_info"]; SpbillCreateIp = System.Configuration.ConfigurationManager.AppSettings["spbill_create_ip"]; var openJSSDK = int.Parse(System.Configuration.ConfigurationManager.AppSettings["OpenJSSDK"]) > 0; OauthScope = System.Configuration.ConfigurationManager.AppSettings["OauthScope"]; Report_Levenl = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Report_Levenl"]); PayNotifyUrl = System.Configuration.ConfigurationManager.AppSettings["PayNotifyUrl"]; WeixinDomain = ""; AccessToken = BasicAPI.GetAccessToken(AppID, AppSecret).access_token; WeixinSDK.GlobalContext.AppID = AppID; WeixinSDK.GlobalContext.AppSecret = AppSecret; WeixinSDK.GlobalContext.AccessToken = AccessToken; WeixinSDK.GlobalContext.WebAccessToken = WebAccessToken; WeixinSDK.GlobalContext.Domain = Domain; WeixinSDK.GlobalContext.APIDomain = APIDomain; WeixinSDK.GlobalContext.MCHId = mch_id; WeixinSDK.GlobalContext.PartnerKey = PartnerKey; WeixinSDK.GlobalContext.DeviceInfo = DeviceInfo; WeixinSDK.GlobalContext.SpbillCreateIp = SpbillCreateIp; WeixinSDK.GlobalContext.Report_Levenl = Report_Levenl; WeixinSDK.GlobalContext.PayNotifyUrl = PayNotifyUrl; AccessTokenHelper = new AccessTokenHelper(6000, AppID, AppSecret, openJSSDK); AccessTokenHelper.Run(); }
private static async Task <string> GetBearerToken(AadAppSettings authSettings) { return(await AccessTokenHelper.GetAccessToken(authSettings)); }
/// <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 }
// GET: Wo public ActionResult Index(string userId, string counts, string companyId) { log.AppenLog("我看看22"); try { string userID = ""; string CompanyId = ""; string user_ticket = "";//成员票据,通过这个得到登陆进来的人的详情信息 #region 得到userid和公司id //当是从别的页面回来时 if (!string.IsNullOrWhiteSpace(userId)) { userID = Base64MIMA.JIE(userId); } if (!string.IsNullOrWhiteSpace(companyId)) { CompanyId = Base64MIMA.JIE(companyId); } if (userID == "") { //通过code得到userid string code1 = Request["code"]; if (code1 != "") { Tuple <bool, UserInfo> tu2 = BonusHelper.AccessTokenHelper.GetWechatUserInfo2(code1);//第三方应用 if (tu2.Item1 || Session["aaa"] != null) { if (Session["aaa"] == null) { log.AppenLog("if"); userID = tu2.Item2.UserId;//得到userid Session["aaa"] = userID; // c.Value = tu2.Item2; } else { log.AppenLog("else"); userID = Session["aaa"].ToString(); //userid = c.Value; } } try { userID = userID.Replace('"', ' '); userID = userID.Trim(); CompanyId = tu2.Item2.CorpId; user_ticket = tu2.Item2.user_ticket; } catch (Exception ex) { } } else { //code为空,跳到错误页面 return(Redirect("/ErrorPage/Index")); } } #endregion userID = "lzc"; CompanyId = "wx512ad5972960e003"; //加密公司id和userid log.AppenLog("登陆进来userid:" + userId); ViewBag.CompanyID = Base64MIMA.JIA(CompanyId); ViewBag.userID = Base64MIMA.JIA(userID); //工号 ViewBag.SuserId = userID; #region 判断公司是否在有效期 //在:看登陆进来的人是否是某个公司的负责人,如果是的话就把他的联系方式等填到相关公司表里,不是直接进入后台 //不在:提示已经过了有效期,需要联系我们来审核 string sqlstr = string.Format($"exec Proc_Wo 'IsValidComoany','{CompanyId}'"); DataTable dt_IsValidComoany = sql.GetDataTableCommand(sqlstr); if (dt_IsValidComoany?.Rows.Count > 0) { //通过user_ticket得到详细信息 string strResult = AccessTokenHelper.GetUserDetail2(user_ticket); log.AppenLog("页面成员信息:" + strResult); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(UserDetials)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strResult)); UserDetials obj = (UserDetials)ser.ReadObject(ms); //判断是否是某个公司的负责人 string sqlstr2 = string.Format($"select * from Company where CompanyPrincipal='{userID}'"); DataTable dt2 = sql.GetDataTableCommand(sqlstr2); if (dt2?.Rows.Count > 0) { //是某个公司负责人==>将他的信息放到公司列表里面去 string CompanyPhone = ""; string CompanyEmail = ""; string upCom = ""; for (int i = 0; i < dt2?.Rows.Count; i++) { if (dt2.Rows[i]["CompanyPhone"].ToString() == "" || dt2.Rows[i]["CompanyEmail"].ToString() == "") { CompanyPhone = obj.mobile; CompanyEmail = obj.email; upCom += string.Format($" update Company set CompanyPhone='{CompanyPhone}' where CompanyID={dt2.Rows[i]["CompanyID"].ToString()}"); } } if (upCom != "") { sql.EditDataCommand(upCom); } } //更新对应人的信息 try { string py = Pinyin.GetInitials(obj.name); //简拼 string pinyin = Pinyin.GetPinyin(obj.name).Replace(" ", ""); //全拼 string upEmp = string.Format($"exec Proc_Wo 'UpdateTouXiang','{obj.corpid}','{obj.userid}','{obj.avatar}','{obj.mobile}','{obj.email}','{pinyin}','{py}',{obj.gender}"); log.AppenLog("更新人员信息:" + upEmp); string info_upEmp = sql.EditDataCommand(upEmp); if (info_upEmp != "0") { return(Content("<script>alert('获取个人信息失败');history.go(-1);</script>")); } } catch (Exception ex) { } } else { //return Content("<script>alert('您的使用期限已过,请联系我们!8888888');history.go(-1);</script>"); return(Redirect("/Wo/EndIndex")); } #endregion #region 个人信息与个人奖金 string infosql = string.Format($"exec proc_Main 'SelectEmpDetialWo','{userID}','','{CompanyId}'"); DataSet info = sql.GetDataSetCommand(infosql); if (info?.Tables.Count > 0) { //个人信息 if (info?.Tables[0].Rows.Count > 0) { //是否位超级管理员 if (info.Tables[0].Rows[0]["RoleID"].ToString() == "8EA2CC5C-308D-4538-A9D8-FCAD7CA6FEB0") { ViewBag.chaoji = 1; } else { ViewBag.chaoji = 0; } ViewBag.info = info.Tables[0]; } else { ViewBag.info = null; ViewBag.chaoji = 0; } //个人奖金 if (info?.Tables[1].Rows.Count > 0) { ViewBag.SumMoney = info.Tables[1].Rows[0][0]; } else { ViewBag.SumMoney = "0.00"; } } else { ViewBag.info = null; ViewBag.chaoji = 0; } #endregion #region 部门奖金 string isDepartPri = string.Format($"exec proc_Main 'SelectDepJIangjin','{userID}','','{CompanyId}'"); DataTable dss = sql.GetDataTableCommand(isDepartPri); if (dss?.Rows.Count > 0) { ViewBag.depSumMoney = dss; } else { ViewBag.depSumMoney = null; } //string isDepartPri = string.Format("SELECT DepartID FROM dbo.Depart WHERE DepartPrincipal='{0}'", userID); // string isDepartPri = string.Format("SELECT DepartID FROM dbo.Depart WHERE DepartPrincipal='{0}' AND CompanyID='{1}'", userID, CompanyId); // DataTable dss = sql.GetDataTableCommand(isDepartPri); // if (dss.Rows.Count > 0) // { // //是部门负责人 // //ViewBag.isDepartPri = "youarePri"; // //部门奖金 // string sqlDepart = string.Format(@"SELECT DepartID,DepartName,ISNULL(EarMoney,'0.00') Earmoney,EarMan FROM dbo.Depart d LEFT JOIN //(SELECT SUM(EarMoney) EarMoney ,EarMan FROM dbo.BonusData2 WHERE BonusType=0 AND IsGet=0 GROUP BY EarMan ) // b ON d.DepartID=b.EarMan WHERE DepartPrincipal='{0}' and CompanyID='{1}'", userID, CompanyId); // DataTable DepartName = sql.GetDataTableCommand(sqlDepart); // if (DepartName.Rows.Count > 0) // { // ViewBag.depSumMoney = DepartName; // } // else // { // ViewBag.depSumMoney = null; // } // } // else // { // //ViewBag.isDepartPri = null; // } #endregion #region 奖金项 string isitp = string.Format(@"SELECT A.BonusItemID,A.BIName,RM,IM FROM ( SELECT RuleData.BonusItemID,BIName,SUM(RemainMoney)RM FROM dbo.RuleData INNER JOIN dbo.BonusItem ON BonusItem.BonusItemID = RuleData.BonusItemID WHERE RuleData.BonusItemID IN (SELECT BonusItemID FROM dbo.BonusImpower WHERE BIState=0 AND EmpID='{0}') AND CompanyID='{2}' AND GETDATE()<EndDate GROUP BY RuleData.BonusItemID,BIName) AS A LEFT JOIN (SELECT b2.BonusItemID,BIName,SUM(b1.RemainMoney) IM FROM dbo.BonusImpower b1 INNER JOIN dbo.BonusItem b2 ON b2.BonusItemID = b1.BonusItemID WHERE BIState=0 AND EmpID = '{1}' AND (ImpowerDate >= DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0) and IsValid=0) GROUP BY b2.BonusItemID, BIName) AS B ON A.BonusItemID=B.BonusItemID AND A.BIName=B.BIName", userID, userID, CompanyId); DataTable itp = sql.GetDataTableCommand(isitp); if (itp?.Rows.Count > 0) { ViewBag.itp = itp; } else { ViewBag.itp = null; } //自己负责的奖金项 string isitem = string.Format("SELECT dbo.RuleData.BonusItemID,dbo.BonusItem.BIName,SUM(RemainMoney) AllMoney FROM dbo.RuleData INNER JOIN dbo.BonusItem ON BonusItem.BonusItemID = RuleData.BonusItemID WHERE BIState=0 AND CompanyID='{1}' AND BIPrincipal = '{0}' AND CONVERT(VARCHAR(30), GETDATE(), 102) < EndDate GROUP BY dbo.RuleData.BonusItemID, dbo.BonusItem.BIName", userID, CompanyId); DataTable item = sql.GetDataTableCommand(isitem); if (item?.Rows.Count > 0) { for (int i = 0; i < item?.Rows.Count; i++) { Session["shit" + i] = sql.GetDataTableProcedure("proc_BonusData", item.Rows[i]["BonusItemID"].ToString(), "1"); } ViewBag.item = item; } else { ViewBag.item = null; } //查自己有没有奖金发放权限 string sqlsq = string.Format($@" SELECT b2.BonusItemID, BIName, SUM(b1.RemainMoney) IM FROM dbo.BonusImpower b1 INNER JOIN dbo.BonusItem b2 ON b2.BonusItemID = b1.BonusItemID WHERE BIState = 0 AND EmpID = '{userID}' AND(ImpowerDate >= DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0) and IsValid = 0) GROUP BY b2.BonusItemID, BIName"); DataTable dtsq = sql.GetDataTableCommand(sqlsq); ViewBag.counts = dtsq.Rows.Count + item.Rows.Count; ViewBag.count = Base64MIMA.JIA((dtsq.Rows.Count + item.Rows.Count).ToString()); #endregion InitJsapi(Base64MIMA.JIA(CompanyId)); } catch (Exception ex) { log.AppenLog("woIndex错误:" + ex.Message); return(Redirect("/ErrorPage/Index")); } return(View()); }
public static async Task Run( [QueueTrigger(Settings.activityReportQueueName, Connection = "")] ActivityReportRequest inputQueueMessage, [Queue(Settings.activityReportQueueName, Connection = "")] ICollector <ActivityReportRequest> retryQueueMessages, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {inputQueueMessage}"); //We need YYYY-MM-DD foramt string todayStringUtc = DateTime.Today.ToString("yyyy-MM-dd"); if (string.IsNullOrEmpty(accessToken)) { accessToken = await AccessTokenHelper.FetchAccessToken(); } //Generate HTTP Request string requestQuery = GenerateReportUrl(inputQueueMessage.Type, todayStringUtc); var request = new HttpRequestMessage() { RequestUri = new Uri(requestQuery), Method = HttpMethod.Get }; request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); //Send Http Request and get report url HttpResponseMessage response = await graphHttpClient.SendAsync(request); if (response.IsSuccessStatusCode) { string downloadUrl = response.RequestMessage.RequestUri.ToString(); //Console.WriteLine(downloadUrl); //Download report(csv file) and save it to blob storage var downloadResponse = await downloadClient.GetAsync(downloadUrl); if (downloadResponse.IsSuccessStatusCode) { await UploadReport(inputQueueMessage.TypeString, downloadResponse, todayStringUtc); } //If we got 427 status (TooManyRequests), we need to handle Throttling. https://docs.microsoft.com/en-us/graph/throttling else if (downloadResponse.StatusCode == HttpStatusCode.TooManyRequests) { TimeSpan sleepTime; if (downloadResponse.Headers.RetryAfter.Delta.HasValue) { //Need to handle Nullable type https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/index sleepTime = downloadResponse.Headers.RetryAfter.Delta.Value; } else { //Sleep 10 sec at 1st time, then speel 10 + 10n after 2nd time sleepTime = new TimeSpan(0, 0, 10 + inputQueueMessage.RetryCount * 10); } Thread.Sleep(sleepTime); retryQueueMessages.Add(new ActivityReportRequest(inputQueueMessage.Type, inputQueueMessage.RetryCount++)); } else { Console.WriteLine($"Response Status: {downloadResponse.StatusCode}"); Console.WriteLine($"Error Reason: {downloadResponse.ReasonPhrase}"); throw new Exception();//Throw exception and re-try with queue (max.5) } } }
// GET: Me public ActionResult Index(string openid) { if (!string.IsNullOrEmpty(openid)) { WxUserDao userDao = new WxUserDao(); //1 查询是否已经存在ticket和nickname信息 WxUser user = userDao.Find(openid); bool isExist = user != null; //2 如果没有nickname需获取用户信息 if (user == null || string.IsNullOrEmpty(user.headimgurl) || string.IsNullOrEmpty(user.nickname)) { var userinfo = Common.HttpUtility.HttpGet($"https://api.weixin.qq.com/cgi-bin/user/info?access_token={AccessTokenHelper.GetAccessToken()}&openid={openid}&lang=zh_CN", "", "utf-8"); JObject jobect = (JObject)JsonConvert.DeserializeObject(userinfo); if ((string)jobect["subscribe"] == "0") { return(View("Error", new { message = "未关注" })); } user = new WxUser(); user.openid = openid; user.headimgurl = (string)jobect["headimgurl"]; user.nickname = (string)jobect["nickname"]; user.ticket = WeixinHelper.CreateTempQRCode(openid); user.ticketcreatedatetime = DateTime.Now; if (!isExist) { userDao.Add(user); } else { userDao.Update(user); } } return(View(user)); } else { return(View("Error")); } }
/// <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)); } }
public static async Task Run( [QueueTrigger(Settings.userQueueName, Connection = "")] UserSyncRequest inputQueueItem, [Queue(Settings.userQueueName, Connection = "")] ICollector <UserSyncRequest> pagingQueueItems, [Table(Settings.userTableName, Connection = "")] ICollector <UserEntity> userEntities, [Queue(Settings.eventQueueName, Connection = "")] ICollector <CalendarSyncRequest> calendarQueueItems, ILogger log) { log.LogInformation("Fetch user info started"); //If app doesn't have access token yet, fetch it from Azure AD if (string.IsNullOrEmpty(accessToken)) { accessToken = await AccessTokenHelper.FetchAccessToken(); } //If app get queue message without url, app will use default query. If not, app will use url (nextlink) string graphRequestUrl = string.IsNullOrEmpty(inputQueueItem.Url) ? defaultUserRequestUrl : inputQueueItem.Url; //Create http request message with access token var request = new HttpRequestMessage() { RequestUri = new Uri(graphRequestUrl), Method = HttpMethod.Get }; request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); HttpResponseMessage response = await graphClient.SendAsync(request); log.LogInformation($"Reponse code is: {response.StatusCode}"); if (response.StatusCode == HttpStatusCode.Unauthorized) { //When token expire after 60 min, we need to get new token accessToken = await AccessTokenHelper.FetchAccessToken(); //App will re-try with same queue message pagingQueueItems.Add(inputQueueItem); } else if (response.StatusCode == HttpStatusCode.TooManyRequests) { System.Threading.Thread.Sleep(sleepInterval); pagingQueueItems.Add(inputQueueItem); } else if (response.IsSuccessStatusCode) { var responseData = await response.Content.ReadAsAsync <UserResponse>(); //Pass @odata.nextlink to storage queue for requesting MS graph with multiple Azure Functions node if (!string.IsNullOrEmpty(responseData.NextLink)) { pagingQueueItems.Add(new UserSyncRequest() { Url = responseData.NextLink }); } foreach (User userData in responseData.value) { //Save user data to Storage Table userEntities.Add(new UserEntity(userData)); //Send queue message for fetching calendar items calendarQueueItems.Add(new CalendarSyncRequest() { UserId = userData.Id, Start = DateTime.Now.AddDays(-1), End = DateTime.Now } ); } } }
public static async Task Run( [QueueTrigger(Settings.eventQueueName, Connection = "")] CalendarSyncRequest inputQueueItem, [Queue(Settings.eventQueueName, Connection = "")] ICollector <CalendarSyncRequest> pagingQueueItems, [Table(Settings.eventTableName, Connection = "")] ICollector <EventEntity> eventEntities, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {inputQueueItem}"); //If app doesn't have access token yet, fetch it from Azure AD if (string.IsNullOrEmpty(accessToken)) { accessToken = await AccessTokenHelper.FetchAccessToken(); } /* * Create Http Request * In usual we use DefaultRequestHeaders to add http request header. Because many Azure Functions instance will use same httpClient, it will make conflict to handle it. * For resolving this, we create HttpRequestMessage for each request. * https://stackoverflow.com/questions/23521626/modify-request-headers-per-request-c-sharp-httpclient-pcl * */ string requestQuery = string.IsNullOrEmpty(inputQueueItem.Url) ? CreateRequestQuery(inputQueueItem) : inputQueueItem.Url; var request = new HttpRequestMessage() { RequestUri = new Uri(requestQuery), Method = HttpMethod.Get }; request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); HttpResponseMessage response = await graphHttpClient.SendAsync(request); if (response.StatusCode == HttpStatusCode.Unauthorized) { //When token expire after 60 min, we need to get new token accessToken = await AccessTokenHelper.FetchAccessToken(); //App will re-try with same queue message pagingQueueItems.Add(inputQueueItem); } else if (response.StatusCode == HttpStatusCode.TooManyRequests) { System.Threading.Thread.Sleep(sleepInterval); pagingQueueItems.Add(inputQueueItem); } else if (response.IsSuccessStatusCode) { var responseData = await response.Content.ReadAsAsync <CalendarViewResponse>(); //Pass @odata.nextlink to storage queue for requesting MS graph with multiple Azure Functions node if (!string.IsNullOrEmpty(responseData.odatanextLink)) { pagingQueueItems.Add(new CalendarSyncRequest() { UserId = inputQueueItem.UserId, Url = responseData.odatanextLink, Start = DateTime.Now.AddDays(-1), End = DateTime.Now }); } foreach (Event eventData in responseData.value) { eventEntities.Add(new EventEntity(eventData, inputQueueItem.UserId)); } } }