微信公众平台接口,asp.net实现

原文:微信公众平台接口,asp.net实现

我为自己的笑话网开发了一个微信公众平台的接口,在这里分享给大家,希望能对朋友们有帮助,如果有什么地方写的不好,好请大家指点!

首先是要进行认证,认证的时候,只需要在Page_Load事件里面单独去执行 认证的方法就可以了,具体代码见下面的RenZheng()

认证通过之后就可以对网友的消息进行处理,可以根据微信平台推送过来的数据进行分析!我相信大家在看到这篇文章的时候,在此之前肯定对平台都有所了解了,所以,废话不多说,直接上代码! 如果有什么疑问的欢迎加群:242384606 进行讨论!

    protected void Page_Load(object sender, EventArgs e)
        {
            wxmessage wx = GetWxMessage();
            string res = "";
            //新用户添加
            if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "subscribe")
            {
                string content = "";
                content = "/:rose欢迎关注52冷笑话/:rose\n看笑话请直接回复“x”\n无聊时候还可以找我聊聊天哦!";
                res = sendTextMessage(wx, content);
            }
            else
            {
                bool sendJoke = false;
                //看笑话
                List<string> xhList = new List<string>() { "x", "笑话", "笑話" };
                foreach (string item in xhList)
                {
                    if (wx.Content.Trim().ToLower().Contains(item))
                    {
                        sendJoke = true;
                        break;
                    }
                }
                if (sendJoke)
                {
                    JokeDemo joke = GetJoke(wx.FromUserName);
                    if (string.IsNullOrEmpty(joke.Img))
                    {
                        string title = string.Format("编号{0}:{1}\n-----------------\n", joke.ID, joke.Title);
                        string content = joke.Content;
                        if (content.Length > 300)
                        {
                            content = GetSubString(content, 300) + "\n-----------------\n点击连接阅读全文:URL"

                        }
                        res = sendTextMessage(wx, title + content);
                    }
                    else
                    {
                        res = sendPictureMessage(wx, joke);
                    }
                }
                //智能学聊天
                if (res == "" && Regex.IsMatch(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase))
                {
                    string content = "";
                    string key = Regex.Match(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase).Groups[2].Value.Trim();
                    int startIndex = wx.Content.IndexOf("答:") + 2;
                    if (startIndex < 3)
                    {
                        startIndex = wx.Content.IndexOf("答:") + 2;
                    }
                    string rep = wx.Content.Substring(startIndex, wx.Content.Length - startIndex).Trim();

            // Regex.Match(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase).Groups[4].Value;
                    if ((new ChatBLL()).isExists(key))
                    {
                        content = "/::)O啦!学会啦\n不信你问问!";
                    }
                    else
                    {
                        if ((new ChatBLL()).Add(key, rep) > 0)
                        {
                            content = "好啦,这个问题我学会啦!\n你现在提问我吧!/::P";
                        }
                        else
                        {
                            content = "糟糕了,系统出了点儿小意外!\n麻烦你再试一次!";
                        }
                    }
                    res = sendTextMessage(wx, content);
                }
                //未知情况
                if (res == "")
                {
                    string content = (new ChatBLL()).GetReplyByKey(wx.Content.Trim());
                    if (content == "")
                    {
                        content = "/:,@-D啊哦,你在说什么?\n你可以按照下面的格式告诉我:\n问:你说的话 答:你想让我说什么\n看笑话请直接回复“x”!";
                    }
                    res = sendTextMessage(wx, content);
                }
            }
            Response.Write(res);
        }

        /// <summary>
        /// 发送文字消息
        /// </summary>
        /// <param name="wx">获取的收发者信息</param>
        /// <param name="content">笑话内容</param>
        /// <returns></returns>
        private string sendTextMessage(wxmessage wx, string content)
        {
            string res = string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>0</FuncFlag></xml> ",
                wx.FromUserName, wx.ToUserName, DateTime.Now, 内容);
            return res;
        }

        /// <summary>
        /// 发送图文消息
        /// </summary>
        /// <param name="wx">获取的收发者信息</param>
        /// <param name="joke">笑话信息</param>
        /// <returns></returns>
        private string sendPictureMessage(wxmessage wx, JokeDemo joke)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("<xml><ToUserName><![CDATA[{0}]]></ToUserName>", wx.FromUserName);
            sb.AppendFormat("<FromUserName><![CDATA[{0}]]></FromUserName>", wx.ToUserName);
            sb.AppendFormat("<CreateTime>{0}</CreateTime>", DateTime.Now);
            sb.AppendFormat("<MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content>");
            sb.AppendFormat("<ArticleCount>1</ArticleCount>");
            sb.AppendFormat("<Articles><item>");
            sb.AppendFormat("<Title><![CDATA[{0}]]></Title>", 标题);
            sb.AppendFormat("<Description><![CDATA[{0}]]></Description>", 说明文字);
            sb.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl>", 图片地址);
            sb.AppendFormat("<Url><![CDATA[{0}]]></Url>", 连接地址);
            sb.AppendFormat("</item></Articles><FuncFlag>0</FuncFlag></xml>");
            return sb.ToString();
        }

        /// <summary>
        /// 获取请求过来的微信信息
        /// </summary>
        /// <returns></returns>
        private wxmessage GetWxMessage()
        {
            wxmessage wx = new wxmessage();
            StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8);
            XmlDocument xml = new XmlDocument();
            xml.Load(str);
            wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText;
            wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText;
            wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText;
            if (wx.MsgType.Trim() == "text")
            {
                wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText;
            }
            if (wx.MsgType.Trim() == "event")
            {
                wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText;
            }
            return wx;
        }

        /// <summary>
        /// 微信认证
        /// </summary>
        private void RenZheng()
        {
            #region 微信认证
            //string res = "";
            //string token = "52lxh";
            //string signature = Request["signature"];
            //string timestamp = Request["timestamp"];
            //string nonce = Request["nonce"];
            //string echostr = Request["echostr"];
            //if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(echostr))
            //{
            //    using (StreamWriter sw = new StreamWriter(Server.MapPath("wx.txt")))
            //    {
            //        sw.Write("参数错误" + Request.Url);
            //    }
            //}
            //else
            //{
            //    ArrayList arr = new ArrayList() { token, timestamp, nonce };
            //    arr.Sort();
            //    string signature1 = GetSHA1(arr[0].ToString() + arr[1].ToString() + arr[2].ToString());
            //    if (signature == signature1.ToLower())
            //    {
            //        res = echostr;
            //    }
            //    else
            //    {
            //        res = "error";
            //    }

            //    Response.Write(res);
            //}
            #endregion
        }

        /// <summary>
        /// 加密字符串
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        private string GetSHA1(string password)
        {
            string shh1string = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");
            return shh1string;
        }

        /// <summary>
        /// 截取字符串
        /// </summary>
        /// <param name="content"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        private string GetSubString(string content, int length)
        {
            if (content.Length >= length)
            {
                return content.Substring(0, length);
            }
            else
            {
                return content;
            }
        }

        //自定义一个微信消息实体类
        class wxmessage
        {
            public string FromUserName { get; set; }
            public string ToUserName { get; set; }
            public string MsgType { get; set; }
            public string EventName { get; set; }
            public string Content { get; set; }
        }

