千家信息网

.net如何开发微信公众平台

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了".net如何开发微信公众平台",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下".net如何开发微信公众平台"这篇文章吧。公众平台信息
千家信息网最后更新 2024年11月11日.net如何开发微信公众平台

这篇文章主要为大家展示了".net如何开发微信公众平台",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下".net如何开发微信公众平台"这篇文章吧。

公众平台信息http://www.php.cn/code/11829.html" target="_blank">接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个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();            }        }}

/// /// 验证微信签名/// /// 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;}/// /// 获取post返回来的数据/// /// 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);}/// ///返回微信信息结果/// /// 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 += "" + ConvertDateTimeInt(DateTime.Now) + "";                if (!string.IsNullOrEmpty(model.Content))//如果接收到消息                {                    if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好                    {                        resxml += "0";                    }                 }                 else//没有接收到消息                {                 resxml += "0";                }                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 += "                                        " + ConvertDateTimeInt(DateTime.Now) + "                    1                    <![CDATA[欢迎您的光临!]]>                    0";                    Response.Write(resxml);                        }                        else//如果是其余的消息类型                        {                            var model = new                            {                                ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,                                FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,                                CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,                            };                         resxml += "                                                  " + ConvertDateTimeInt(DateTime.Now) + "                                                                           0";                           Response.Write(resxml);                            }                        }                        catch (Exception ex)                        {                            throw ex;                        }                        Response.End();                }/// /// datetime转换成unixtime/// /// /// private int ConvertDateTimeInt(System.DateTime time){        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));        return (int)(time - startTime).TotalSeconds;}/// /// 写日志(用于跟踪),可以将想打印出的内容计入一个文本文件里面,便于测试/// 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如何开发微信公众平台"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0