using MyCode.Project.Domain.Config; using MyCode.Project.Domain.Message.Act.User; using MyCode.Project.Domain.Message.Request.Activity; using MyCode.Project.Domain.Message.Request.Member; using MyCode.Project.Domain.Message.Request.User; using MyCode.Project.Domain.Message.Response.CardCover; using MyCode.Project.Domain.Message.Response.Goods; using MyCode.Project.Domain.Message.Response.LiveVideo; using MyCode.Project.Domain.Message.Response.Member; using MyCode.Project.Domain.Message.Response.Wechat; using MyCode.Project.Infrastructure.Common; using MyCode.Project.Services; using MyCode.Project.Services.CustomMessageHandler; using MyCode.Project.WebApi.App_Filter; using Senparc.NeuChar.Context; using Senparc.NeuChar.Entities; using Senparc.Weixin.MP; using Senparc.Weixin.MP.MessageHandlers; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web.Http; using System.Xml.Linq; namespace MyCode.Project.WebApi.Areas.Member.Controllers { /// /// 微信公众号 相关接口 /// public class WeChatPublicController : BaseMemberController { #region 初始化 private readonly IWorkProcessService _workProcessService; public WeChatPublicController(IWorkProcessService workProcessService) { _workProcessService = workProcessService; } #endregion #region WeCallBack(微信回调) /// /// 微信回调1 /// [AllowAnonymous, IgnoreResultHandle, HttpGet, HttpPost, ActionName("WeCallBack")] public void WeCallBack() { var context = CurrentHttpContext; string signature = context.Request["signature"]; string timestamp = context.Request["timestamp"]; string nonce = context.Request["nonce"]; string echostr = context.Request["echostr"]; //get method -检验是否微信的回调,不是则不执行 //if (CheckSignature.Check(signature, timestamp, nonce, SystemConfig.WeToken)) //{ // string postStr = @" // //1576747572 // // // //"; Stream s = System.Web.HttpContext.Current.Request.InputStream;//此方法是对System.Web.HttpContext.Current.Request.InputStream的封装,可直接代码 string postStr = ""; if (s != null && s.Length > 0) { s.Position = 0; //当你读取完之后必须把stream的读取位置设为开始 StreamReader reader = new StreamReader(s, System.Text.Encoding.UTF8); postStr = reader.ReadToEnd().ToString(); } //byte[] b = new byte[s.Length]; //s.Read(b, 0, (int)s.Length); //string postStr = Encoding.UTF8.GetString(b); //LogHelper.Info(postStr); var weixinContext = MessageHandler>.GlobalWeixinContext.MessageQueue.FirstOrDefault(); var recordCount = MessageHandler>.GlobalWeixinContext.MaxRecordCount; if (string.IsNullOrEmpty(postStr)) { context.Response.Output.Write(echostr); context.Response.End(); return; } //var doc = XDocument.Parse(postStr); _workProcessService.Add(Guid.Parse("00000000-0000-0000-0000-000000000009"), "MemberWeChatPublicCallBack","会员公众号回调", postStr,2); //var maxRecordCount = 1; //var messageHandler = new CustomMessageHandler(doc, null, maxRecordCount); //messageHandler.OmitRepeatedMessage = true; //messageHandler.Execute(); //LogHelper.Info("RequestMessages:" + messageHandler.RequestMessage); //if (messageHandler.TextResponseMessage != null) //{ // //LogHelper.Info("ResponseMessages:" + messageHandler.TextResponseMessage); // context.Response.Output.Write(messageHandler.TextResponseMessage); // context.Response.End(); //} //new SuccessResponseMessage(); context.Response.Output.Write(new SuccessResponseMessage()); context.Response.End(); //} return; } #endregion } }