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);
}
}

加解密实现(微信公众号官网有源码)

转载于:https://www.cnblogs.com/Agui520/p/8377216.html

微信公众号开发--.Net Core实现微信消息加解密相关推荐

  1. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  2. 【微信公众号开发】六、微信JS的使用

    文章详情:[微信公众号开发]六.微信JS的使用 文章链接:https://www.microanswer.cn/blog/16

  3. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  4. 微信公众号开发--开通测试号及验证消息来自服务器

    微信公众号开发--开通测试号及验证消息来自服务器 一.服务器配置 1.开通测试号 2.域名申请(ngrok) 2.1.注册 2.2.下载客户端 二.验证消息来自服务器 一.服务器配置 1.开通测试号 ...

  5. 【微信公众号开发】八、微信JS发起支付

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 目录 本系列博文还包含了下面的博客: [微信公众号开发]一.运作及配置流程简介 [微信公众号开发]二.解析微 ...

  6. 使用Python进行微信公众号开发(三)回复消息

    写在前面 <使用Python进行微信公众号开发>系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器. 效果体验 扫码"是雯子吖"公众号进行体验 配置 ...

  7. 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索

    本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...

  8. 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯

    <PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...

  9. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

最新文章

  1. Vue mixins(混入) 附代码示例详解
  2. oracle中escape关键字用法
  3. POJ 3468 A Simple Problem with Integers
  4. How to set up native subversion (javahl) with Subclipse on Mac OS X
  5. 数字化转型最致命的5个误区
  6. c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序
  7. Kotlin 条件控制(六)
  8. python读音有道-Python实现有道翻译+语音播报
  9. vue - 开发环境构建
  10. 使用Directshow + LAVFilter做一个万能格式的多媒体播放器
  11. 库存管理系统的设计与实现(代码)
  12. html5微杂志源码,H5制作又一利器:分分钟制作一个H5页面
  13. 2017计算机考研参考书目推荐,2017年中山大学085211计算机技术考研参考书目推荐...
  14. 关于AD前面的电压跟随器
  15. python虚拟环境中安装diango_安装Python虚拟环境和django
  16. C语言.h文件的作用
  17. 炫酷的windows快捷关机方式汇总
  18. 美摄短视频SDK上线:搭建多端产品,只需一套代码
  19. linux文件的删除
  20. 后台登陆框post注入

热门文章

  1. 前端工程师面试经验导图
  2. 程序员的10个谎言,你听过几个?
  3. 安装nginx的过程
  4. leetcode--single number.
  5. ibdata1 mysql_ibdata1 mysql-bin
  6. python中合法的二进制整数_python:求整数的二进制表示
  7. 【java】java 使用 Unsafe CAS 实现数据递增 打印重复问题
  8. 【Elasticsearch】使用Elasticsearch中的copy_to来提高搜索效率
  9. ERROR streaming.StreamExecution: Query topic_lcc [id =xx, runId=xx] terminated with error
  10. 【JVM】CMS垃圾回收器(不推荐使用的垃圾回收器)