订餐系统之微信点餐
Posted 二J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了订餐系统之微信点餐相关的知识,希望对你有一定的参考价值。
经过几天的开发、测试微信点餐demo终于完成了,特在此分享下,不好的地方请大家多指正下哈!一开始,就想这东西出来这么久了,网上应该有很多现成的东西,于是,baidu、google了半天,基本没发现现成的东西,也许是我搜索不得其道,也有可能大家都不愿意分享吧...于是,还得自己动手,丰衣足食!
还是先交代下背景:所谓“微信点餐”,其实就是用户通过微信app,关注公众号,发送指定类型的信息,如地理位置信息,网站返回相关链接到微信上,通过这些链接进入wap或者html5网站,然后开始选择商家、点餐、提交订单等。关于微信app,与订餐网站的关系,我简单的画了一个图,比较潦草,请别喷得太厉害了!如图1,说简单点:微信app通过微信服务器,传给订餐网站(申请公众号时,会输入一个地址,微信服务器就是通过此地址post,get消息的),网站根据收到的消息,返回具体信息,再通过某些信息的链接进入wap或者html5站点。微信公众平台地址:https://mp.weixin.qq.com/ ,这几天好像升级了,不叫公众号了,叫订阅号。
(图1)
至于,如何申请、如何关注,这里就不赘述了,你懂的。要说明的是:关注后,订餐网站会收到一个用户关注的消息,网站返回一段说明文字,提示如何操作等信息,如图2:
(图2)
下面,我就把我自己设计的处理微信消息的代码介绍下吧,不好的地方,请大伙儿多给我指正指正。还是先上一张UML模型图吧,关于依赖和关联的关系,真不怎么弄得明白,所以都有依赖的关系表示了下,这张图片不是很清晰,有兴趣的可以下载源文件看下uml.rar,见图3:
下面还是简单对几个类进行说明下吧,这样大家看得明白点。
BaseNotice.cs,此类表示消息基类,因为每个消息都有几个字段是相同的,如ToUserName、FromUserName、CreateTime、MsgType等,所有抽象出一个基类,此类还有一个抽象方法LoadXml,根据xml返回类的对像的实例。其他具体消息继承此类,加上自己特定的信息。
text.cs ,此类表示文本消息类,除了有BaseNotice中有的属性外,还有一个Content,表示文本信息内容。且实现LoadXml方法,返回一个text实例,代码如下:
/// <summary> /// 文本消息 /// </summary> public class text : BaseNotice { /// <summary> /// 根据xml返回对像 /// </summary> /// <param name="xml"></param> /// <returns></returns> public override BaseNotice LoadXml(string xml) { text notice = new text(); //<xml> //<ToUserName><![CDATA[toUser]]></ToUserName> //<FromUserName><![CDATA[fromUser]]></FromUserName> //<CreateTime>1348831860</CreateTime> //<MsgType><![CDATA[text]]></MsgType> //<Content><![CDATA[this is a test]]></Content> //<MsgId>1234567890123456</MsgId> //</xml> System.Xml.XmlDocument d = new System.Xml.XmlDocument(); d.LoadXml(xml); System.Xml.XmlCDataSection n = d.SelectSingleNode("/xml/ToUserName").FirstChild as System.Xml.XmlCDataSection; notice.ToUserName = n.Value; n = d.SelectSingleNode("/xml/FromUserName").FirstChild as System.Xml.XmlCDataSection; notice.FromUserName = n.Value; //n = d.SelectSingleNode("/xml/CreateTime").FirstChild as System.Xml.XmlCDataSection; //notice.CreateTime = n.Value; n = d.SelectSingleNode("/xml/MsgType").FirstChild as System.Xml.XmlCDataSection; notice.MsgType = n.Value; n = d.SelectSingleNode("/xml/Content").FirstChild as System.Xml.XmlCDataSection; notice.Content = n.Value; //n = d.SelectSingleNode("/xml/MsgId").FirstChild as System.Xml.XmlCDataSection; //notice.MsgId = n.Value; return notice; } /// <summary> /// 消息内容 /// </summary> public string Content { get; set; } }
以上是关于订餐系统之微信点餐的主要内容,如果未能解决你的问题,请参考以下文章