• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    C#.net 微信公众账号接口开发

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

    微信接口地址代码:

    weixin _wx = new weixin();
    
            string postStr = "";
    
            if (Request.HttpMethod.ToLower() == "post")
    
            {
    
              Stream s = System.Web.HttpContext.Current.Request.InputStream;
    
              byte[] b = new byte[s.Length];
    
              s.Read(b, 0, (int)s.Length);
    
              postStr = Encoding.UTF8.GetString(b);
    
    
              if (!string.IsNullOrEmpty(postStr)) //请求处理
    
              {
    
                _wx.Handle(postStr); 
    
              }
    
            }
    
            else
    
            {
    
              _wx.Auth();
    
            }
    
    
    微信处理类:
    
    public class weixin
    
      {
    
        private string Token = "weixin_token"; //换成自己的token
    
         
    
        public void Auth()
    
        {
    
          string echoStr = System.Web.HttpContext.Current.Request.QueryString["echoStr"];
    
          if (CheckSignature())
    
          {
    
            if (!string.IsNullOrEmpty(echoStr))
    
            {
    
              System.Web.HttpContext.Current.Response.Write(echoStr);
    
              System.Web.HttpContext.Current.Response.End();
    
            }
    
          }
    
        }
    
    
        public void Handle(string postStr)
    
        {
    
          //封装请求类
    
          XmlDocument doc = new XmlDocument();
    
          doc.LoadXml(postStr);
    
          XmlElement rootElement = doc.DocumentElement;
    
    
          XmlNode MsgType = rootElement.SelectSingleNode("MsgType");
    
    
          RequestXML requestXML = new RequestXML();
    
          requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
    
          requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
    
          requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
    
          requestXML.MsgType = MsgType.InnerText;
    
    
          if (requestXML.MsgType == "text")
    
          {
    
            requestXML.Content = rootElement.SelectSingleNode("Content").InnerText;
    
          }
    
          else if (requestXML.MsgType == "location")
    
          {
    
            requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
    
            requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
    
            requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
    
            requestXML.Label = rootElement.SelectSingleNode("Label").InnerText;
    
          }
    
          else if (requestXML.MsgType == "image")
    
          {
    
            requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
    
          }
    
    
          //回复消息
    
          ResponseMsg(requestXML);
    
        }
    
    
        /// summary>
    
        /// 验证微信签名
    
        /// /summary>
    
        /// * 将token、timestamp、nonce三个参数进行字典序排序
    
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密
    
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
    
        /// returns>/returns>
    
        private bool CheckSignature()
    
        {
    
          string signature = System.Web.HttpContext.Current.Request.QueryString["signature"];
    
          string timestamp = System.Web.HttpContext.Current.Request.QueryString["timestamp"];
    
          string nonce = System.Web.HttpContext.Current.Request.QueryString["nonce"];
    
          string[] ArrTmp = { Token, timestamp, nonce };
    
          Array.Sort(ArrTmp);   //字典排序
    
          string tmpStr = string.Join("", ArrTmp);
    
          tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
    
          tmpStr = tmpStr.ToLower();
    
          if (tmpStr == signature)
    
          {
    
            return true;
    
          }
    
          else
    
          {
    
            return false;
    
          }
    
        }
    
        
    
        /// summary>
    
        /// 回复消息(微信信息返回)
    
        /// /summary>
    
        /// param name="weixinXML">/param>
    
        private void ResponseMsg(RequestXML requestXML)
    
        {
    
          try
    
          {
    
            string resxml = "";
    
            mijiya mi = new mijiya(requestXML.Content,requestXML.FromUserName);
    
    
            if (requestXML.MsgType == "text")
    
            {
    
              //在这里执行一系列操作,从而实现自动回复内容. 
    
              string _reMsg = mi.GetReMsg();
    
              if (mi.msgType == 1)
    
              {
    
                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>";
    
                resxml += mi.GetRePic(requestXML.FromUserName);
    
                resxml += "/Articles>FuncFlag>1/FuncFlag>/xml>";
    
              }
    
              else
    
              {
    
                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>";
    
              }
    
            }
    
            else if (requestXML.MsgType == "location")
    
            {
    
              string city = GetMapInfo(requestXML.Location_X, requestXML.Location_Y);
    
              if (city == "0")
    
              {
    
                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>";
    
              }
    
              else
    
              {
    
                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>";
    
              }
    
            }
    
            else if (requestXML.MsgType == "image")
    
            {
    
              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>";
    
              //返回10以内条
    
              //int size = 10;
    
              //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>";
    
              //Liststring> list = new Liststring>();
    
              ////假如有20条查询的返回结果
    
              //for (int i = 0; i  20; i++)
    
              //{
    
              //  list.Add("1");
    
              //}
    
              //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" };
    
    
              //for (int i = 0; i  size  i  list.Count; i++)
    
              //{
    
              //  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>";
    
              //}
    
              //resxml += "/Articles>FuncFlag>1/FuncFlag>/xml>";
    
            }
    
            else if (wx_tmsg.GetMsgCount(requestXML.FromUserName) == 0)
    
            {
    
              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>";
    
              
    
            }
    
            else
    
            {
    
              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>";
    
              
    
            }
    
            //WriteTxt(resxml);
    
            System.Web.HttpContext.Current.Response.Write(resxml);
    
    
            WriteToDB(requestXML, resxml,mi.pid);
    
          }
    
          catch (Exception ex)
    
          {
    
            //WriteTxt("异常:" + ex.Message + "Struck:" + ex.StackTrace.ToString());
    
            wx_logs.MyInsert("异常:" + ex.Message + "Struck:" + ex.StackTrace.ToString());
    
          }
    
        }
    
         
    
        /// summary>
    
        /// unix时间转换为datetime
    
        /// /summary>
    
        /// param name="timeStamp">/param>
    
        /// returns>/returns>
    
        private DateTime UnixTimeToTime(string timeStamp)
    
        {
    
          DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
    
          long lTime = long.Parse(timeStamp + "0000000");
    
          TimeSpan toNow = new TimeSpan(lTime);
    
          return dtStart.Add(toNow);
    
        }
    
    
        /// summary>
    
        /// datetime转换为unixtime
    
        /// /summary>
    
        /// param name="time">/param>
    
        /// returns>/returns>
    
        private int ConvertDateTimeInt(System.DateTime time)
    
        {
    
          System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
    
          return (int)(time - startTime).TotalSeconds;
    
        }
    
    
        /// summary>
    
        /// 调用百度地图,返回坐标信息
    
        /// /summary>
    
        /// param name="y">经度/param>
    
        /// param name="x">纬度/param>
    
        /// returns>/returns>
    
        public string GetMapInfo(string x, string y)
    
        {
    
          try
    
          {
    
            string res = string.Empty;
    
            string parame = string.Empty;
    
            string url = "http://maps.googleapis.com/maps/api/geocode/xml";
    
            parame = "latlng=" + x + "," + y + "language=zh-CNsensor=false";//此key为个人申请
    
            res = webRequestPost(url, parame);
    
    
            XmlDocument doc = new XmlDocument();
    
    
            doc.LoadXml(res);
    
            XmlElement rootElement = doc.DocumentElement;
    
            string Status = rootElement.SelectSingleNode("status").InnerText;
    
            if (Status == "OK")
    
            {
    
              //仅获取城市
    
              XmlNodeList xmlResults = rootElement.SelectSingleNode("/GeocodeResponse").ChildNodes;
    
              for (int i = 0; i  xmlResults.Count; i++)
    
              {
    
                XmlNode childNode = xmlResults[i];
    
                if (childNode.Name == "status")
    
                {
    
                  continue;
    
                }
    
    
                string city = "0";
    
                for (int w = 0; w  childNode.ChildNodes.Count; w++)
    
                {
    
                  for (int q = 0; q  childNode.ChildNodes[w].ChildNodes.Count; q++)
    
                  {
    
                    XmlNode childeTwo = childNode.ChildNodes[w].ChildNodes[q];
    
    
                    if (childeTwo.Name == "long_name")
    
                    {
    
                      city = childeTwo.InnerText;
    
                    }
    
                    else if (childeTwo.InnerText == "locality")
    
                    {
    
                      return city;
    
                    }
    
                  }
    
                }
    
                return city;
    
              }
    
            }
    
          }
    
          catch (Exception ex)
    
          {
    
            //WriteTxt("map异常:" + ex.Message.ToString() + "Struck:" + ex.StackTrace.ToString());
    
            return "0";
    
          }
    
    
          return "0";
    
        }
    
    
        /// summary>
    
        /// Post 提交调用抓取
    
        /// /summary>
    
        /// param name="url">提交地址/param>
    
        /// param name="param">参数/param>
    
        /// returns>string/returns>
    
        public string webRequestPost(string url, string param)
    
        {
    
          byte[] bs = System.Text.Encoding.UTF8.GetBytes(param);
    
    
          HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url + "?" + param);
    
          req.Method = "Post";
    
          req.Timeout = 120 * 1000;
    
          req.ContentType = "application/x-www-form-urlencoded;";
    
          req.ContentLength = bs.Length;
    
    
          using (Stream reqStream = req.GetRequestStream())
    
          {
    
            reqStream.Write(bs, 0, bs.Length);
    
            reqStream.Flush();
    
          }
    
          using (WebResponse wr = req.GetResponse())
    
          {
    
            //在这里对接收到的页面内容进行处理 
    
    
            Stream strm = wr.GetResponseStream();
    
    
            StreamReader sr = new StreamReader(strm, System.Text.Encoding.UTF8);
    
    
            string line;
    
    
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
    
            while ((line = sr.ReadLine()) != null)
    
            {
    
              sb.Append(line + System.Environment.NewLine);
    
            }
    
            sr.Close();
    
            strm.Close();
    
            return sb.ToString();
    
          }
    
        }
    
    
        private void WriteToDB(RequestXML requestXML,string _xml,int _pid)
    
        {
    
          wx_tmsg wx = new wx_tmsg();
    
          wx.AddNew();
    
          wx.FromUserName = requestXML.FromUserName;
    
          wx.ToUserName = requestXML.ToUserName;
    
          wx.MsgType = requestXML.MsgType;
    
          wx.Msg = requestXML.Content;
    
          wx.Creatime = requestXML.CreateTime;
    
          wx.Location_X = requestXML.Location_X;
    
          wx.Location_Y = requestXML.Location_Y;
    
          wx.Label = requestXML.Label;
    
          wx.Scale = requestXML.Scale;
    
          wx.PicUrl = requestXML.PicUrl;
    
          wx.reply = _xml;
    
          wx.pid = _pid;
    
          try
    
          {
    
            wx.Update();
    
          }
    
          catch (Exception ex)
    
          {
    
            wx_logs.MyInsert(ex.Message);
    
            //ex.message;
    
          }
    
    
        }
    
      }
    
    
      //微信请求类
    
      public class RequestXML
    
      {
    
        private string toUserName="";
    
        /// summary>
    
        /// 消息接收方微信号,一般为公众平台账号微信号
    
        /// /summary>
    
        public string ToUserName
    
        {
    
          get { return toUserName; }
    
          set { toUserName = value; }
    
        }
    
    
        private string fromUserName = "";
    
        /// summary>
    
        /// 消息发送方微信号
    
        /// /summary>
    
        public string FromUserName
    
        {
    
          get { return fromUserName; }
    
          set { fromUserName = value; }
    
        }
    
    
        private string createTime = "";
    
        /// summary>
    
        /// 创建时间
    
        /// /summary>
    
        public string CreateTime
    
        {
    
          get { return createTime; }
    
          set { createTime = value; }
    
        }
    
    
        private string msgType = "";
    
        /// summary>
    
        /// 信息类型 地理位置:location,文本消息:text,消息类型:image
    
        /// /summary>
    
        public string MsgType
    
        {
    
          get { return msgType; }
    
          set { msgType = value; }
    
        }
    
    
        private string content = "";
    
        /// summary>
    
        /// 信息内容
    
        /// /summary>
    
        public string Content
    
        {
    
          get { return content; }
    
          set { content = value; }
    
        }
    
    
        private string location_X = "";
    
        /// summary>
    
        /// 地理位置纬度
    
        /// /summary>
    
        public string Location_X
    
        {
    
          get { return location_X; }
    
          set { location_X = value; }
    
        }
    
    
        private string location_Y = "";
    
        /// summary>
    
        /// 地理位置经度
    
        /// /summary>
    
        public string Location_Y
    
        {
    
          get { return location_Y; }
    
          set { location_Y = value; }
    
        }
    
    
        private string scale = "";
    
        /// summary>
    
        /// 地图缩放大小
    
        /// /summary>
    
        public string Scale
    
        {
    
          get { return scale; }
    
          set { scale = value; }
    
        }
    
    
        private string label = "";
    
        /// summary>
    
        /// 地理位置信息
    
        /// /summary>
    
        public string Label
    
        {
    
          get { return label; }
    
          set { label = value; }
    
        }
    
    
        private string picUrl = "";
    
        /// summary>
    
        /// 图片链接,开发者可以用HTTP GET获取
    
        /// /summary>
    
        public string PicUrl
    
        {
    
          get { return picUrl; }
    
          set { picUrl = value; }
    
        }
    
    }

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

    您可能感兴趣的文章:
    • C#微信小程序服务端获取用户解密信息实例代码
    • C#微信开发之获取接口调用凭据
    • C#微信公众平台开发之access_token的获取存储与更新
    • C#微信公众号开发之接收事件推送与消息排重的方法
    • C#开发微信公众号接口开发
    • C#微信公众平台开发之高级群发接口
    • c#封装百度web服务geocoding api 、百度坐标转换示例
    • C#实现百度ping推送功能的方法
    • 如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
    • C#实现百度网站收录和排名查询功能思路及实例
    • C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法
    • C#实现微信结合百度api获取当前用户地理位置的方法
    上一篇:ASP.NET 2.0中的数据操作之九:跨页面的主/从报表
    下一篇:Visual Studio 2013更新内容简介
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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