public WechatContext(WechatMsgRequestModel request) { Logger.Debug("微信服务器消息:" + JsonConvert.SerializeObject(request)); _securityHelper = new WechatSecurityHelper(request.Msg_Signature, request.Timestamp, request.Nonce); _requestMessage = _securityHelper.DecryptMsg(request.RequestContent); Logger.Debug("收到微信消息:" + _requestMessage); }
public async System.Threading.Tasks.Task <ActionResult> PostAsync([FromQuery] WechatMsgRequestModel model) { Logger.LogDebug("request msg:" + model.ToJson()); using (var ms = new MemoryStream()) { await Request.Body.CopyToAsync(ms); ms.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(ms, System.Text.Encoding.UTF8)) { model.RequestContent = await reader.ReadToEndAsync(); Logger.LogDebug("RequestContent from Request:" + model.RequestContent); } } if (string.IsNullOrEmpty(model.RequestContent)) { return(Content("RequestContent 为空")); } var context = new WeChatContext(model); return(await WechatAsync(context)); }
public void OnAuthorization(AuthorizationFilterContext filterContext) { var model = new WechatMsgRequestModel { Nonce = filterContext.HttpContext.Request.Query["nonce"].FirstOrDefault(), Signature = filterContext.HttpContext.Request.Query["signature"].FirstOrDefault(), Timestamp = filterContext.HttpContext.Request.Query["timestamp"].FirstOrDefault(), Msg_Signature = filterContext.HttpContext.Request.Query["msg_signature"].FirstOrDefault() }; //验证 var token = filterContext.HttpContext.Request.Path.Value.ToLower().Contains("/wechatapp/") ? WxAppConsts.Token : MpWeChatConsts.Token; if (string.IsNullOrEmpty(token)) { token = "Reservation"; } if (!CheckSignature(model, token)) { filterContext.HttpContext.RequestServices.GetRequiredService <ILogger <WechatRequestValidAttribute> >() .LogWarning("微信请求签名验证不通过, signature: {Signature}", model.Signature); filterContext.Result = new ContentResult { Content = "微信请求验证失败", StatusCode = 401, ContentType = "text/plain;charset=utf-8", }; } }
public async System.Threading.Tasks.Task GetAsync([FromQuery] WechatMsgRequestModel model) { if (ModelState.IsValid) { try { var echoStr = HttpContext.Request.Query["echostr"].FirstOrDefault(); if (!string.IsNullOrEmpty(echoStr)) { await Response.WriteAsync(echoStr, HttpContext.RequestAborted); } } catch (Exception ex) { Logger.Error($"Wechat GET 发生异常,异常信息:{ex.Message}", ex); } } }
private static bool CheckSignature(WechatMsgRequestModel model) { //获取请求来的参数 var signature = model.Signature; var timestamp = model.Timestamp; var nonce = model.Nonce; //创建数组,将 Token, timestamp, nonce 三个参数加入数组 string[] array = { WeChatConsts.Token, timestamp, nonce }; //进行排序 Array.Sort(array); //拼接为一个字符串 var tempStr = string.Join("", array); //对字符串进行 SHA1加密 tempStr = SecurityHelper.SHA1_Encrypt(tempStr); //判断signature 是否正确 return(tempStr.Equals(signature?.ToUpper())); }
public ActionResult PostAsync(WechatMsgRequestModel model) { if (model.RequestContent == null) { using (var reader = new StreamReader(Request.InputStream)) { Logger.Debug($"Request.InputStream Length:{Request.InputStream.Length}"); model.RequestContent = reader.ReadToEnd(); Logger.Debug($"RequestContent from Request.InputStream:{model.RequestContent}"); } } if (string.IsNullOrEmpty(model.RequestContent)) { return(Content("RequestContent 为空")); } var context = new WechatContext(model); return(Wechat(context)); }
public void Get(WechatMsgRequestModel model) { if (ModelState.IsValid) { try { var echoStr = HttpContext.Request.Query["echostr"].FirstOrDefault(); if (!string.IsNullOrEmpty(echoStr)) { //将随机生成的 echostr 参数 原样输出 Response.Body.Write(echoStr.GetBytes()); } } catch (Exception ex) { Logger.Error($"Wechat GET 发生异常,异常信息:{ex.Message}", ex); } } }
public ActionResult PostAsync(WechatMsgRequestModel model) { //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 //var postModel = new PostModel //{ // Nonce = model.Nonce, // Timestamp = model.Timestamp, // Signature = model.Signature, // Msg_Signature = model.Msg_Signature, // AppId = WeChatConsts.AppId, // EncodingAESKey = WeChatConsts.AESKey, // Token = WeChatConsts.Token, //}; if (model.RequestContent == null) { using (var reader = new StreamReader(Request.InputStream)) { logger.Debug($"Request.InputStream Length:{Request.InputStream.Length}"); model.RequestContent = reader.ReadToEnd(); logger.Debug($"RequestContent from Request.InputStream:{model.RequestContent}"); } } if (String.IsNullOrEmpty(model.RequestContent)) { return(Content("RequestContent 为空")); } //var doc = System.Xml.Linq.XDocument.Parse(model.RequestContent); //logger.Debug("doc:" + doc.ToString()); //var messageHandler = new WechatMsgHandler(doc, postModel); //#region 设置消息去重 ///* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 // * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage // */ //messageHandler.OmitRepeatedMessage = true;//默认已经开启,此处仅作为演示,也可以设置为false在本次请求中停用此功能 //#endregion //logger.Debug("收到微信消息:" + Common.ConverterHelper.ObjectToJson(messageHandler.RequestDocument)); //messageHandler.Execute(); //logger.Debug("返回的消息:" + Common.ConverterHelper.ObjectToJson(messageHandler.ResponseDocument)); //return Wechat(messageHandler); var context = new WechatContext(model); return(Wechat(context)); }
public void Get(WechatMsgRequestModel model) { if (ModelState.IsValid) { try { var echoStr = HttpContext.Request.QueryString["echostr"]; if (!string.IsNullOrEmpty(echoStr)) { //将随机生成的 echostr 参数 原样输出 Response.Write(echoStr); //截止输出流 Response.End(); } } catch (Exception ex) { Logger.Error($"Wechat GET 发生异常,异常信息:{ex.Message}", ex); } } }
public void OnAuthorization(AuthorizationContext filterContext) { var model = new WechatMsgRequestModel { Nonce = filterContext.HttpContext.Request.QueryString["nonce"], Signature = filterContext.HttpContext.Request.QueryString["signature"], Timestamp = filterContext.HttpContext.Request.QueryString["timestamp"], Msg_Signature = filterContext.HttpContext.Request.QueryString["msg_signature"] }; //验证 if (!CheckSignature(model)) { logger.Error("微信请求签名验证不通过"); filterContext.Result = new ContentResult { Content = "微信请求验证失败", ContentEncoding = Encoding.UTF8, ContentType = "text/html" }; } }
public void OnAuthorization(AuthorizationFilterContext filterContext) { var model = new WechatMsgRequestModel { Nonce = filterContext.HttpContext.Request.Query["nonce"].FirstOrDefault(), Signature = filterContext.HttpContext.Request.Query["signature"].FirstOrDefault(), Timestamp = filterContext.HttpContext.Request.Query["timestamp"].FirstOrDefault(), Msg_Signature = filterContext.HttpContext.Request.Query["msg_signature"].FirstOrDefault() }; //验证 if (!CheckSignature(model)) { Logger.Error("微信请求签名验证不通过"); filterContext.Result = new ContentResult { Content = "微信请求验证失败", StatusCode = 401, ContentType = "text/html" }; } }
public void Get(WechatMsgRequestModel model) { if (ModelState.IsValid) { try { //GET微信验证,获取 echostr 参数并返回 var echoStr = HttpContext.Request.QueryString["echostr"]; if (!string.IsNullOrEmpty(echoStr)) { //将随机生成的 echostr 参数 原样输出 Response.Write(echoStr); //截止输出流 Response.End(); } } catch (Exception ex) { logger.Error("发生异常,异常信息:" + ex.Message + ex.StackTrace); } } }
private bool CheckSignature(WechatMsgRequestModel model) { string signature, timestamp, nonce, tempStr; //获取请求来的参数 signature = model.Signature; timestamp = model.Timestamp; nonce = model.Nonce; //创建数组,将 Token, timestamp, nonce 三个参数加入数组 string[] array = { WeChatConsts.Token, timestamp, nonce }; //进行排序 Array.Sort(array); //拼接为一个字符串 tempStr = String.Join("", array); //对字符串进行 SHA1加密 tempStr = SecurityHelper.SHA1_Encrypt(tempStr); //判断signature 是否正确 if (tempStr.Equals(signature.ToUpperInvariant())) { return(true); } return(false); }
public WeChatContext(WechatMsgRequestModel request) { _securityHelper = new WechatSecurityHelper(request.Msg_Signature, request.Timestamp, request.Nonce); _requestMessage = request.RequestContent; }