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

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

    本文实例讲述了.net开发微信公众平台的方法。分享给大家供大家参考。具体实现方法如下:

    一、说明:

    公众平台信息接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个URL和一个Token,这两项信息也需要你拥有自己的服务器(外网服务器)资源,其中的Token可由开发者任意填写,URL即是接口配置信息的链接地址,在本文中我采用的是创建一个简易网站的方式,在其中的一个页面的后台程序中配置相关的接口信息,然后发布到外网服务器上,最后可以访问到这个页面的链接地址即是这里应该填写的URL。

    二、接口配置过程:

    1.网址接入-校验签名:

    复制代码 代码如下:
    const string Token = "aka";//定义一个局部变量不可以被修改,这里定义的变量要与接口配置信息中填写的Token一致
    protected void Page_Load(object sender, EventArgs e)
    {
            string postStr = "";
            Valid();//校验签名,当填入的信息提交之后页面有提示“你已成功成为公众平台开发者,可以使用公众平台的开发功能”这个的时候,接下来你就需要注释掉这个校验的方法,使得后面的消息回复得以正常运作
            if (Request.HttpMethod.ToLower() == "post")//当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上
            {
                postStr = PostInput();
                if (string.IsNullOrEmpty(postStr) == false)
                {
                    //WriteLog(postStr,Server);//计入日记
                    ResponseMsg(postStr);
                }
            }
    }
    private void Valid()
    {
            string echoStr = Request.QueryString["echoStr"].ToString();
            if (CheckSignature())
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    Response.Write(echoStr);
                    Response.End();
                }
            }
    }

    复制代码 代码如下:
    /// summary>
    /// 验证微信签名
    /// /summary>
    /// returns>/returns>
    private bool CheckSignature()
    {
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);//字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//对该字符串进行sha1加密
            tmpStr = tmpStr.ToLower();//对字符串中的字母部分进行小写转换,非字母字符不作处理
            //WriteLog(tmpStr, Server);//计入日志
            if (tmpStr == signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
            {
                return true;
            }
            else
                return false;
    }

    /// summary>
    /// 获取post返回来的数据
    /// /summary>
    /// returns>/returns>
    private string PostInput()
    {
            Stream s = System.Web.HttpContext.Current.Request.InputStream;
            byte[] b = new byte[s.Length];
            s.Read(b, 0, (int)s.Length);
            return Encoding.UTF8.GetString(b);
    }

    /// summary>
    ///返回微信信息结果
    /// /summary>
    /// param name="weixinXML">/param>
    private void ResponseMsg(string weixinXML)
    {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(weixinXML);//读取XML字符串
                XmlElement rootElement = doc.DocumentElement;

                XmlNode MsgType = rootElement.SelectSingleNode("MsgType");//获取字符串中的消息类型

                string resxml = "";
                if (MsgType.InnerText == "text")//如果消息类型为文本消息
                {
                    var model = new
                    {
                        ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                        FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                        CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                        MsgType = MsgType.InnerText,
                        Content = rootElement.SelectSingleNode("Content").InnerText,
                        MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                    };
                    resxml += "xml>ToUserName>![CDATA[" + model.FromUserName + "]]>/ToUserName>FromUserName>![CDATA[" + model.ToUserName + "]]>/FromUserName>CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "/CreateTime>";
                    if (!string.IsNullOrEmpty(model.Content))//如果接收到消息
                    {
                        if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好
                        {
                            resxml += "MsgType>![CDATA[text]]>/MsgType>Content>![CDATA[你好,有事请留言,偶会及时回复你的。]]>/Content>FuncFlag>0/FuncFlag>/xml>";
                        }

                     }

                     else//没有接收到消息
                    {
                        resxml += "MsgType>![CDATA[text]]>/MsgType>Content>![CDATA[亲,感谢您对我的关注,有事请留言。]]>/Content>FuncFlag>0/FuncFlag>/xml>";
                    }

                    Response.Write(resxml);
                }
                if (MsgType.InnerText == "image")//如果消息类型为图片消息
                {
                    var model = new
                    {
                        ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                        FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                        CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                        MsgType = MsgType.InnerText,
                        PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText,
                        MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                    };
                    resxml += "xml>ToUserName>![CDATA[" + model.FromUserName + "]]>/ToUserName>FromUserName>![CDATA[" + model.ToUserName + "]]>/FromUserName>CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "/CreateTime>MsgType>![CDATA[news]]>/MsgType>ArticleCount>1/ArticleCount>Articles>item>Title>![CDATA[欢迎您的光临!]]>/Title>Description>![CDATA[非常感谢您的关注!]]>/Description>PicUrl>![CDATA[http://...jpg]]>/PicUrl>Url>![CDATA[http://www.baidu.com/]]>/Url>/item>/Articles>FuncFlag>0/FuncFlag>/xml>";
                    Response.Write(resxml);
                }
                else//如果是其余的消息类型
                {
                    var model = new
                    {
                        ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                        FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                        CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                    };
                    resxml += "xml>ToUserName>![CDATA[" + model.FromUserName + "]]>/ToUserName>FromUserName>![CDATA[" + model.ToUserName + "]]>/FromUserName>CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "/CreateTime>MsgType>![CDATA[text]]>/MsgType>Content>![CDATA[亲,感谢您对我的关注,有事请留言,我会及时回复你的哦。]]>/Content>FuncFlag>0/FuncFlag>/xml>";
                    Response.Write(resxml);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            Response.End();

    }
    /// 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>
    public static void WriteLog(string strMemo, HttpServerUtility server)
    {
            string filename = server.MapPath("/logs/log.txt");//在网站项目中建立一个文件夹命名logs(然后在文件夹中随便建立一个web页面文件,避免网站在发布到服务器之后看不到预定文件)
            if (!Directory.Exists(server.MapPath("//logs//")))
                Directory.CreateDirectory("//logs//");
            StreamWriter sr = null;
            try
            {
                if (!File.Exists(filename))
                {
                    sr = File.CreateText(filename);
                }
                else
                {
                    sr = File.AppendText(filename);
                }
                sr.WriteLine(strMemo);
            }
            catch
            {
            }
            finally
            {
                if (sr != null)
                    sr.Close();
            }
    }

    希望本文所述对大家的.net程序设计有所帮助。

    您可能感兴趣的文章:
    • 微信小程序 获取微信OpenId详解及实例代码
    • MVC微信网页授权获取用户OpenId
    • PHP通过微信跳转的Code参数获取用户的openid(关键代码)
    • 微信公众号支付(一)如何获取用户openId
    • 微信公众平台实现获取用户OpenID的方法
    • .net实现微信公众账号接口开发实例代码
    • asp.net微信开发(永久素材管理)
    • asp.net开发微信公众平台之获取用户消息并处理
    • asp.net微信开发(开发者接入)
    • .NET微信公众号获取OpenID和用户信息
    上一篇:asp.net导出excel数据的常见方法汇总
    下一篇:进度条在.net导入Excel时的应用实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    .net开发微信公众平台实例教程 .net,开发,微信,公众,平台,