C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

文章导读:

C#微信公众号接口开发之从零开发(一) 接入微信公众平台

微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们的绑定的地址上,通过解析XML数据,获取到微信用户发送的消息,让根据微信消息(文本:关键字,图片,语音等等)回复XML格式的数据给微信服务器,微信服务器再将接收到的消息返回给用户微信。

我们所需要做的:接收消息返回消息

一、创建实体类

首先看文档http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html

微信发送过来的消息XML格式我们先创建一个实体类来解析XML数据 实体类根据后续开发增加

 1 public class WxXmlModel
 2     {
 3         /// <summary>
 4         /// 消息接收方微信号
 5         /// </summary>
 6         public string ToUserName { get; set; }
 7
 8         /// <summary>
 9         /// 消息发送方微信号
10         /// </summary>
11         public string FromUserName { get; set; }
12
13         /// <summary>
14         /// 创建时间
15         /// </summary>
16         public string CreateTime { get; set; }
17
18         /// <summary>
19         /// 信息类型 地理位置:location,文本消息:text,消息类型:image
20         /// </summary>
21         public string MsgType { get; set; }
22
23         /// <summary>
24         /// 信息内容
25         /// </summary>
26         public string Content { get; set; }
27
28         /// <summary>
29         /// 地理位置纬度
30         /// </summary>
31         public string Location_X { get; set; }
32
33         /// <summary>
34         /// 地理位置经度
35         /// </summary>
36         public string Location_Y { get; set; }
37         /// <summary>
38         /// 地图缩放大小
39         /// </summary>
40         public string Scale { get; set; }
41         /// <summary>
42         /// 地理位置信息
43         /// </summary>
44         public string Label { get; set; }
45         /// <summary>
46         /// 图片链接,开发者可以用HTTP GET获取
47         /// </summary>
48         public string PicUrl { get; set; }
49
50         /// <summary>
51         /// 事件类型,subscribe(订阅/扫描带参数二维码订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件) 、SCAN(已关注的状态下扫描带参数二维码)
52         /// </summary>
53         public string Event { get; set; }
54
55         /// <summary>
56         /// 事件KEY值
57         /// </summary>
58         public string EventKey { get; set; }
59
60         /// <summary>
61         /// 二维码的ticket,可以用来换取二维码
62         /// </summary>
63         public string Ticket { get; set; }
64     }

二、接收消息若成功返回提示消息

 1 /// <summary>
 2 /// 接收微信发送的XML消息并且解析
 3 /// </summary>
 4 private void ReceiveXml()
 5 {
 6     Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
 7     byte[] requestByte = new byte[requestStream.Length];
 8     requestStream.Read(requestByte, 0, (int)requestStream.Length);
 9     string requestStr = Encoding.UTF8.GetString(requestByte);
10
11     if (!string.IsNullOrEmpty(requestStr))
12     {
13         //封装请求类
14         XmlDocument requestDocXml = new XmlDocument();
15         requestDocXml.LoadXml(requestStr);
16         XmlElement rootElement = requestDocXml.DocumentElement;
17
18         WxXmlModel WxXmlModel = new WxXmlModel();
19         WxXmlModel.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
20         WxXmlModel.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
21         WxXmlModel.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
22         WxXmlModel.MsgType = rootElement.SelectSingleNode("MsgType").InnerText;
23
24         switch (WxXmlModel.MsgType)
25         {
26             case "text":
27                 WxXmlModel.Content = rootElement.SelectSingleNode("Content").InnerText;
28                 break;
29             case "image":
30                 WxXmlModel.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
31                 break;
32             case "event":
33                 WxXmlModel.Event = rootElement.SelectSingleNode("Event").InnerText;
34                 if (WxXmlModel.Event == "subscribe")//关注类型
35                 {
36                     WxXmlModel.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
37                 }
38                 break;
39             default:
40                 break;
41         }
42         sohovan.com.common.CommonMethod.WriteTxt(WxXmlModel.Content);//接收的文本消息
43         //回复消息<xml>
44         //<ToUserName><![CDATA[toUser]]></ToUserName>
45         //<FromUserName><![CDATA[fromUser]]></FromUserName>
46         //<CreateTime>12345678</CreateTime>
47         //<MsgType><![CDATA[text]]></MsgType>
48         //<Content><![CDATA[你好]]></Content>
49         //<FuncFlag>0</FuncFlag>
50         //</xml>
51         string XML = "<xml><ToUserName><![CDATA[" + WxXmlModel.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + WxXmlModel.ToUserName + "]]></FromUserName><CreateTime>" + sohovan.com.common.CommonMethod.ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[接收消息成功,消息为" + WxXmlModel.Content + "]]></Content><FuncFlag>0</FuncFlag></xml>";
52         //ResponseXML(WxXmlModel);
53         sohovan.com.common.CommonMethod.WriteTxt(XML);
54         HttpContext.Current.Response.Write(XML);
55         HttpContext.Current.Response.End();
56     }
57 }

