一、应用举例
链接消息没有太多感知的用途,或许是我孤陋寡闻。
已知的应用可以是超级链接分类汇总,就像hao123.com,紧紧只是一个静态HTML页面,对各种网站分类汇总导航,依然也可以发展的很好,后来被百度收购了。
那么公众号也可以通过粉丝推荐来收集各式各样的网站应用。
二、获取微信用户链接信息方式
在微信里面打开一个页面,直接转发给公众号,就收到了链接消息。如下图
三、微信服务器发送消息格式
用户发送的链接消息,经微信服务器处理后,形成如下XML格式发到你的服务器:
1351776360 1234567890123456
四、具体实现的源码
在接收到微信服务器发来的内容之后,首先由指定的接口网页AccessWx.aspx对信息类型进行判别,然后交给指定的消息处理类处理和回应。在本系列文章第1篇介绍的AccessWx.aspx.cs中开始部分引入命名空间using QinMing.Weixin.MessageHandlerLink;
else if(MsgType == "link")
{
//对用户发送的链接消息处理,使用QinMing.Weixin.MessageHandlerLink命名空间下的LinkMessageDeal类
LinkMessageDeal lkmd = new LinkMessageDeal();
Response.Write(lkmd.DealResult(weixinXML));
}
在命名空间QinMing.Weixin.MessageHandlerLlink下新建一个类LinkMessageDeal,用来处理微信服务器发来的链接消息。记得类源码文件要放在App_Code目录下!下面是链接消息处理源码:QinMingWeixinMessageHandlerLink.cs
using System;
using System.Web;
using System.Xml;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using QinMing.Config;
using QinMing.Weixin.ReturnContent;
//using QinMing.WeixinSendTemplateMessage;
namespace QinMing.Weixin.MessageHandlerLink
{
//链接消息处理
public class LinkMessageDeal :System.Web.UI.Page
{
public string DealResult(string weixinXML)
{
string content = DealLink(weixinXML);
return content;
}
public string DealLink(string weixinXML)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(weixinXML);
XmlNodeList list = doc.GetElementsByTagName("xml");
XmlNode xn = list[0];
string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText; //关注用户的加密后openid
string ToUserName = xn.SelectSingleNode("//ToUserName").InnerText; //公众微信号原始ID
string strresponse = "";
//用户通过向公众号发送位置发送链接信息
string Title = xn.SelectSingleNode("//Title").InnerText;
string Description = xn.SelectSingleNode("//Description").InnerText;
string Url = xn.SelectSingleNode("//Url").InnerText;
string MsgId = xn.SelectSingleNode("//MsgId").InnerText;
//保存链接信息
SaveLink(FromUserName, ToUserName, Title, Description, Url, MsgId);
ReturnMsg rm = new ReturnMsg();
strresponse = rm.ReturnText(FromUserName, ToUserName, "您发送的链接信息已收录,感谢您的参与");
//告知客服人员有微信用户发送链接消息
//QinMingWeixinSendTemplateMessage SendTempMsg = new QinMingWeixinSendTemplateMessage();
//SendTempMsg.SendTempMsgRemind("管理员的openid", "客户发送位置消息", "");
return strresponse;
}
//把用户发的链接信息保存到数据表表中
public void SaveLink(string FromUserName, string ToUserName, string Title, string Description , string Url, string MsgId)
{
SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "insert into weixin_recv_msg (msg_type,msg_id,open_id,gh_id,recv_time,link_title,link_description,link_url) values("
+ "'link','" + MsgId + "','" + FromUserName + "','" + ToUserName + "',getdate(),'" + Title + "','" + Description + "','" + Url + "')";
cmd.ExecuteScalar();
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
}
}
}
}
五、普通消息篇章所用的数据表创建语句
--公众号接收到微信用户的普通消息 create table weixin_recv_msg ( msg_type varchar(30), --消息类型 msg_id varchar(40), --消息编号 open_id varchar(40), --微信用户的openid gh_id varchar(30), --公众号原始id recv_time datetime, --接收时间 text_content ntext, --微信用户发送的文本内容 pic_url ntext, --微信用户发送的图片链接 media_id varchar(40), --微信用户发送的媒体链接,微信服务器专用链接(含语音、视频、段视频) voice_format varchar(20), --语音消息格式 voice_recognition varchar(40), --语音消息转译后的文字 video_thumb_media_id varchar(40), --视频消息、段视频消息的缩略图链接 location_x float, --位置消息纬度 location_y float, --位置消息经度 location_scale int, --位置消息精度 location_label varchar(200), --位置消息详细地址 link_title varchar(300), --链接消息标题 link_description ntext, --链接消息描述 link_url ntext --链接消息超链接 )
上表只是用来学习的参考用表,不符合关系数据库的范式要求,存在冗余字段,猿友们可以根据需要自行拆表。
到这里微信公众提供的普通消息如何处理就全部讲解完了,下一篇预告:介绍菜单设置;然后开始讲解事件消息如何处理;再然后讲解激动人心的发红包和收钱,涉及微信支付知识,请提前准备好微信支付功能。



