/// <summary> /// 通过ticket换取二维码 /// </summary> /// <param name="ticket"></param> /// <param name="filepath"></param> /// <returns></returns> public static MediaGetRes Showqrcode(string ticket, string filepath) { string filename = null; string url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="; url += ticket; TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.DownloadFile(url, filepath); string disposition = wc.ResponseHeaders["Content-disposition"]; if (string.IsNullOrEmpty(disposition)) { string json = System.IO.File.ReadAllText(filepath); return(JsonConvert.DeserializeObject <MediaGetRes>(json)); } else { filename = StringHelper.SubString(disposition, "filename=\"", "\""); } return(new MediaGetRes() { errcode = "0", filename = filename }); }
/// <summary> /// 获取临时素材 /// </summary> /// <param name="access_token"></param> /// <param name="media_id"></param> /// <param name="filepath"></param> /// <returns></returns> public static MediaGetRes Media_Get(string access_token, string media_id, string filepath) { string filename = null; string url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}"; url = string.Format(url, access_token, media_id); TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.DownloadFile(url, filepath); string disposition = wc.ResponseHeaders["Content-disposition"]; if (string.IsNullOrEmpty(disposition)) { string json = System.IO.File.ReadAllText(filepath); return(JsonConvert.DeserializeObject <MediaGetRes>(json)); } else { filename = StringHelper.SubString(disposition, "filename=\"", "\""); } return(new MediaGetRes() { errcode = "0", filename = filename }); }
/// <summary> /// 获取企业号JsApi调用凭据config /// </summary> /// <param name="url"></param> /// <returns></returns> public static GetQyApiConfigRes GetQyJsApiConfig(string url) { url = HttpUtility.UrlEncode(url); var json = ThreadWebClientFactory.GetWebClient() .DownloadString($"{ConfigurationManager.AppSettings["ShortUrlService"]}/JsApi/Index?url=" + url); var res = JsonConvert.DeserializeObject <GetQyApiConfigRes>(json); return(res); }
/// <summary> /// GET方式请求一个字符串 /// </summary> /// <param name="url"></param> /// <param name="pu"></param> /// <returns></returns> public string GetString(string url, Dictionary <string, string> pu) { var param = string.Join("&", pu.Select(a => a.Key + "=" + a.Value)); var wc = ThreadWebClientFactory.GetWebClient(WEBCLIENTTHREADKEY); wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var rel = wc.GetLoadData(url, param); var json = Encoding.UTF8.GetString(rel); return(json); }
/// <summary> /// 获取自定义菜单配置接口 /// </summary> /// <param name="access_token"></param> /// <returns></returns> public static string Get_current_selfmenu_info(string access_token) { string url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token="; url += access_token; TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.Encoding = Encoding.UTF8; var json = wc.GetLoadString(url, string.Empty); return(json); }
/// <summary> /// Get请求并反馈解码后的Json对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <returns></returns> public static T GetObject <T>(string url, string param = "") where T : BaseRes { TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.Encoding = Encoding.UTF8; var json = wc.GetLoadString(url, param); var rel = JsonConvert.DeserializeObject <T>(json); if (string.IsNullOrEmpty(rel.errcode)) { rel.errcode = "0"; } return(rel); }
/// <summary> /// 进入Action之前进行拦截 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpSessionStateBase Session = filterContext.HttpContext.Session; string userId = Session[ConstantHelper.CurrentOpenId] as string; if (string.IsNullOrEmpty(userId)) { // 如果是ajax请求,应直接反馈json提示手动刷新页面 if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest" || filterContext.HttpContext.Request["IsJsonCall"] == "1") { filterContext.Result = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { state = 0, txt = "操作失败!页面超时失效,请重新打开当前页面" } }; } else { var user_ticket = filterContext.HttpContext.Request["user_ticket"]; if (string.IsNullOrEmpty(user_ticket)) { // 还未通过oauth2取得openid var oauth2url = $"{ConfigurationManager.AppSettings["ShortUrlService"]}/s/{MappingKey}"; filterContext.Result = new RedirectResult(oauth2url); } else { var json = ThreadWebClientFactory.GetWebClient() .DownloadString($"{ConfigurationManager.AppSettings["ShortUrlService"]}/UrlMapping/GetUserInfoByTicket/{user_ticket}"); var userInfoRes = JsonConvert.DeserializeObject <WxUserInfoRes>(json); if (userInfoRes.state == 1 && userInfoRes.userinfo.errcode == 1) { Session[ConstantHelper.CurrentOpenId] = userInfoRes.userinfo.userId; } else { // 没有权限 filterContext.HttpContext.Response.Write("您无使用此功能的权限"); } } } } }
/// <summary> /// Post请求并反馈解码后的Json对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="post"></param> /// <returns></returns> public static T PostObject <T>(string url, string post) where T : BaseRes { TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.Encoding = Encoding.UTF8; wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var json = wc.PostLoadString(url, post); var rel = JsonConvert.DeserializeObject <T>(json); if (string.IsNullOrEmpty(rel.errcode)) { rel.errcode = "0"; } return(rel); }
// 素材管理接口 #region 新增临时素材 /// <summary> /// 新增临时素材 /// </summary> /// <param name="access_token"></param> /// <param name="type"></param> /// <param name="file"></param> /// <returns></returns> public static MediaUploadRes Media_Upload(string access_token, EnumUploadType type, string file) { string url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}"; url = string.Format(url, access_token, type); TimeoutWebClient wc = ThreadWebClientFactory.GetWebClient(); wc.Encoding = Encoding.UTF8; wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var bytes = wc.UploadFile(url, "POST", file); string json = Encoding.UTF8.GetString(bytes); MediaUploadRes res = JsonConvert.DeserializeObject <MediaUploadRes>(json); if (string.IsNullOrEmpty(res.errcode)) { res.errcode = "0"; } return(res); }
/// <summary> /// POST方式请求一个字符串 /// </summary> /// <param name="url"></param> /// <param name="pu"></param> /// <returns></returns> public string PostString(string url, Dictionary <string, string> pu) { Dictionary <string, string> gets = new Dictionary <string, string>(); gets.Add("timestamp", pu["timestamp"]); gets.Add("consumer_key", pu["consumer_key"]); gets.Add("sig", pu["sig"]); pu.Remove("timestamp"); pu.Remove("consumer_key"); pu.Remove("sig"); var urlparam = string.Join("&", gets.Select(a => a.Key + "=" + a.Value)); var param = string.Join("&", pu.Select(a => a.Key + "=" + a.Value)); var wc = ThreadWebClientFactory.GetWebClient(WEBCLIENTTHREADKEY); wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var rel = wc.PostLoadData(url + "?" + urlparam, param); var json = Encoding.UTF8.GetString(rel); return(json); }
/// <summary> /// 进入Action之前进行拦截 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Response.Headers.Add("mic", "1"); var uri = filterContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath; HttpSessionStateBase Session = filterContext.HttpContext.Session; var wxUser = Session[ConstantHelper.CURRENTWXUSER] as P_USERINFO; if (wxUser == null || string.IsNullOrEmpty(wxUser.UserId)) { var user_ticket = filterContext.HttpContext.Request["user_ticket"]; if (string.IsNullOrEmpty(user_ticket)) { // 还未通过oauth2取得openid var oauth2url = $"{ConfigurationManager.AppSettings["ShortUrlService"]}/s/{MappingKey}"; if (CallBackUrl) { var nowUrl = System.Configuration.ConfigurationManager.AppSettings["CurrentRootDomain"] + filterContext.HttpContext.Request.Url.PathAndQuery; oauth2url += $"?callback={HttpUtility.UrlEncode(nowUrl)}"; } filterContext.Result = new RedirectResult(oauth2url); } else { var getUserInfoUrl = $"{ConfigurationManager.AppSettings["iPathAuthService"]}/UrlMapping/GetUserInfoByTicket/{user_ticket}"; LogHelper.Info(getUserInfoUrl); var json = ThreadWebClientFactory.GetWebClient().DownloadString(getUserInfoUrl); LogHelper.Info(json); var userInfoRes = JsonConvert.DeserializeObject <WxUserInfoRes>(json); if (userInfoRes.state == 1 && userInfoRes.userinfo.errcode == 1) { var channelUser = UserInfoClientChannelFactory.GetChannel(); var channelBase = BaseDataClientChannelFactory.GetChannel(); var userId = userInfoRes.userinfo.userId; var userInfo = channelUser.FindByUserId(userId); if (userInfo == null) { var res1 = channelUser.Find(userId); P_USERINFO entity = new P_USERINFO(); entity.ID = Guid.NewGuid(); entity.UserId = userId; entity.Name = res1.Name; entity.CreateDate = DateTime.Now; var _res = channelUser.Add(entity); userInfo = channelUser.FindByUserId(userId); } var listGroup = channelBase.LoadUserGroup(userId).Select(a => a.GroupType).ToArray(); if (listGroup.Contains(GroupType.ServPause)) { userInfo.IsServPause = 1; } if (listGroup.Contains(GroupType.OutSideHT)) { userInfo.IsOutSideHT = 1; } Session[ConstantHelper.CURRENTWXUSER] = userInfo; var url = filterContext.HttpContext.Request.RawUrl; if (url.Contains("user_ticket")) { url = url.Replace($"user_ticket={user_ticket}", string.Empty); } filterContext.Result = new RedirectResult(url); } else { // 没有权限 filterContext.Result = new ContentResult() { Content = "您无使用此功能的权限" }; } } } else { var IsPublishProgram = ConfigurationManager.AppSettings["IsPublishProgram"]; var SystemCoders = ConfigurationManager.AppSettings["SystemCoders"]; List <string> Coders = new List <string>(); if (!string.IsNullOrEmpty(SystemCoders)) { Coders = SystemCoders.Split(';').ToList(); } if (IsPublishProgram == "1" && !Coders.Contains(wxUser.UserId)) { var LocalService = ConfigurationManager.AppSettings["LocalService"]; filterContext.Result = new RedirectResult(LocalService + "/P/Publish/Index"); } } }