如图为我测试的情况:

只有微信请求我们的地址,我们返回去的xml消息才可以发送给微信用户,如图中公众账号回复了测试的文本消息,说明微信接收消息成功。

微信开发群

完整源码下载:https://github.com/xiejun-net/weixin

时间: 2024-08-08 09:42:13

C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)的相关文章

微信公众号吸粉 互动平台炫富豪车图一键生成装逼必备神器源码

此款软件集吸粉互动于一体,多的就不讲了,直接出售全套装逼神器源码! 请直接添加涛舅舅微信: taojiujiugame交谈和查看演示链接! 包括以下生成器!!! 明星微信消息未读生成器 银行取款生成器武术段位生成器纸条工资单生成器LOL封号提示生成器iphone生成器蜡烛表白图生成器部落战争生成器QQ飞车土豪帐号生成器充气娃娃订单生成器通缉令生成器领现金生成器体育彩票中奖生成器土豪工资单生成器财付通余额生成器催款通知单生成器愚人节愚人证生成器轰动山林装逼生成器跆拳道黑带证书生成器病危通知生成器捐

C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码) 一.拼凑回复的XML字符串 微信被动回复的形式有一下六种: 1 回复文本消息 2 回复图片消息 3 回复语音消息 4 回复视频消息 5 回复音乐消息 6 回复图文消息 分别对应不同的XML形式,这里以文本消息和图文为例,读者举一反三其他的类似,不再赘述:

C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号密码.作为微信接口开发人员我们知道网页授权可以用作微信网页用作安全登录,带参数二维码的使用用作记录用户来源,模板消息用作购物消费等消息的通知,但是很少看到有综合利用这些高级接口做出体验比较好的公众账号,这里分享一些我开发的用户绑定和验证码的一些心得.所需要的接口有基础的回复.网页授权.带参数二维码.

微信公众号接口类(PHP版本)

[项目需求] 通过微信提供的接口,实现微信公众号与后端的应用程序数据交互.消息响应等功能. [项目疑难点] 理解接口工作方式,统一接口API,响应速度.安全性等 [代码举例] WeixinApi.class.php  微信公众号接口基类 [php] view plain copy <?php /** * 微信API 公用方法 * * PHP version 5 * * @category    Lib * @package     COM * @subpackage  GZNC * @autho

微信公众号接口添加菜单时错误(errcode":40017 invalid button type)

POST提交时总是报错: {"errcode":40017,"errmsg":"invalid button type"} 最后查出来是由于数据中有中文引起的 解决: data = {"button":[ {"name": u"会员服务", "sub_button":[ {"type":"click","name&qu

天纵智能开发平台与微信公众号接口指南

前言:利用天纵智能开发平台可以非常方便地与最新的微信公众号进行接入,开发者不必研究复杂啰嗦的微信接口规则,只需在天纵智能开发平台上配置一下业务逻辑即可完成开发. 下面介绍一下天纵智能开发平台中使用微信的操作过程和几个常用使用场合. ==微信接口申请和认证== 一.申请微信公众号 进入微信官网https://mp.weixin.qq.com  注册并申请微信公众号,为了能实现更多功能,请申请为"服务号"类型,并进行认证. 根据官网说明一步一步填写资料,上传证明文件,然后即可完成申请和认证

微信公众号接口相关操作

<?php /** * 微信公众号接口相关操作 */ class WeChat { private $_appid; private $_appsecret; private $_token; public function __construct($_appid,$_appsecret,$_token) { $this->_appid=$_appid; $this->_appsecret=$_appsecret; $this->_token=$_token; } //获得微信通信

微信公众号怎么生成能追踪效果的二维码?

微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送.现在只需要使用微号帮平台对各个渠道生成不同的二维码就可以轻松解决这个问题,微号帮平台实时观察每个渠道的吸粉情况,哪个渠道粉丝多,哪个渠道粉丝少,一目了然.下次投放广告也可以针对性的在粉丝多的渠道搞一些特色优惠活动,这样不经增加了营业额,还能提高粉丝的忠诚度和认同感.微信公众号怎么生成能追踪效果的二维码?操

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项目上文件上传是比不可少的,大家这个心里都知道.主要提供给源码说明及下载 最终效果图: SWFUpload的特点: 1.用flash进行上传,页面无刷新,且可自定义Flash按钮的样式; 2.可以在浏