ASP.NET MVC 微信公共平台开发

获取用户消息并处理

  1. 获取用户消息

    用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取

    微信服务器推送消息到服务器的HTTP请求报文示例

    POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6&timestamp=1409659813&nonce=1372623149 HTTP/1.1

    Host: qy.weixin.qq.com

    从POST请求中获取数据

    这样获得的用户消息可能有两种情况:加密后的消息或是未加密的消息,这与你在微信公共平台配置网站时 消息加解密模式的选取 有关,如果选择了明文模式,则不会加密,如果选择了兼容模式,则密文和明文都存在,如果选择的是安全模式,则用户消息会被加密,需要解密后才能进一步处理

  2. 回复用户消息

    参考微信公共平台开发文档

    • 文本消息

    <xml>

    <ToUserName><![CDATA[{0}]]></ToUserName>

    <FromUserName><![CDATA[{1}]]></FromUserName>

    <CreateTime>{2}</CreateTime>

    <MsgType><![CDATA[text]]></MsgType>

    <Content><![CDATA[{3}]]></Content>

    </xml>

    • 图片消息

    <xml>

    <ToUserName><![CDATA[{0}]]></ToUserName>

    <FromUserName><![CDATA[{1}]]></FromUserName>

    <CreateTime>{2}</CreateTime>

    <MsgType><![CDATA[image]]></MsgType>

    <Image>

    <MediaId><![CDATA[{3}]]></MediaId>

    </Image>

    </xml>

消息格式已经有了,接着我们只需要设置相应的参数即可。

responseContent = string.Format(ReplyType.Message_Text,

FromUserName.InnerText,

ToUserName.InnerText,

DateTime.Now.Ticks,

String.IsNullOrEmpty(reply)?"Sorry,I can not follow you." :reply);

3.用户消息与服务器消息的加密解密

微信公共平台开发者文档中提供有c++,C#,java等各种语言的加密解密示例,我们用到的是C#,只需要将其中的两个文件添加到项目中即可,Sample.cs是微信团队给出的示例代码,不需要引用,对

WXBizMsgCrypt.cs与Cryptography.cs文件添加引用即可。为了进一步封装和方便调用,我又新建了一个类WeChatSecurityHelper

类中的定义两个方法,分别来进行加密(EncryptMsg)和解密(DecryptMsg),创建一个WXBizMsgCrypt对象,调用它的方法加解密,具体代码可见代码示例

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Common
{
public class WeChatSecurityHelper
{
/// <summary>
/// 定义Token,与微信公共平台上的Token保持一致
/// </summary>
private const string Token = "StupidMe";
/// <summary>
/// AppId 要与 微信公共平台 上的 AppId 保持一致
/// </summary>
private const string AppId = "";
/// <summary>
/// 加密用
/// </summary>
private const string AESKey = "pvX2KZWRLQSkUAbvArgLSAxCwTtxgFWF3XOnJ9iEUMG"; private static Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(Token, AESKey, AppId);
private string signature,timestamp,nonce;
private static LogHelper logger = new LogHelper(typeof(WeChatSecurityHelper)); public WeChatSecurityHelper(string signature, string timestamp, string nonce)
{
this.signature = signature;
this.timestamp = timestamp;
this.nonce = nonce;
} /// <summary>
/// 加密消息
/// </summary>
/// <param name="msg">要加密的消息</param>
/// <returns>加密后的消息</returns>
public string EncryptMsg(string msg)
{
string encryptMsg="";
int result = wxcpt.EncryptMsg(msg, timestamp, nonce, ref encryptMsg);
if (result == )
{
return encryptMsg;
}
else
{
logger.Error("消息加密失败");
return "";
}
} /// <summary>
/// 解密消息
/// </summary>
/// <param name="msg">消息体</param>
/// <returns>明文消息</returns>
public string DecryptMsg(string msg)
{
string decryptMsg = "";
int result = wxcpt.DecryptMsg(signature, timestamp, nonce, msg,ref decryptMsg);
if (result != )
{
logger.Error("消息解密失败,result:"+result);
}
return decryptMsg;
}
}
}

