• 微信公众平台开发者模式自动回复功能与自定义菜单


    微信开发者模式自动回复功能

    1.提取POST来的数据中的信息

    2.判断微信客户端发来的信息内容(以文本信息为例)

    3.根据信息内容进行处理

    4.把处理结果以XML的形式返回给微信服务器

    5.微信服务器反馈内容给微信客户端

    1.获取用户发来的文本信息的内容

    private void ExtractPostData() /*** 提取POST来的数据中的信息 ***/
    {
    Stream s = HttpContext.Current.Request.InputStream; //读取post来的数据流
    byte[] b = new byte[s.Length]; //定义一个和post来的数据流长度一致的空数组
    s.Read(b, 0, (int)s.Length); //把这个数据流存入数组
    string postStr = Encoding.UTF8.GetString(b); //把数组转换成字符串
    XmlDocument doc = new XmlDocument(); //System.Xml中的类,用于对XML文档操作
    doc.LoadXml(postStr); //加载字符串(文本)
    XmlNodeList list = doc.GetElementsByTagName("xml"); //返回标签名为“xml”的所有节点,返回的是数组
    XmlNode xn = list[0]; //获得第一个标签名为“xml”的节点,注意类为XmlNode,这里实际是获得“根”
    ToUserName = xn.SelectSingleNode("//FromUserName").InnerText; //在“根”下找标签为“FromUserName”的节点,并靠.InnerText获得这个标签里面的文本
    MsgType = xn.SelectSingleNode("//MsgType").InnerText; //获得用户发来的信息是什么类型:text,image,location,link,event等
    if (MsgType == "text")
    {
    Content = xn.SelectSingleNode("//Content").InnerText;//获取用户发来的文本消息的内容
    }
    }
    

      

    2.对接收到的文本信息内容进行处理

    string ReMess = "";//用来存储回复给用户的内容
    
    private string ToUserName = null; //用户账号
    
    private string MsgType = null; //接收到的信息类型
    
     
    
    private string Content = null; //回复给用户的内容
    
    if (MsgType == "text")//如果用户发来的是文本信息
    {
    if (Content == "ABC" || Content == "abc")//Content就是用户发给公众号的信息
    {
    ReMess = "123";//回复给用户的消息 
    }
    else
    {
    ReMess = "你好,我的功能还很有限,只是测试程序。
    其他服务正在建设中...";//回复给用户的消息 
    }
    //ReMess = this.ResText(ToUserName, ReMess);//这里ReMess兼做存储XML格式字符串
    }
    responseMsg(ReMess);
    

      

    3.把处理结果以XML的形式返回给微信服务器

    private void responseMsg(string Content)
    {
    string strresponse = "<xml>";
    strresponse = strresponse + "<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>";//回复给谁
    strresponse = strresponse + "<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>";//是开发者回复
    strresponse = strresponse + "<CreateTime>" + DateTime.Now.Ticks.ToString() + "</CreateTime>";//消息创建时间
    strresponse = strresponse + "<MsgType><![CDATA[text]]></MsgType>";//消息类型为“文本”
    strresponse = strresponse + "<Content><![CDATA[" + Content + "]]></Content>";//回复的消息内容
    strresponse = strresponse + "<FuncFlag>0<FuncFlag>";
    strresponse = strresponse + "</xml>";
    Response.Write(strresponse);
    Response.End();
    }
    

      

    —————————————————————————————————————————————————————————————————————————————

    微信开发者模式自定义菜单

    1.创建自定义菜单

    private void CreateMenu() 
    {
    string weixin1 = "";
    weixin1 = @" { 
    ""button"":[ 
    { 
    ""type"":""click"", 
    ""name"":""你好!"", 
    ""key"":""Hello"" 
    }, 
    { 
    ""type"":""view"", 
    ""name"":""公司简介"", 
    ""url"":""http://www.baidu.com" 
    }, 
    { 
    ""name"":""产品介绍"", 
    ""sub_button"":[ 
    { 
    ""type"":""click"", 
    ""name"":""产品1"", 
    ""key"":""P1"" 
    }, 
    { 
    ""type"":""click"", 
    ""name"":""产品2"", 
    ""key"":""P2"" 
    }] 
    }] 
    } 
    ";
    
    string i = GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + "    填入access_token", weixin1);
    Response.Write(i);
    }
    

      

    2.翻译自定义菜单

    public string GetPage(string posturl, string postData)
    {
    Stream outstream = null;
    Stream instream = null;
    StreamReader sr = null;
    HttpWebResponse response = null;
    HttpWebRequest request = null;
    Encoding encoding = Encoding.UTF8;
    byte[] data = encoding.GetBytes(postData);
    // 准备请求... 
    try
    {
    // 设置参数 
    request = WebRequest.Create(posturl) as HttpWebRequest;
    CookieContainer cookieContainer = new CookieContainer();
    request.CookieContainer = cookieContainer;
    request.AllowAutoRedirect = true;
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    outstream = request.GetRequestStream();
    outstream.Write(data, 0, data.Length);
    outstream.Close();
    //发送请求并获取相应回应数据 
    response = request.GetResponse() as HttpWebResponse;
    //直到request.GetResponse()程序才开始向目标网页发送Post请求 
    instream = response.GetResponseStream();
    sr = new StreamReader(instream, encoding);
    //返回结果网页(html)代码 
    string content = sr.ReadToEnd();
    string err = string.Empty;
    return content;
    }
    catch (Exception ex)
    {
    string err = ex.Message;
    Response.Write(err);
    return string.Empty;
    }
    }
    

      

    总结一下,今天收获还是蛮大的

    1.搞定了自动回复功能。

    2.创建了简单的自定义菜单。

    3.知道了发布后的*.dll文件要放在服务器根目录的bin文件夹里面。

    4.学会了断点调试。

    何总下午开了个会,对微信开发小组接下来的工作提出了具体的要求,要求在规定时间内做出一个简单的BBS网站并放在菜单栏中使用,还有实现定位打卡功能。身为小组组长,瞬间感到压力挺大,不过有压力才会有动力,先把时间和工作安排好,一步一步来。

  • 相关阅读:
    使用pca/lda降维
    交叉验证
    各模型选择及工作流程
    岭回归
    线性回归
    K-临近算法(KNN)
    django中的中间件
    django中form组件
    javascript中的词法分析
    Django之Model操作
  • 原文地址:https://www.cnblogs.com/jishaoyi/p/3866646.html
Copyright © 2020-2023  润新知