52冷笑话官网:http://www.52lxh.com 随时欢迎您!

欢迎关注52冷笑话微信看笑话!

时间: 2024-11-02 18:11:09

微信公众平台接口,asp.net实现的相关文章

易伟微信公众平台接口傻瓜教程

易伟微信公众平台接口傻瓜教程部分内容:微信接口9超链接.rmvb微信接口8音乐信息.rmvb微信接口7图文信息.rmvb微信接口6关注回复.rmvb微信接口5关键词回复.rmvb微信接口50连闯三关.rmvb微信接口4接口验证.rmvb微信接口49简答题.rmvb微信接口48正则表达式.rmvb微信接口47 微信5.0后变化..rmvb微信接口46自定义菜单.rmvb...微信接口3编辑模式.rmvb微信接口2官方代码.rmvb微信接口1账号注册.rmvb微信接口10图片回复.rmvb 下载地址

解决微信公众平台接口配置信息配置失败问题

填写好URL及TOKEN后,点“提交”时,总是提示“配置失败”或其他错误 确认URL指向的后台页面代码没有问题 确认TOKEN配置没有问题 这时请察看一下你的INDEX页面的编码格式,改成GB2312试试吧,也许会令你的问题迎刃而解. 谨以此文献给浮躁的自己. 解决微信公众平台接口配置信息配置失败问题,布布扣,bubuko.com

微信公众平台接口教程:获取用户发送的地理位置xml

微信公众平台接口获取用户发送的地理位置xml 实现的功能就是,当用户向我的公众平台发送一个当前位置,我要在卫星API中获取这个位置的经度纬度(x,y)然后通过这个经纬度接百度地图接口查询这个位置附近的饭店有哪些. 说白了,就是食神摇摇的那个功能.先贴上,用户向公众平台发送的位置的xml 1 <xml> 2 <ToUserName><![CDATA[toUser]]></ToUserName> 3 <FromUserName><![CDATA

微信公众平台接口报警功能 响应出问题随时发现

这段时间网络攻击还是很频繁,ddos会导致你的服务器宕机,连接微信公众平台的服务器和接口响应出现问题那就不足为奇了,如何第一时间发现问题呢?微信团队为你想到了,发布公众平台更新,为开发者提供接口报警功能.以下是官方公告 公众平台更新,为开发者提供接口报警功能 为了帮助开发者在自身服务器和接口响应出现问题时,尽快发现问题,公众平台推出了接口报警功能. 接口报警在登录公众平台后的开发者中心内设置,通过微信来接收报警. 微信团队 2014年07月18日 微信公众平台接口报警功能 响应出问题随时发现

微信公众平台接口开发(全面认识接口)

微信公众平台接口的整体介绍 接口API的定义 不同功能层之间的通个信规则称为接口API 微信接口请求返回格式介绍: 微信接口是通过GET方法请求的,如: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

微信公众平台接口申请 和 开发文档

http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login       微信公众平台测试接口申请 http://mp.weixin.qq.com/wiki/home/index.html    微信公众平台开发者文档

java调用微信公众平台接口

微信公众平台 这两天在网上看了其他的方法,也调试了一些,然后自己整理了一下,方便自己学习,也方便大家使用. 调用接口 1.java调用上传图片接口 public final static String IMAGE = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"; public static String uploadimg(MultipartFile file ) { Clo

微信公众平台开发ASP.NET版接口

一.初级登录接口 1.获取微信用户信息,使用微信账户登录,获取微信客户的头像.昵称 附一:微信官方开发文档 http://mp.weixin.qq.com/wiki/home/index.html 附二:网上看到别人说的一些参考案例.资料,因为微信接口更新较为频繁,估计大部分资料已经比较老旧了 http://download.csdn.net/detail/jason_dct/5812805#comment http://blog.csdn.net/keke453042926/article/d

微信公众平台接口,修改分享文案、图片等(前端js部分)

第一步:引入微信官方js文件 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 第二步:通过config接口注入权限验证配置 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,