1:准备工作
进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过)。
2:基本配置
设置为安全模式
3、代码实现(主要分为验证接口和消息处理接口):
/// <summary>/// 验证接口/// </summary>/// <param name="signature">签名</param>/// <param name="timestamp">时间戳</param>/// <param name="nonce"></param>/// <param name="echostr"></param>/// <returns></returns>[HttpGet, Route("Message")][AllowAnonymous]public ActionResult MessageGet(string signature, string timestamp, string nonce, string echostr){if (new SecurityHelper().CheckSignature(signature, timestamp, nonce, _settings.Value.Token)){return Content(echostr);}return Content("");}/// <summary>/// 接收消息并处理和返回相应结果/// </summary>/// <param name="msg_signature">当加密模式时才会有该变量(消息签名)</param>/// <param name="signature">签名</param>/// <param name="timestamp">时间戳</param>/// <param name="nonce"></param>/// <returns></returns>[HttpPost, Route("Message")][AllowAnonymous]public ActionResult MessagePost(string msg_signature, string signature, string timestamp, string nonce){try{if (!new SecurityHelper().CheckSignature(signature, timestamp, nonce, _settings.Value.Token)){return Content(null);}using (Stream stream = HttpContext.Request.Body){byte[] buffer = new byte[HttpContext.Request.ContentLength.Value];stream.Read(buffer, 0, buffer.Length);string content = Encoding.UTF8.GetString(buffer);if (!string.IsNullOrWhiteSpace(msg_signature)) // 消息加密模式{string decryptMsg = string.Empty;var wxBizMsgCrypt = new WXBizMsgCrypt(_settings.Value.Token, _settings.Value.EncodingAESKey, _settings.Value.AppId);int decryptResult = wxBizMsgCrypt.DecryptMsg(msg_signature, timestamp, nonce, content, ref decryptMsg);if (decryptResult == 0 && !string.IsNullOrWhiteSpace(decryptMsg)){string resultMsg = new WechatMessageHelper().MessageResult(decryptMsg);string sEncryptMsg = string.Empty;if (!string.IsNullOrWhiteSpace(resultMsg)){int encryptResult = wxBizMsgCrypt.EncryptMsg(resultMsg, timestamp, nonce, ref sEncryptMsg);if (encryptResult == 0 && !string.IsNullOrWhiteSpace(sEncryptMsg)){return Content(sEncryptMsg);}}}}else // 消息未加密码处理{string resultMsg = new WechatMessageHelper().MessageResult(content);return Content(resultMsg);}return Content(null);}}catch (Exception ex){_logger.LogError("接收消息并处理和返回相应结果异常:", ex);return Content(null);}}
加解密实现(微信公众号官网有源码)