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); } }
加解密实现(微信公众号官网有源码)