C#.net 微信公众账号接口开发

时间:2022-08-22 16:53:00

微信越来越火,微信公众平台成为开发成新宠,本文用C#.net开发微信公众信号接口。

微信接口地址代码:

  1. weixin _wx = new weixin(); 
  2.  
  3.         string postStr = ""
  4.  
  5.         if (Request.HttpMethod.ToLower() == "post"
  6.  
  7.         { 
  8.  
  9.           Stream s = System.Web.HttpContext.Current.Request.InputStream; 
  10.  
  11.           byte[] b = new byte[s.Length]; 
  12.  
  13.           s.Read(b, 0, (int)s.Length); 
  14.  
  15.           postStr = Encoding.UTF8.GetString(b); 
  16.  
  17.  
  18.           if (!string.IsNullOrEmpty(postStr)) //请求处理 
  19.  
  20.           { 
  21.  
  22.             _wx.Handle(postStr); 
  23.  
  24.           } 
  25.  
  26.         } 
  27.  
  28.         else 
  29.  
  30.         { 
  31.  
  32.           _wx.Auth(); 
  33.  
  34.         } 
  35.  
  36.  
  37. 微信处理类: 
  38.  
  39. public class weixin 
  40.  
  41.   { 
  42.  
  43.     private string Token = "weixin_token"//换成自己的token 
  44.  
  45.       
  46.  
  47.     public void Auth() 
  48.  
  49.     { 
  50.  
  51.       string echoStr = System.Web.HttpContext.Current.Request.QueryString["echoStr"]; 
  52.  
  53.       if (CheckSignature()) 
  54.  
  55.       { 
  56.  
  57.         if (!string.IsNullOrEmpty(echoStr)) 
  58.  
  59.         { 
  60.  
  61.           System.Web.HttpContext.Current.Response.Write(echoStr); 
  62.  
  63.           System.Web.HttpContext.Current.Response.End(); 
  64.  
  65.         } 
  66.  
  67.       } 
  68.  
  69.     } 
  70.  
  71.  
  72.     public void Handle(string postStr) 
  73.  
  74.     { 
  75.  
  76.       //封装请求类 
  77.  
  78.       XmlDocument doc = new XmlDocument(); 
  79.  
  80.       doc.LoadXml(postStr); 
  81.  
  82.       XmlElement rootElement = doc.DocumentElement; 
  83.  
  84.  
  85.       XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); 
  86.  
  87.  
  88.       RequestXML requestXML = new RequestXML(); 
  89.  
  90.       requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; 
  91.  
  92.       requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; 
  93.  
  94.       requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText; 
  95.  
  96.       requestXML.MsgType = MsgType.InnerText; 
  97.  
  98.  
  99.       if (requestXML.MsgType == "text"
  100.  
  101.       { 
  102.  
  103.         requestXML.Content = rootElement.SelectSingleNode("Content").InnerText; 
  104.  
  105.       } 
  106.  
  107.       else if (requestXML.MsgType == "location"
  108.  
  109.       { 
  110.  
  111.         requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; 
  112.  
  113.         requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; 
  114.  
  115.         requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText; 
  116.  
  117.         requestXML.Label = rootElement.SelectSingleNode("Label").InnerText; 
  118.  
  119.       } 
  120.  
  121.       else if (requestXML.MsgType == "image"
  122.  
  123.       { 
  124.  
  125.         requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; 
  126.  
  127.       } 
  128.  
  129.  
  130.       //回复消息 
  131.  
  132.       ResponseMsg(requestXML); 
  133.  
  134.     } 
  135.  
  136.  
  137.     /// <summary> 
  138.  
  139.     /// 验证微信签名 
  140.  
  141.     /// </summary> 
  142.  
  143.     /// * 将token、timestamp、nonce三个参数进行字典序排序 
  144.  
  145.     /// * 将三个参数字符串拼接成一个字符串进行sha1加密 
  146.  
  147.     /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 
  148.  
  149.     /// <returns></returns> 
  150.  
  151.     private bool CheckSignature() 
  152.  
  153.     { 
  154.  
  155.       string signature = System.Web.HttpContext.Current.Request.QueryString["signature"]; 
  156.  
  157.       string timestamp = System.Web.HttpContext.Current.Request.QueryString["timestamp"]; 
  158.  
  159.       string nonce = System.Web.HttpContext.Current.Request.QueryString["nonce"]; 
  160.  
  161.       string[] ArrTmp = { Token, timestamp, nonce }; 
  162.  
  163.       Array.Sort(ArrTmp);   //字典排序 
  164.  
  165.       string tmpStr = string.Join("", ArrTmp); 
  166.  
  167.       tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); 
  168.  
  169.       tmpStr = tmpStr.ToLower(); 
  170.  
  171.       if (tmpStr == signature) 
  172.  
  173.       { 
  174.  
  175.         return true
  176.  
  177.       } 
  178.  
  179.       else 
  180.  
  181.       { 
  182.  
  183.         return false
  184.  
  185.       } 
  186.  
  187.     } 
  188.  
  189.      
  190.  
  191.     /// <summary> 
  192.  
  193.     /// 回复消息(微信信息返回) 
  194.  
  195.     /// </summary> 
  196.  
  197.     /// <param name="weixinXML"></param> 
  198.  
  199.     private void ResponseMsg(RequestXML requestXML) 
  200.  
  201.     { 
  202.  
  203.       try 
  204.  
  205.       { 
  206.  
  207.         string resxml = ""
  208.  
  209.         mijiya mi = new mijiya(requestXML.Content,requestXML.FromUserName); 
  210.  
  211.  
  212.         if (requestXML.MsgType == "text"
  213.  
  214.         { 
  215.  
  216.           //在这里执行一系列操作,从而实现自动回复内容. 
  217.  
  218.           string _reMsg = mi.GetReMsg(); 
  219.  
  220.           if (mi.msgType == 1) 
  221.  
  222.           { 
  223.  
  224.             resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>2</ArticleCount><Articles>"
  225.  
  226.             resxml += mi.GetRePic(requestXML.FromUserName); 
  227.  
  228.             resxml += "</Articles><FuncFlag>1</FuncFlag></xml>"
  229.  
  230.           } 
  231.  
  232.           else 
  233.  
  234.           { 
  235.  
  236.             resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + _reMsg + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  237.  
  238.           } 
  239.  
  240.         } 
  241.  
  242.         else if (requestXML.MsgType == "location"
  243.  
  244.         { 
  245.  
  246.           string city = GetMapInfo(requestXML.Location_X, requestXML.Location_Y); 
  247.  
  248.           if (city == "0"
  249.  
  250.           { 
  251.  
  252.             resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[好啦,我们知道您的位置啦。您可以:" + mi.GetDefault() + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  253.  
  254.           } 
  255.  
  256.           else 
  257.  
  258.           { 
  259.  
  260.             resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[好啦,我们知道您的位置啦。您可以:" + mi.GetDefault() + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  261.  
  262.           } 
  263.  
  264.         } 
  265.  
  266.         else if (requestXML.MsgType == "image"
  267.  
  268.         { 
  269.  
  270.           resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,我没有看懂你的意思。您可以:" + mi.GetDefault() + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  271.  
  272.           //返回10以内条 
  273.  
  274.           //int size = 10; 
  275.  
  276.           //resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>" + size + "</ArticleCount><Articles>"; 
  277.  
  278.           //List<string> list = new List<string>(); 
  279.  
  280.           ////假如有20条查询的返回结果 
  281.  
  282.           //for (int i = 0; i < 20; i++) 
  283.  
  284.           //{ 
  285.  
  286.           //  list.Add("1"); 
  287.  
  288.           //} 
  289.  
  290.           //string[] piclist = new string[] { "/Abstract_Pencil_Scribble_Background_Vector_main.jpg", "/balloon_tree.jpg", "/bloom.jpg", "/colorful_flowers.jpg", "/colorful_summer_flower.jpg", "/fall.jpg", "/fall_tree.jpg", "/growing_flowers.jpg", "/shoes_illustration.jpg", "/splashed_tree.jpg" }; 
  291.  
  292.  
  293.           //for (int i = 0; i < size && i < list.Count; i++) 
  294.  
  295.           //{ 
  296.  
  297.           //  resxml += "<item><Title><![CDATA[沈阳-黑龙江]]></Title><Description><![CDATA[元旦特价:¥300 市场价:¥400]]></Description><PicUrl><![CDATA[" + "http://www.hougelou.com" + piclist[i] + "]]></PicUrl><Url><![CDATA[http://www.hougelou.com]]></Url></item>"; 
  298.  
  299.           //} 
  300.  
  301.           //resxml += "</Articles><FuncFlag>1</FuncFlag></xml>"; 
  302.  
  303.         } 
  304.  
  305.         else if (wx_tmsg.GetMsgCount(requestXML.FromUserName) == 0) 
  306.  
  307.         { 
  308.  
  309.           resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + mi.GetFirst() + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  310.  
  311.            
  312.  
  313.         } 
  314.  
  315.         else 
  316.  
  317.         { 
  318.  
  319.           resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,我没有看懂你的意思。您可以:" + mi.GetDefault() + "]]></Content><FuncFlag>1</FuncFlag></xml>"
  320.  
  321.            
  322.  
  323.         } 
  324.  
  325.         //WriteTxt(resxml); 
  326.  
  327.         System.Web.HttpContext.Current.Response.Write(resxml); 
  328.  
  329.  
  330.         WriteToDB(requestXML, resxml,mi.pid); 
  331.  
  332.       } 
  333.  
  334.       catch (Exception ex) 
  335.  
  336.       { 
  337.  
  338.         //WriteTxt("异常:" + ex.Message + "Struck:" + ex.StackTrace.ToString()); 
  339.  
  340.         wx_logs.MyInsert("异常:" + ex.Message + "Struck:" + ex.StackTrace.ToString()); 
  341.  
  342.       } 
  343.  
  344.     } 
  345.  
  346.       
  347.  
  348.     /// <summary> 
  349.  
  350.     /// unix时间转换为datetime 
  351.  
  352.     /// </summary> 
  353.  
  354.     /// <param name="timeStamp"></param> 
  355.  
  356.     /// <returns></returns> 
  357.  
  358.     private DateTime UnixTimeToTime(string timeStamp) 
  359.  
  360.     { 
  361.  
  362.       DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); 
  363.  
  364.       long lTime = long.Parse(timeStamp + "0000000"); 
  365.  
  366.       TimeSpan toNow = new TimeSpan(lTime); 
  367.  
  368.       return dtStart.Add(toNow); 
  369.  
  370.     } 
  371.  
  372.  
  373.     /// <summary> 
  374.  
  375.     /// datetime转换为unixtime 
  376.  
  377.     /// </summary> 
  378.  
  379.     /// <param name="time"></param> 
  380.  
  381.     /// <returns></returns> 
  382.  
  383.     private int ConvertDateTimeInt(System.DateTime time) 
  384.  
  385.     { 
  386.  
  387.       System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); 
  388.  
  389.       return (int)(time - startTime).TotalSeconds; 
  390.  
  391.     } 
  392.  
  393.  
  394.     /// <summary> 
  395.  
  396.     /// 调用百度地图,返回坐标信息 
  397.  
  398.     /// </summary> 
  399.  
  400.     /// <param name="y">经度</param> 
  401.  
  402.     /// <param name="x">纬度</param> 
  403.  
  404.     /// <returns></returns> 
  405.  
  406.     public string GetMapInfo(string x, string y) 
  407.  
  408.     { 
  409.  
  410.       try 
  411.  
  412.       { 
  413.  
  414.         string res = string.Empty; 
  415.  
  416.         string parame = string.Empty; 
  417.  
  418.         string url = "http://maps.googleapis.com/maps/api/geocode/xml"
  419.  
  420.         parame = "latlng=" + x + "," + y + "&language=zh-CN&sensor=false";//此key为个人申请 
  421.  
  422.         res = webRequestPost(url, parame); 
  423.  
  424.  
  425.         XmlDocument doc = new XmlDocument(); 
  426.  
  427.  
  428.         doc.LoadXml(res); 
  429.  
  430.         XmlElement rootElement = doc.DocumentElement; 
  431.  
  432.         string Status = rootElement.SelectSingleNode("status").InnerText; 
  433.  
  434.         if (Status == "OK"
  435.  
  436.         { 
  437.  
  438.           //仅获取城市 
  439.  
  440.           XmlNodeList xmlResults = rootElement.SelectSingleNode("/GeocodeResponse").ChildNodes; 
  441.  
  442.           for (int i = 0; i < xmlResults.Count; i++) 
  443.  
  444.           { 
  445.  
  446.             XmlNode childNode = xmlResults[i]; 
  447.  
  448.             if (childNode.Name == "status"
  449.  
  450.             { 
  451.  
  452.               continue
  453.  
  454.             } 
  455.  
  456.  
  457.             string city = "0"
  458.  
  459.             for (int w = 0; w < childNode.ChildNodes.Count; w++) 
  460.  
  461.             { 
  462.  
  463.               for (int q = 0; q < childNode.ChildNodes[w].ChildNodes.Count; q++) 
  464.  
  465.               { 
  466.  
  467.                 XmlNode childeTwo = childNode.ChildNodes[w].ChildNodes[q]; 
  468.  
  469.  
  470.                 if (childeTwo.Name == "long_name"
  471.  
  472.                 { 
  473.  
  474.                   city = childeTwo.InnerText; 
  475.  
  476.                 } 
  477.  
  478.                 else if (childeTwo.InnerText == "locality"
  479.  
  480.                 { 
  481.  
  482.                   return city; 
  483.  
  484.                 } 
  485.  
  486.               } 
  487.  
  488.             } 
  489.  
  490.             return city; 
  491.  
  492.           } 
  493.  
  494.         } 
  495.  
  496.       } 
  497.  
  498.       catch (Exception ex) 
  499.  
  500.       { 
  501.  
  502.         //WriteTxt("map异常:" + ex.Message.ToString() + "Struck:" + ex.StackTrace.ToString()); 
  503.  
  504.         return "0"
  505.  
  506.       } 
  507.  
  508.  
  509.       return "0"
  510.  
  511.     } 
  512.  
  513.  
  514.     /// <summary> 
  515.  
  516.     /// Post 提交调用抓取 
  517.  
  518.     /// </summary> 
  519.  
  520.     /// <param name="url">提交地址</param> 
  521.  
  522.     /// <param name="param">参数</param> 
  523.  
  524.     /// <returns>string</returns> 
  525.  
  526.     public string webRequestPost(string url, string param) 
  527.  
  528.     { 
  529.  
  530.       byte[] bs = System.Text.Encoding.UTF8.GetBytes(param); 
  531.  
  532.  
  533.       HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url + "?" + param); 
  534.  
  535.       req.Method = "Post"
  536.  
  537.       req.Timeout = 120 * 1000; 
  538.  
  539.       req.ContentType = "application/x-www-form-urlencoded;"
  540.  
  541.       req.ContentLength = bs.Length; 
  542.  
  543.  
  544.       using (Stream reqStream = req.GetRequestStream()) 
  545.  
  546.       { 
  547.  
  548.         reqStream.Write(bs, 0, bs.Length); 
  549.  
  550.         reqStream.Flush(); 
  551.  
  552.       } 
  553.  
  554.       using (WebResponse wr = req.GetResponse()) 
  555.  
  556.       { 
  557.  
  558.         //在这里对接收到的页面内容进行处理 
  559.  
  560.  
  561.         Stream strm = wr.GetResponseStream(); 
  562.  
  563.  
  564.         StreamReader sr = new StreamReader(strm, System.Text.Encoding.UTF8); 
  565.  
  566.  
  567.         string line; 
  568.  
  569.  
  570.         System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
  571.  
  572.  
  573.         while ((line = sr.ReadLine()) != null
  574.  
  575.         { 
  576.  
  577.           sb.Append(line + System.Environment.NewLine); 
  578.  
  579.         } 
  580.  
  581.         sr.Close(); 
  582.  
  583.         strm.Close(); 
  584.  
  585.         return sb.ToString(); 
  586.  
  587.       } 
  588.  
  589.     } 
  590.  
  591.  
  592.     private void WriteToDB(RequestXML requestXML,string _xml,int _pid) 
  593.  
  594.     { 
  595.  
  596.       wx_tmsg wx = new wx_tmsg(); 
  597.  
  598.       wx.AddNew(); 
  599.  
  600.       wx.FromUserName = requestXML.FromUserName; 
  601.  
  602.       wx.ToUserName = requestXML.ToUserName; 
  603.  
  604.       wx.MsgType = requestXML.MsgType; 
  605.  
  606.       wx.Msg = requestXML.Content; 
  607.  
  608.       wx.Creatime = requestXML.CreateTime; 
  609.  
  610.       wx.Location_X = requestXML.Location_X; 
  611.  
  612.       wx.Location_Y = requestXML.Location_Y; 
  613.  
  614.       wx.Label = requestXML.Label; 
  615.  
  616.       wx.Scale = requestXML.Scale; 
  617.  
  618.       wx.PicUrl = requestXML.PicUrl; 
  619.  
  620.       wx.reply = _xml; 
  621.  
  622.       wx.pid = _pid; 
  623.  
  624.       try 
  625.  
  626.       { 
  627.  
  628.         wx.Update(); 
  629.  
  630.       } 
  631.  
  632.       catch (Exception ex) 
  633.  
  634.       { 
  635.  
  636.         wx_logs.MyInsert(ex.Message); 
  637.  
  638.         //ex.message; 
  639.  
  640.       } 
  641.  
  642.  
  643.     } 
  644.  
  645.   } 
  646.  
  647.  
  648.   //微信请求类 
  649.  
  650.   public class RequestXML 
  651.  
  652.   { 
  653.  
  654.     private string toUserName=""
  655.  
  656.     /// <summary> 
  657.  
  658.     /// 消息接收方微信号,一般为公众平台账号微信号 
  659.  
  660.     /// </summary> 
  661.  
  662.     public string ToUserName 
  663.  
  664.     { 
  665.  
  666.       get { return toUserName; } 
  667.  
  668.       set { toUserName = value; } 
  669.  
  670.     } 
  671.  
  672.  
  673.     private string fromUserName = ""
  674.  
  675.     /// <summary> 
  676.  
  677.     /// 消息发送方微信号 
  678.  
  679.     /// </summary> 
  680.  
  681.     public string FromUserName 
  682.  
  683.     { 
  684.  
  685.       get { return fromUserName; } 
  686.  
  687.       set { fromUserName = value; } 
  688.  
  689.     } 
  690.  
  691.  
  692.     private string createTime = ""
  693.  
  694.     /// <summary> 
  695.  
  696.     /// 创建时间 
  697.  
  698.     /// </summary> 
  699.  
  700.     public string CreateTime 
  701.  
  702.     { 
  703.  
  704.       get { return createTime; } 
  705.  
  706.       set { createTime = value; } 
  707.  
  708.     } 
  709.  
  710.  
  711.     private string msgType = ""
  712.  
  713.     /// <summary> 
  714.  
  715.     /// 信息类型 地理位置:location,文本消息:text,消息类型:image 
  716.  
  717.     /// </summary> 
  718.  
  719.     public string MsgType 
  720.  
  721.     { 
  722.  
  723.       get { return msgType; } 
  724.  
  725.       set { msgType = value; } 
  726.  
  727.     } 
  728.  
  729.  
  730.     private string content = ""
  731.  
  732.     /// <summary> 
  733.  
  734.     /// 信息内容 
  735.  
  736.     /// </summary> 
  737.  
  738.     public string Content 
  739.  
  740.     { 
  741.  
  742.       get { return content; } 
  743.  
  744.       set { content = value; } 
  745.  
  746.     } 
  747.  
  748.  
  749.     private string location_X = ""
  750.  
  751.     /// <summary> 
  752.  
  753.     /// 地理位置纬度 
  754.  
  755.     /// </summary> 
  756.  
  757.     public string Location_X 
  758.  
  759.     { 
  760.  
  761.       get { return location_X; } 
  762.  
  763.       set { location_X = value; } 
  764.  
  765.     } 
  766.  
  767.  
  768.     private string location_Y = ""
  769.  
  770.     /// <summary> 
  771.  
  772.     /// 地理位置经度 
  773.  
  774.     /// </summary> 
  775.  
  776.     public string Location_Y 
  777.  
  778.     { 
  779.  
  780.       get { return location_Y; } 
  781.  
  782.       set { location_Y = value; } 
  783.  
  784.     } 
  785.  
  786.  
  787.     private string scale = ""
  788.  
  789.     /// <summary> 
  790.  
  791.     /// 地图缩放大小 
  792.  
  793.     /// </summary> 
  794.  
  795.     public string Scale 
  796.  
  797.     { 
  798.  
  799.       get { return scale; } 
  800.  
  801.       set { scale = value; } 
  802.  
  803.     } 
  804.  
  805.  
  806.     private string label = ""
  807.  
  808.     /// <summary> 
  809.  
  810.     /// 地理位置信息 
  811.  
  812.     /// </summary> 
  813.  
  814.     public string Label 
  815.  
  816.     { 
  817.  
  818.       get { return label; } 
  819.  
  820.       set { label = value; } 
  821.  
  822.     } 
  823.  
  824.  
  825.     private string picUrl = ""
  826.  
  827.     /// <summary> 
  828.  
  829.     /// 图片链接,开发者可以用HTTP GET获取 
  830.  
  831.     /// </summary> 
  832.  
  833.     public string PicUrl 
  834.  
  835.     { 
  836.  
  837.       get { return picUrl; } 
  838.  
  839.       set { picUrl = value; } 
  840.  
  841.     } 
  842.  

说明:其中用到的mijiya类,主要是调用数据库进行关键词匹配自动回复内容,可以根据自己的业务情况编写。