使用web api开发微信公众号调用图灵机器人接口的方法
被动响应消息(返回XML) 微信要求我们返回xml数据,且格式是规定好的,具体请看 微信公众平台开发者文档。 响应的实体类,我们之前已经写好了,因为要求是XML格式。我们在此使用微软提供的System.Xml.Serialization.XmlSerializer来将我们的数据序列化为XML。所以我们在类上边标记了XmlRoot特性,在枚举的字段上边标记了XmlEnum特性,NewsMsg中在文章列表上标记了XmlArray和XmlArrayItem特性。而后反序列化出来的便是微信要求的格式了。 序列化方法如下: public string ResponseXML(object value, Type type){ StringWriter sw = new StringWriter(); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); //去除命名空间 XmlSerializer serializer = new XmlSerializer(type); serializer.Serialize(sw, value, ns); return sw.ToString(); } 登录后复制 注意:此处必须去除XML的命名空间,不然微信不识别 完整方法奉上: public HttpResponseMessage Post(){ var requestContent = Request.Content.ReadAsStreamAsync().Result; //从正文参数中加载微信的请求参数 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(requestContent); logger.DebugFormat("WX请求XML内容:{0}", xmlDoc.InnerText); string msgTypeStr = xmlDoc.SelectSingleNode("xml/MsgType").InnerText; string userName = xmlDoc.SelectSingleNode("xml/FromUserName").InnerText; string efhName = xmlDoc.SelectSingleNode("xml/ToUserName").InnerText; string responseContent; MsgType msgType; //获取消息类型,若未定义,则返回。 if (!Enum.TryParse(msgTypeStr, true, out msgType)) { responseContent = MsgService.Instance.ResponseXML(new TextMsg { FromUserName = efhName, MsgType = MsgType.Text, Content = "俺还小,不知道你在说啥子(⊙_⊙)?",…