研究了一晚上,终于找到原因了,这坑挖的真是害人不浅
不能收到回复的原因为两点:
1.盛派官方的sdk例子根本是错误的,post请求也必须传参而不是使用盛派的model
2.返回结果要用Content,不要用盛派官方的WeixinResult或FixWeixinBugWeixinResult
下面说说两个重要的api
验证请求Get不多说了,比较简单,验证成功原样返回字符串,不成功返回空字符串
被动回复接口,盛派官方sample给的是这样的
我告诉你,这就是个坑,因为微信不会给你这么发post请求的,你如果这么写了你永远都收不到任何信息
正确写法是:
还有一个坑就是返回结果类型,只有第一个能用
最后贴下我的源代码
[Route("api/[controller]")][ApiController]public class WxMsgController : ControllerBase{static WxAppConfig wxCfg => WxAppConfig.Instance;[HttpGet]public ActionResult Get(string signature, string timestamp, string nonce, string echostr){// 验证成功返回echostr,否则返回空字符串return Content(!CheckSignature.Check(signature, timestamp, nonce, wxCfg.Token) ? "" : echostr);}[HttpPost]public ActionResult Post(string signature, string timestamp, string nonce, string msg_signature){var postModel = new PostModel{Signature = signature,Timestamp = timestamp,Nonce = nonce,Msg_Signature = msg_signature,};if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, wxCfg.Token)){return Content("参数错误!");}postModel.SetSecretInfo(wxCfg.Token, wxCfg.EncodingAESKey, wxCfg.AppId);var messageHandler = new CustomMessageHandler(Request.GetRequestMemoryStream(), postModel);// 接收消息messageHandler.Execute();// 执行微信处理过程return Content(messageHandler.ResponseDocument.ToString());}}
处理流程:
public class CustomMessageHandler : MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>>{#region 构造方法public CustomMessageHandler(Stream inputStream, PostModel postModel) : base(inputStream, postModel) { }public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount) { }public CustomMessageHandler(RequestMessageBase requestMessage, PostModel postModel) : base(requestMessage, postModel) { }#endregionpublic override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage){var respMsg = CreateResponseMessage<ResponseMessageText>();respMsg.Content = "欢迎使用阴阳易演计算模型";return respMsg;}public override IResponseMessageBase OnTextRequest(RequestMessageText reqMsq){var respMsg = CreateResponseMessage<ResponseMessageText>();switch (reqMsq.Content.ToUpper()){case "ID":respMsg.Content = "您的OpenID是:" + respMsg.FromUserName;break;case "天气":respMsg.Content = "抱歉,还未开通此功能!";break;}return respMsg;}}
最终效果:
欢迎关注我的公众号:道易龙腾,这是一个易经三才计算的公众服务号,用于术数学计算和起卦排盘工具