public async Task<IdentityResult> ChangePassword(PostModel userModel) { var user = await _userManager.FindAsync(userModel.username, userModel.password); var result = await _userManager.ChangePasswordAsync(user.Id, userModel.password, userModel.newpassword); return result; }
public async Task<IdentityResult> DeleteUser(PostModel userModel) { var user = await _userManager.FindAsync(userModel.username, userModel.password); var result = await _userManager.DeleteAsync(user); return result; }
public void Update(PostModel post) { BlogID = post.BlogID; Content = post.Content; Description = post.Description; Guid = post.Guid; Link = post.Link; PublicationDate = post.PublicationDate; Title = post.Title; }
public async Task<IdentityResult> RegisterUser(PostModel userModel) { IdentityUser user = new IdentityUser { UserName = userModel.username }; var result = await _userManager.CreateAsync(user, userModel.password); return result; }
public void Update(PostModel post) { if(post.PostId == 0) { PostDate = DateTime.Now; } PostId = post.PostId; PostTitle = post.PostTitle; PostContent = post.PostContent; }
public dynamic Post(PostModel model) { var user = Users.Name(model.Username); if (user == null || (!string.IsNullOrEmpty(model.Password) && !user.PasswordValid(model.Password))) { var response = new HttpResponseMessage(HttpStatusCode.BadRequest); response.Content = new StringContent("invalid_grant"); return response; } return Json(new { id = user.Username, scope = user.IntersectScope(model.Scope) }); }
// todo: find a way to wire this into the UI. this will make a comprehensive demo. public IHttpActionResult Post(PostModel model) { if (!_devAccessChecker.UserHasDevAccess()) return NotFound(); if (string.IsNullOrWhiteSpace(model.code) || string.IsNullOrWhiteSpace(model.description)) return BadRequest("IC was not added: please send all fields."); var newIc = new IntegratedCircuit { Code = model.code, Description = model.description }; _session.Save(newIc); var location = Url.Link("DefaultApi", new { controller = "ics", id = newIc.Id }); return Created(location, newIc); }
public ActionResult AddPost(PostModel postModel) { ObjectId themeId = ObjectId.TryParse(postModel.ThemeId, out themeId) ? themeId : ObjectId.Empty; _themeDoc = _themeService.GetTheme(themeId); if (ModelState.IsValid) { var newPost = new PostDocument { PostId = ObjectId.GenerateNewId(), Author = User == null ? AnonymousName : User.Identity.Name, Date = DateTime.Now, Details = postModel.Details, }; _postService.AddPost(ObjectId.Parse(postModel.ThemeId), newPost); PostListItemModel postListItemModel = MapPost(newPost); return new JsonResult { Data = new { result = 1, postHtml = RenderPartialHelper.RenderPartialViewToString("PostListItem", postListItemModel, this), addHtml = RenderPartialHelper.RenderPartialViewToString("AddPost", new PostModel { ThemeId = postModel.ThemeId }, this), } }; } return new JsonResult { Data = new { result = 0, addHtml = RenderPartialHelper.RenderPartialViewToString("AddPost", postModel, this), } }; }
/// <summary> /// 检查签名是否正确 /// </summary> /// <param name="signature"></param> /// <param name="postModel">需要提供:Timestamp、Nonce、Token</param> /// <returns></returns> public static bool Check(string signature, PostModel postModel) { return(Check(postModel.Timestamp, postModel.Nonce, postModel.Token)); }
public static async Task<DataModel.Comment> PostCommentAsync(String access_code, String Uri, PostModel.Comment comment) { Object message = await PostAsync(access_code, Uri, comment, typeof(DataModel.Comment)); return (DataModel.Comment)message; }
/// <summary> /// 返回正确的签名 /// </summary> /// <param name="postModel">需要提供:Timestamp、Nonce、Token</param> /// <returns></returns> public static string GetSignature(PostModel postModel) { return(GetSignature(postModel.Timestamp, postModel.Nonce, postModel.Token)); }
public static readonly string CorpId = "wx7618c0a6d9358622"; //与微信企业账号后台的EncodingAESKey设置保持一致,区分大小写。 protected void Page_Load(object sender, EventArgs e) { string msg_signature = Request["msg_signature"]; string timestamp = Request["timestamp"]; string nonce = Request["nonce"]; string echostr = Request["echostr"]; if (Request.HttpMethod == "GET") { //get method - 仅在微信后台填写URL验证时触发 var verifyUrl = QY.Signature.VerifyURL(Token, EncodingAESKey, CorpId, msg_signature, timestamp, nonce, echostr); if (verifyUrl != null) { WriteContent(verifyUrl); //返回解密后的随机字符串则表示验证通过 } else { WriteContent("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"); } Response.End(); } else { //post method - 当有用户想公众账号发送消息时触发 var postModel = new PostModel() { Msg_Signature = Request.QueryString["msg_signature"], Timestamp = Request.QueryString["timestamp"], Nonce = Request.QueryString["nonce"], //以下保密信息不会(不应该)在网络上传播,请注意 Token = Token, EncodingAESKey = EncodingAESKey, CorpId = CorpId, }; var maxRecordCount = 10; //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount); if (messageHandler.RequestMessage == null) { //验证不通过或接受信息有错误 } try { //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt")); //执行微信处理过程 messageHandler.Execute(); //测试时可开启,帮助跟踪数据 messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt")); messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt")); //自动返回加密后结果 WriteContent(messageHandler.FinalResponseDocument.ToString());//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 } catch (Exception ex) { using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt"))) { tw.WriteLine("ExecptionMessage:" + ex.Message); tw.WriteLine(ex.Source); tw.WriteLine(ex.StackTrace); //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); if (messageHandler.FinalResponseDocument != null) { tw.WriteLine(messageHandler.FinalResponseDocument.ToString()); } tw.Flush(); tw.Close(); } } finally { Response.End(); } } }
public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return(Content("参数错误!")); } #region 打包 PostModel 信息 postModel.Token = Token; //根据自己后台的设置保持一致 postModel.EncodingAESKey = EncodingAESKey; //根据自己后台的设置保持一致 postModel.AppId = AppId; //根据自己后台的设置保持一致 #endregion //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount); try { #region 记录 Request 日志 var logPath = Server.MapPath(string.Format("~/App_Data/MP/{0}/", DateTime.Now.ToString("yyyy-MM-dd"))); if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.RequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); if (messageHandler.UsingEcryptMessage) { messageHandler.EcryptRequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_Ecrypt_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); } #endregion /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ messageHandler.OmitRepeatedMessage = true; //执行微信处理过程 messageHandler.Execute(); #region 记录 Response 日志 //测试时可开启,帮助跟踪数据 //if (messageHandler.ResponseDocument == null) //{ // throw new Exception(messageHandler.RequestDocument.ToString()); //} if (messageHandler.ResponseDocument != null) { messageHandler.ResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); } if (messageHandler.UsingEcryptMessage && messageHandler.FinalResponseDocument != null) { //记录加密后的响应信息 messageHandler.FinalResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_Final_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); } #endregion ` //return Content(messageHandler.ResponseDocument.ToString());//v0.7- //return new WeixinResult(messageHandler);//v0.8+ return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 } catch (Exception ex) { #region 异常处理 WeixinTrace.Log("MessageHandler错误:{0}", ex.Message); using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + _getRandomFileName() + ".txt"))) { tw.WriteLine("ExecptionMessage:" + ex.Message); tw.WriteLine(ex.Source); tw.WriteLine(ex.StackTrace); //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); if (messageHandler.ResponseDocument != null) { tw.WriteLine(messageHandler.ResponseDocument.ToString()); } if (ex.InnerException != null) { tw.WriteLine("========= InnerException ========="); tw.WriteLine(ex.InnerException.Message); tw.WriteLine(ex.InnerException.Source); tw.WriteLine(ex.InnerException.StackTrace); } tw.Flush(); tw.Close(); } return(Content("")); #endregion } }
public async Task Update(Guid id, PostModel model) { await PostRepository.Update(id, model.ToEntity()); }
public CustomMessageHandlers(RequestMessageBase requestMessage, PostModel postModel = null, int maxRecordCount = 0) : base(requestMessage, postModel, maxRecordCount) { }
public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return(Content("参数错误!")); } postModel.Token = SystemContext.Instance.WeiXinAppInfo.Token; postModel.EncodingAESKey = SystemContext.Instance.WeiXinAppInfo.EncodingAESKey; //根据自己后台的设置保持一致 postModel.AppId = SystemContext.Instance.WeiXinAppInfo.AppID; //根据自己后台的设置保持一致 //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount); try { //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt")); if (messageHandler.UsingEcryptMessage) { messageHandler.EcryptRequestDocument.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_Ecrypt_" + messageHandler.RequestMessage.FromUserName + ".txt")); } /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ messageHandler.OmitRepeatedMessage = true; //执行微信处理过程 messageHandler.Execute(); //测试时可开启,帮助跟踪数据 messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt")); if (messageHandler.UsingEcryptMessage) { //记录加密后的响应信息 messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_Final_" + messageHandler.ResponseMessage.ToUserName + ".txt")); } //return Content(messageHandler.ResponseDocument.ToString());//v0.7- return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 //return new WeixinResult(messageHandler);//v0.8+ } catch (Exception ex) { using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + DateTime.Now.Ticks + ".txt"))) { tw.WriteLine("ExecptionMessage:" + ex.Message); tw.WriteLine(ex.Source); tw.WriteLine(ex.StackTrace); //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); if (messageHandler.ResponseDocument != null) { tw.WriteLine(messageHandler.ResponseDocument.ToString()); } tw.Flush(); tw.Close(); } return(Content("")); } }
public async Task <string> index() { PostModel postModel = TypeChange.UrlToEntities <PostModel>(Request.QueryString.Value); if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, appConfig.WeiXin.Token)) { return("参数错误!"); } else { Request.EnableBuffering(); using (var reader = new StreamReader(Request.Body, encoding: Encoding.UTF8)) { var body = await reader.ReadToEndAsync(); var xml = TypeChange.XmlToDict(body); String toUserName = xml.GetValueOrDefault("ToUserName"); String fromUserName = xml.GetValueOrDefault("FromUserName"); String msgType = xml.GetValueOrDefault("MsgType"); String content = xml.GetValueOrDefault("Content"); String eventType = xml.GetValueOrDefault("Event"); String eventKey = xml.GetValueOrDefault("EventKey"); String ticket = xml.GetValueOrDefault("Ticket"); await weiXin.saveLog(new WxQuestLogEntity { id = await SequenceRepository.GetNextID <WxQuestLogEntity>(), toUserName = toUserName, fromUserName = fromUserName, msgType = msgType, content = content, eventType = eventType, eventKey = eventKey, ticket = ticket, }); if (MessageUtil.MESSAGE_EVENT.Equals(msgType)) { switch (eventType.ToLower()) { case "subscribe": //订阅 if (!string.IsNullOrEmpty(fromUserName)) { var userinfo = Helper.WeiChat.Utility.GetUserInfo(fromUserName); await weiXin.saveUser(userinfo, new List <string> { "nickname", "headimgurl", "subscribe", "subscribe_time", "remark", "groupid", "tagidListStr", "subscribe_scene", "qr_scene", "qr_scene_str" }); } break; case "unsubscribe": //取消订阅 var unsubscribeUser = new WxUserEntity() { subscribe = 0, openid = fromUserName, subscribe_time = Helper.DataTimeHelper.getDateLongTimestamp(DateTime.Now) }; await weiXin.saveUser(unsubscribeUser, new List <string> { "subscribe", "subscribe_time" }); break; case "click": //点击事件 String replay = ""; switch (eventKey) { case MessageUtil.CLICK_DOWNURL: replay = MessageUtil.downloadApp(); break; case MessageUtil.CLICK_ETC_INSTALL: replay = MessageUtil.etcInstallPlace(); break; case MessageUtil.CLICK_GetMoney: replay = MessageUtil.etcGetMoney(fromUserName); break; } string message = MessageUtil.initText(toUserName, fromUserName, replay); return(message); case "view": //url类型 break; } } // Do some processing with body… // Reset the request body stream position so the next middleware can read it Request.Body.Position = 0; return(""); } } }
public CustomMessageHandler(XDocument requestDocument, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(requestDocument, postModel, maxRecordCount, developerInfo) { }
public CustomMessageHandler(RequestMessageBase requestMessageBase, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(requestMessageBase, postModel, maxRecordCount, developerInfo) { }
public CustomMessageHandler(Stream inputStream, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(inputStream, postModel, maxRecordCount, developerInfo) { base.CurrentMessageContext.ExpireMinutes = 10; }
public PostModel GetByPostId(int id) { var model = new PostModel(); //Convert slugId to Int and Find Post var postId = Convert.ToInt32(id); var post = _postService.GetById(postId); //BreadCrumb model.categoryId = _categoryService.GetById(post.categoryId).id; model.categoryName = _categoryService.GetById(post.categoryId).name; var argument = _argumentService.GetById(post.argumentId); if (argument != null) { model.argumentName = argument.name; model.breadcrumb.Add(new breadcrumbs() { name = model.categoryName, slug = _slugService.GetById(_categoryService.GetById(model.categoryId).slugId).name }); model.breadcrumb.Add(new breadcrumbs() { name = model.argumentName, slug = _slugService.GetById(_argumentService.GetById(post.argumentId).slugId).name }); model.breadcrumb.Add(new breadcrumbs() { name = post.title, slug = _slugService.GetById(_postService.GetById(postId).slugId).name }); } else { model.breadcrumb.Add(new breadcrumbs() { name = model.categoryName, slug = _slugService.GetById(_categoryService.GetById(model.categoryId).slugId).name }); model.breadcrumb.Add(new breadcrumbs() { name = post.title, slug = _slugService.GetById(_postService.GetById(postId).slugId).name }); } //SEO ViewBag.description = Regex.Replace(post.testo, "<.*?>", string.Empty).Substring(0, 255); //Post data model.id = post.id; model.argumentId = post.argumentId; model.coverImage = _photoService.GetById(post.PhotoId).path; model.title = post.title; model.subtitle = post.subtitle; model.testo = post.testo; model.albumId = post.albumId; ViewBag.title = post.title; ViewBag.subtitle = post.subtitle; //Related Post var realtedPosts = _postService.GetByCategoryId(post.categoryId); foreach (var relatedPost in realtedPosts) { model.realtedPost.Add(new ArgumentDisplay() { id = relatedPost.id, title = relatedPost.title, subtitle = relatedPost.subtitle, slug = _slugService.GetById(relatedPost.slugId).name }); } //Related argument var relatedArguments = _argumentService.GetByCategoryId(post.categoryId); foreach (var relatedArgument in relatedArguments) { model.realtedArgument.Add(new ArgumentDisplay() { id = relatedArgument.id, title = relatedArgument.name, nOfElement = _postService.GetByArgumentId(relatedArgument.id).Count, slug = _slugService.GetById(relatedArgument.slugId).name }); } //Album var album = _albumService.GetById(post.albumId); if (album != null) { var imageIds = album.idImmagini.Split('|'); foreach (var imageId in imageIds) { if (!string.IsNullOrEmpty(imageId)) { model.album.Add(_photoService.GetById(Convert.ToInt32(imageId)).path); } } var videoIds = album.idVideo.Split('|'); foreach (var videoId in videoIds) { if (!string.IsNullOrEmpty(videoId)) { model.album.Add(_videoService.GetById(Convert.ToInt32(videoId)).path); } } } var totalReview = _reviewService.GetByPostId(post.id).Count; model.sectionName = "Reviews/"; model.reviewData.pageSize = 10; model.reviewData.pageTotal = Math.Ceiling((double)totalReview / 10); model.reviewData.reviews = _reviewService.GetByPostId(post.id); return(model); }
/// <summary> /// Gets the short URL for this blog post /// </summary> /// <param name="post">Blog post</param> /// <returns>The short URL</returns> private string ShortUrl(PostModel post) { return(Url.Action("ShortUrl", "Blog", new { alias = _urlShortener.Shorten(post) }, Request.Scheme)); }
public ActionResult Post(PostModel postModel) { var maxRecordCount = 10; postModel.Token = Token; postModel.EncodingAESKey = EncodingAESKey; postModel.CorpId = CorpId; #region 用于生产环境测试原始数据 //var ms = new MemoryStream(); //Request.InputStream.CopyTo(ms); //ms.Seek(0, SeekOrigin.Begin); //var sr = new StreamReader(ms); //var xml = sr.ReadToEnd(); //var doc = XDocument.Parse(xml); //doc.Save(Server.GetMapPath("~/App_Data/TestWork.log")); //return null; #endregion //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new WorkCustomMessageHandler(Request.GetRequestMemoryStream(), postModel, maxRecordCount); if (messageHandler.RequestMessage == null) { //验证不通过或接受信息有错误 } try { //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.RequestDocument.Save(Server.GetMapPath("~/App_Data/Work/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt")); //执行微信处理过程 messageHandler.Execute(); //测试时可开启,帮助跟踪数据 messageHandler.ResponseDocument.Save(Server.GetMapPath("~/App_Data/Work/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt")); messageHandler.FinalResponseDocument.Save(Server.GetMapPath("~/App_Data/Work/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt")); //自动返回加密后结果 return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 } catch (Exception ex) { using (TextWriter tw = new StreamWriter(Server.GetMapPath("~/App_Data/Work_Error_" + DateTime.Now.Ticks + ".txt"))) { tw.WriteLine("ExecptionMessage:" + ex.Message); tw.WriteLine(ex.Source); tw.WriteLine(ex.StackTrace); //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); if (messageHandler.FinalResponseDocument != null) { tw.WriteLine(messageHandler.FinalResponseDocument.ToString()); } tw.Flush(); tw.Close(); } return(Content("")); } }
public ActionResult Post(PostModel postModel) { postModel.Token = WeixinConfig.Token; //postModel.EncodingAESKey = WeixinConfig.EncodingAESKey; postModel.AppId = WeixinConfig.AppID; var ent = ""; if (!BasicAPI.CheckSignature(postModel.Signature, postModel.Timestamp, postModel.Nonce, WeixinConfig.Token, out ent)) { return(Content("参数错误!")); } var encryptMsg = string.Empty; WeixinMessage message = null; var safeMode = Request.QueryString.Get("encrypt_type") == "aes"; using (var streamReader = new StreamReader(Request.InputStream)) { var decryptMsg = string.Empty; var msg = streamReader.ReadToEnd(); #region 解密 if (safeMode) { var msg_signature = Request.QueryString.Get("msg_signature"); var wxBizMsgCrypt = new WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID); var ret = wxBizMsgCrypt.DecryptMsg(msg_signature, postModel.Timestamp, postModel.Nonce, msg, ref decryptMsg); if (ret != 0)//解密失败 { //TODO:开发者解密失败的业务处理逻辑 Log.Instence.LogWriteLine(string.Format("decrypt message return {0}, request body {1}", ret, msg)); } } else { decryptMsg = msg; } #endregion message = AcceptMessageAPI.Parse(decryptMsg); } var response = new WeixinExecutor().Execute(message); #region 加密 if (safeMode) { var msg_signature = Request.QueryString.Get("msg_signature"); var wxBizMsgCrypt = new WXBizMsgCrypt(WeixinConfig.Token, WeixinConfig.EncodingAESKey, WeixinConfig.AppID); var ret = wxBizMsgCrypt.EncryptMsg(response, postModel.Timestamp, postModel.Nonce, ref encryptMsg); if (ret != 0)//加密失败 { //TODO:开发者加密失败的业务处理逻辑 Log.Instence.LogWriteLine(string.Format("encrypt message return {0}, response body {1}", ret, response)); } } else { encryptMsg = response; } #endregion return(new ContentResult { Content = encryptMsg, ContentType = "text/xml", ContentEncoding = System.Text.UTF8Encoding.UTF8 }); }
public async Task Create(PostModel model) { await PostRepository.Create(model.ToEntity()); }
//<?xml version="1.0" encoding="utf-8"?> //<xml> // <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> // <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> // <CreateTime>1357986928</CreateTime> // <MsgType><![CDATA[text]]></MsgType> // <Content><![CDATA[中文]]></Content> // <MsgId>5832509444155992350</MsgId> //</xml> /// <summary> /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// </summary> /// <returns></returns> public static IRequestMessageBase GetRequestEntity(XDocument doc, PostModel postModel = null) { RequestMessageBase requestMessage = null; RequestMsgType msgType; try { msgType = MsgTypeHelper.GetRequestMsgType(doc); switch (msgType) { case RequestMsgType.Text: requestMessage = new RequestMessageText(); break; case RequestMsgType.Location: requestMessage = new RequestMessageLocation(); break; case RequestMsgType.Image: requestMessage = new RequestMessageImage(); break; case RequestMsgType.Voice: requestMessage = new RequestMessageVoice(); break; case RequestMsgType.Video: requestMessage = new RequestMessageVideo(); break; case RequestMsgType.Link: requestMessage = new RequestMessageLink(); break; case RequestMsgType.Event: //判断Event类型 switch (doc.Root.Element("Event").Value.ToUpper()) { case "ENTER": //进入会话 requestMessage = new RequestMessageEvent_Enter(); break; case "LOCATION": //地理位置 requestMessage = new RequestMessageEvent_Location(); break; case "SUBSCRIBE": //订阅(关注) requestMessage = new RequestMessageEvent_Subscribe(); break; case "UNSUBSCRIBE": //取消订阅(关注) requestMessage = new RequestMessageEvent_Unsubscribe(); break; case "CLICK": //菜单点击 requestMessage = new RequestMessageEvent_Click(); break; case "SCAN": //二维码扫描 requestMessage = new RequestMessageEvent_Scan(); break; case "VIEW": //URL跳转 requestMessage = new RequestMessageEvent_View(); break; case "MASSSENDJOBFINISH": requestMessage = new RequestMessageEvent_MassSendJobFinish(); break; case "SCANCODE_PUSH": //扫码推事件(scancode_push) requestMessage = new RequestMessageEvent_Scancode_Push(); break; case "SCANCODE_WAITMSG": //扫码推事件且弹出“消息接收中”提示框(scancode_waitmsg) requestMessage = new RequestMessageEvent_Scancode_Waitmsg(); break; case "PIC_SYSPHOTO": //弹出系统拍照发图(pic_sysphoto) requestMessage = new RequestMessageEvent_Pic_Sysphoto(); break; case "PIC_PHOTO_OR_ALBUM": //弹出拍照或者相册发图(pic_photo_or_album) requestMessage = new RequestMessageEvent_Pic_Photo_Or_Album(); break; case "PIC_WEIXIN": //弹出微信相册发图器(pic_weixin) requestMessage = new RequestMessageEvent_Pic_Weixin(); break; case "LOCATION_SELECT": //弹出地理位置选择器(location_select) requestMessage = new RequestMessageEvent_Location_Select(); break; default: //其他意外类型(也可以选择抛出异常) requestMessage = new RequestMessageEventBase(); break; } break; default: throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException()); //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常 } EntityHelper.FillEntityWithXml(requestMessage, doc); } catch (ArgumentException ex) { throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex); } return(requestMessage); }
public CustomMessageHandlers(XDocument requestDoc, PostModel postModel = null, int maxRecordCount = 0) : base(requestDoc, postModel, maxRecordCount) { }
public CustomThirdPartyMessageHandler(Stream inputStream, PostModel encryptPostModel) : base(inputStream, encryptPostModel) { }
public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount) { }
public ActionResult EditPost(string id) { PostModel model = db.PostModel.Find(id); return(PartialView("PopUpPartial", model)); }
public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return(Content("参数错误!")); } postModel.Token = Token; //根据自己后台的设置保持一致 postModel.EncodingAESKey = EncodingAESKey; //根据自己后台的设置保持一致 postModel.AppId = WxOpenAppId; //根据自己后台的设置保持一致(必须提供) //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; var logPath = ServerUtility.ContentRootMapPath(string.Format("~/App_Data/WxOpen/{0}/", SystemTime.Now.ToString("yyyy-MM-dd"))); if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new CustomWxOpenMessageHandler(Request.GetRequestMemoryStream(), postModel, maxRecordCount); try { /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ messageHandler.OmitRepeatedMessage = true; //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.SaveRequestMessageLog(); //记录 Request 日志(可选) messageHandler.Execute(); //执行微信处理过程(关键) messageHandler.SaveResponseMessageLog(); //记录 Response 日志(可选) //return Content(messageHandler.ResponseDocument.ToString());//v0.7- return(new FixWeixinBugWeixinResult(messageHandler)); //为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 //return new WeixinResult(messageHandler);//v0.8+ } catch (Exception ex) { using (TextWriter tw = new StreamWriter(ServerUtility.ContentRootMapPath("~/App_Data/Error_WxOpen_" + _getRandomFileName() + ".txt"))) { tw.WriteLine("ExecptionMessage:" + ex.Message); tw.WriteLine(ex.Source); tw.WriteLine(ex.StackTrace); //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); if (messageHandler.ResponseDocument != null) { tw.WriteLine(messageHandler.ResponseDocument.ToString()); } if (ex.InnerException != null) { tw.WriteLine("========= InnerException ========="); tw.WriteLine(ex.InnerException.Message); tw.WriteLine(ex.InnerException.Source); tw.WriteLine(ex.InnerException.StackTrace); } tw.Flush(); tw.Close(); } return(Content("")); } }
public IHttpActionResult PutPost(int id, PostModel post) { // Validate the request if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != post.PostID) { return BadRequest(); } // Get the DB post, update it according to the input PostModel object, // and then update the DB post in the database var dbPost = _postRepository.GetByID(id); if (dbPost == null) { return NotFound(); } dbPost.Update(post); _postRepository.Update(dbPost); // Save database changes try { _unitOfWork.Commit(); } catch (DBConcurrencyException e) { if (!PostExists(id)) { return NotFound(); } else { throw new Exception("Unable to update the post in the database", e); } } return StatusCode(HttpStatusCode.NoContent); }
public WechatService(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount) { }
public string PostIn([FromBody] PostModel model) { return(model.Name); }
public static async Task<DataModel.Issue> PostIssueAsync(String access_code, String Uri, PostModel.Issue issue) { Object message = await PostAsync(access_code, Uri, issue, typeof(DataModel.Issue)); return (DataModel.Issue)message; }
public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return(Content("参数错误!")); } postModel.Token = Token; postModel.EncodingAESKey = EncodingAESKey; postModel.AppId = AppId; //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; var logPath = Server.MapPath(string.Format("~/App_Data/MP/{0}/", DateTime.Now.ToString("yyyy-MM-dd"))); if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount); try { //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 messageHandler.RequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_{1}.txt", DateTime.Now.Ticks, messageHandler.RequestMessage.FromUserName))); if (messageHandler.UsingEcryptMessage) { messageHandler.EcryptRequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_Ecrypt_{1}.txt", DateTime.Now.Ticks, messageHandler.RequestMessage.FromUserName))); } /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ messageHandler.OmitRepeatedMessage = true; //执行微信处理过程 messageHandler.Execute(); //测试时可开启,帮助跟踪数据 //if (messageHandler.ResponseDocument == null) //{ // throw new Exception(messageHandler.RequestDocument.ToString()); //} if (messageHandler.ResponseDocument != null) { messageHandler.ResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_{1}.txt", DateTime.Now.Ticks, messageHandler.RequestMessage.FromUserName))); } if (messageHandler.UsingEcryptMessage) { //记录加密后的响应信息 messageHandler.FinalResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_Final_{1}.txt", DateTime.Now.Ticks, messageHandler.RequestMessage.FromUserName))); } //return new FixWeixinBugWeixinResult(messageHandler);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 return(new WeixinResult(messageHandler));//v0.8+ } catch (Exception ex) { logger.Error(ex); return(Content("")); } }
// GET api/posts/id public HttpResponseMessage GetSinglePostById(string sessionKey, int postId) { var responseMessage = this.PerformOperation(() => { this.ValidateSessionKey(sessionKey); var context = new BlogDbContext(); var user = context.Users .FirstOrDefault(u => u.SessionKey == sessionKey); if (user == null) { throw new ServerErrorException( "Invalid or expired session", HttpStatusCode.BadRequest); } var post = context.Posts .FirstOrDefault(p => p.Id == postId); if (post == null) { throw new ServerErrorException( "Post does not exist", HttpStatusCode.BadRequest); } var postModel = new PostModel() { Id = post.Id, PostedBy = post.User.DisplayName, PostDate = post.PostDate, Title = post.Title, Text = post.Text, Tags = post.Tags.Select(tag => tag.Name), Comments = post.Comments.Select(comment => new CommentModel() { Text = comment.Text, CommentedBy = comment.User.DisplayName, PostDate = comment.PostDate } ) }; return Request.CreateResponse( HttpStatusCode.OK, postModel); }); return responseMessage; }
public ActionResult PostProject(HttpPostedFileBase Avatar, List <string> feature, USER us, HttpPostedFileBase Image, PostModel model, PROPERTY property, List <HttpPostedFileBase> images) { if (ModelState.IsValid) { string avatar = ""; if (Avatar.ContentLength > 0) { var filename = Path.GetFileName(Avatar.FileName); var path = Path.Combine(Server.MapPath("~/img"), filename); Avatar.SaveAs(path); avatar = filename; } //string image = ""; //if (Image.ContentLength > 0) //{ // var filename = Path.GetFileName(Image.FileName); // var path = Path.Combine(Server.MapPath("~/img"), filename); // Image.SaveAs(path); // image = filename; //} var pro = new PROPERTY(); pro.PropertyName = model.PropertyName; pro.PropertyType_ID = model.PropertyType_ID; pro.Avatar = avatar; //pro.Images = image; //pro.DISTRICT = model.DISTRICT; //add feture //var fetur = new PROPERTY_FEATURE(); //if (featuree != null) //{ // foreach (string fetus in featuree) // { // // fetur.Property_ID = qqq.ID; // fetur.Feature_ID = db.FEATUREs.SingleOrDefault(x => x.FeatureName == fetus).ID; // fetur.Property_ID = property.ID; // //fetur.Feature_ID = property.ID; // db.PROPERTY_FEATURE.Add(fetur); // } //} var fetur = new PROPERTY_FEATURE(); if (feature != null) { foreach (string fetus in feature) { //PROPERTY_FEATURE profeature = new PROPERTY_FEATURE(); // fetur.Property_ID = qqq.ID; fetur.Feature_ID = db.FEATUREs.SingleOrDefault(x => x.FeatureName == fetus).ID; fetur.Property_ID = property.ID; //fetur.Feature_ID = 1; db.PROPERTY_FEATURE.Add(fetur); } } pro.District_ID = model.District_ID; pro.Street_ID = model.Street_ID; pro.Ward_ID = model.Ward_ID; //pro.STREET = model.STREET; pro.Price = model.Price; pro.Area = model.Area; pro.BathRoom = model.BathRoom; pro.BedRoom = model.BedRoom; pro.PackingPlace = model.PackingPlace; pro.Content = model.Content; //pro.UserID = model.UserID; pro.UnitPrice = model.UnitPrice; //pr.Email = us.Email; //pr.Phone = us.Phone; //pro.Create_post = DateTime.Now.; pro.Status_ID = model.Status_ID; pro.Updated_at = DateTime.Now; pro.Created_at = DateTime.Now; pro.UserID = (int)Session["UserID"]; db.PROPERTY.Add(pro); db.SaveChanges(); //ViewBag.Success = "Đăng ký thành công"; model = new PostModel(); return(RedirectToAction("List", "Project")); } else { ModelState.AddModelError("", "Đăng bài không thành công, vui lòng kiểm tra lại các trường thông tin của bạn"); } return(View(model)); }
/// <summary> /// 构造MessageHandler /// </summary> /// <param name="inputStream">请求消息流</param> /// <param name="postModel">PostModel</param> /// <param name="maxRecordCount">单个用户上下文消息列表储存的最大长度</param> /// <param name="developerInfo">微微嗨开发者信息,如果不为空,则优先请求云端应用商店的资源</param> public MessageHandler(Stream inputStream, PostModel postModel = null, int maxRecordCount = 0, DeveloperInfo developerInfo = null) : base(inputStream, maxRecordCount, postModel) { DeveloperInfo = developerInfo; }
public async Task <IActionResult> PostAsync([FromBody] PostModel model, CancellationToken cancellationToken) { var idModel = await fSender.Send(new PostRequest(model), cancellationToken); return(CreatedAtRoute(_GetClientRoute, new { id = idModel.Id.ToString() }, idModel)); }
/// <summary> /// Renders the permalink for the given post. /// </summary> /// <param name="post">The post</param> /// <returns>The generated permalink</returns> public static IHtmlString Permalink(PostModel post) { return new HtmlString(helper.Permalink(post)); }
public string PostUrl(string url, PostModel model) { var data = model.body; return(postXMLData(url, data)); }
public IHttpActionResult PostPost(PostModel post) { // Validate request if (!ModelState.IsValid) { return BadRequest(ModelState); } // Check that the corresponding blog exists if (!_blogRepository.Any(b => b.BlogID == post.BlogID)) { throw new Exception("Unable to add the post to the database, as it does not correspond to a blog"); } //Set up new Post object, populated from input post Post dbPost = new Post(); dbPost.Update(post); // Add the new Post object to the DB _postRepository.Add(dbPost); // Save the changes in the database try { _unitOfWork.Commit(); } catch (Exception e) { throw new Exception("Unable to add the post to the database", e); } // Set post ID in PostModel object with the ID // that was set in the DB post after db.SaveChanges post.PostID = dbPost.PostID; return CreatedAtRoute("DefaultApi", new { id = post.PostID }, post); }
public ActionResult Post(string signature, string timestamp, string nonce, string openid, string encrypt_type, string msg_signature) { //StringBuilder log = new StringBuilder(); LogService.AnyLog("WeChatWebHook", $"WxApi\tPost In");//{DateTime.Now.ToString("HH:mm:ss.fffffff")}\t PostModel postModel = new PostModel() { Token = WechatMpSettings.Default.Token, //根据自己后台的设置保持一致 Signature = signature, Timestamp = timestamp, Nonce = nonce, AppId = WechatMpSettings.Default.AppId, EncodingAESKey = WechatMpSettings.Default.EncodingAESKey, Msg_Signature = msg_signature, }; WechatCustomService.Default.Encrypt_type = encrypt_type; try { //加密异常 if (encrypt_type == "aes" && string.IsNullOrEmpty(postModel.EncodingAESKey)) { return(Content("公从号接口有异常,请通过其它途径解决您的问题,并反馈此消息")); } if (encrypt_type == "aes" && wxcrypt == null) { wxcrypt = new WXBizMsgCrypt(postModel.Token, postModel.EncodingAESKey, postModel.AppId); WechatCustomService.Default.WxCrypt = wxcrypt; } if (!CheckSignature.Check(signature, postModel)) { return(Content("参数错误!")); } String PostXml = Request.GetBodyString(); //解密信息 if (encrypt_type == "aes") { var aeskey = WechatMpSettings.Default.EncodingAESKey; string detext = null; var res = wxcrypt.DecryptMsg(postModel.Msg_Signature, postModel.Timestamp, postModel.Nonce, PostXml, ref detext); //Console.WriteLine($"{res} detext({postModel.Token},{postModel.EncodingAESKey},{postModel.AppId},{postModel.Msg_Signature}, {postModel.Timestamp}, {postModel.Nonce},{PostXml})>{detext}"); PostXml = detext; } WechatResponse wxsponse = new WechatResponse(Request, PostXml); var botsponse = wxsponse.Rebot(); LogService.AnyLog("WeChatWebHook", "响应源数据", $"{botsponse.Content}"); //加密信息 if (encrypt_type == "aes") { var rTimeStamp = DateTime.Now.GetTimestamp10(); var rNonce = RandomString.BuildRndString(16); string restr = null; var rb = wxcrypt.EncryptMsg(botsponse.Content, rTimeStamp + "", rNonce, ref restr); if (rb == 0) { botsponse.Content = restr; } else { $"{rb} EncryptMsg".WriteErrorLine(); } } LogService.AnyLog("WeChatWebHook", "响应密数据", $"{botsponse.Content}"); return(botsponse); } catch (Exception ex) { #region 异常处理 LogService.AnyLog("WeChatWebHook", $"{ex.Message}"); LogService.Exception(ex); return(Content("")); #endregion } finally { LogService.AnyLog("WeChatWebHook", $"WxApi\tPost Out"); } }