WeChatSecurityHelper Code

ASP.NET MVC 微信公共平台开发之获取用户消息并处理的更多相关文章

  1. ASP.NET MVC 微信公共平台开发之验证消息的真实性

    ASP.NET MVC 微信公共平台开发 验证消息的真实性 在MVC Controller所在项目中添加过滤器,在过滤器中重写 public override void OnActionExecuti ...

  2. ASP.NET MVC 微信公共平台开发之 微信接入

    ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注 ...

  3. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  4. 微信公众平台开发2-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码) 很多系统中都有access_token参数,对于微信公众平台的access_token参数,微信服务器判断该公众平台所拥有的权限,允许或 ...

  5. ***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权

    本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息, ...

  6. 微信公共平台开发-(.net实现)1--成为开发者

    刚换了个新环境,哎这都快一个月了,还没适应过来,还是怀念老地方呀.老板让开发一个基于微信平台的开发项目,而且是用net实现.当时就蒙了,微信就用了一会个人赶脚不好,所以果断不用,现在让开发,而且查了一 ...

  7. 微信公共平台开发1 .net

    如果想通过微信去开发(当然,指的是开发模式下),首先 建议先申请一个服务号,因为服务号的功能与接口也多,有些功能订阅号是实现不了的.另外申请过以后必须得通过微信 认证才能开发,好像是得付300大洋,高 ...

  8. Java微信公众平台开发之获取地理位置

    本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  9. 微信公共平台开发-(.net实现)5--access_token过期的问题

    每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token ...

随机推荐

  1. 再说 c++11 内存模型

    可见性与乱序 在说到内存模型相关的东西时,我们常常会说到两个名词:乱序与可见性,且两者经常交错着使用,容易给人错觉仿佛是两个不同的东西,其实不是这样,他们只是从不同的角度来描述一个事情,本质是相同的. ...

  2. JS移动端滑屏事件

    来看看在pc上面的几个事件:onmousedown,onmousemove,onmouseup 我相信大家对这几个事件一定不陌生,第一个onmousedown表示鼠标按下,第二个onmousemove ...

  3. AssetBundle系列——场景资源之打包(一)

    本篇讲解的是3D游戏的场景资源打包方式,首先简单的分析一下场景中所包含的资源的类型. 场景资源一般包含:地表模型(或者是Unity Terrain),非实例化物体(摄像机.空气墙.光源.各种逻辑物体之 ...

  4. Unity 中的协同程序

    今天咱就说说,协同程序coroutine.(这文章是在网吧敲的,没有unity,但是所有结论都被跑过,不管你信得过我还是信不过我,都要自己跑一下看看,同时欢迎纠错)先说说啥是协程:协同程序是一个非常让 ...

  5. uboot命令及内核启动参数

        修改:mw [内存地址] [值] [长度] 例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址 ...

  6. 领域实体框架Rafy2 发布了

    在2009年我在codeplex发布了1.0版本OpenExpressApp,下载地址:http://openexpressapp.codeplex.com/.OEA 1.0 作为我十多年开发工作的一 ...

  7. css知识

    margin和padding是什么意思 margin外边距,padding内边距,外边距表示一个元素的边到相邻元素的距离,内边距表示元素之间的内容和元素边框的距离. font:12px/1.5 表示什 ...

  8. python学习笔记 - 初识socket

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  9. Linq查询操作之Where筛选

    筛选操作where能够处理逻辑运算符组成的逻辑表达式.比如逻辑“与”,逻辑“或”,并从数据源中筛选数据,它和where子句的功能非常相似.Enumerable类的Where()原型如下: public ...

  10. JavaScript异常捕获

    理论准备 ★   异常捕获 △ 异常:当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行: △ 异常抛出:当异常产生,并且这个异常生成一个错误信息: △ 异常捕获: ...