asp.net微信开发(自定义会话管理)
网络编程 2021-07-04 22:41www.168986.cn编程入门
这篇文章主要介绍了asp.微信开发中有关自定义会话管理的相关内容,需要的朋友可以参考下
和微信用户的沟通少不了,总觉得看起来微信官网后台管理中的会话回复消息有点呆板,所以我这里就自定义了一个会话管理功能,最终效果图如下
因为我试使用富文本文件CKEDITOR来进行编写,你看到稳中可能会有<P></p>字段,后台获取数据内容时,替换为空字符即可如下
string txtcontent = this.txtMessage.Value.ToString().Replace("<p>", ""); StringBuilder sb = new StringBuilder(); sb.Append(txtcontent.Replace("</p>\r\n", ""));
在我个人理解,做会话管理,无非就是将用户对话信息(用户发过来的数据,发给用户的数据)存入数据库,根据用户的数据时间和回复用户数据的时间来和当天系统的时间做对比,如果大于多少分钟或者多少个小时就不可以再主动和用户对话,就算我这里是根据微信官网48小时来进行限制的,超过48小时禁用控件,如下图
废话少说,上代码需要用到的两个类,数据库也要创建和类相同的名字(至少我试这么做的)
/// <summary> /// 微信会话记录类,用户存储会话记录列表 /// </summary> public class WeixinKeFuInfo { public int UId { get; set; }//编号 public string UserOpenId { get; set; }//用户的OpenID public string UserContent { get; set; }//用户内容 public string CreaterDate { get; set; }//创建时间 } /// <summary> /// 与微信用户会话的消息记录类 /// </summary> public class WxMessageInfo { public int msgId { get; set; }//消息ID public string FromUser { get; set; }//发送用户 public string ToUser { get; set; }//接收用户 public string Content { get; set; }//发送内容 public string FaSongDate { get; set; }//发送时间 public string UId { get; set; }//会话用户的UId,微信会话记录类外键 } /// <summary> /// 发送文本。。。。。。。。。。。。。还记得这个方法吗?就是根据用户发送过来的消息类型进行判断后,如果是文本就回复发送此方法内的内容 /// </summary> /// <param name="requestXML"></param> private void SendTextCase(RequestXML requestXML) { WeixinKeFuService wkfs = new WeixinKeFuService();//自己写的服务类 //根据openId查询数据库会话记录是否存在 WeixinKeFuInfo wkfinfoinfo = wkfs.GetWeixinKeFuInfoByOpenId(requestXML.FromUserName.ToString()); if (wkfinfoinfo != null) { //如果存在直接保存消息记录 WxMessageService wms = new WxMessageService(); WxMessageInfo wminfo = new WxMessageInfo(); wminfo.FromUser = requestXML.FromUserName.ToString(); wminfo.ToUser = "我"; wminfo.Content = requestXML.Content.ToString(); wminfo.FaSongDate = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); wminfo.UId = wkfinfoinfo.UId.ToString(); wms.AddWxMessageInfo(wminfo); } else { //如果不存在新建会话记录 WeixinKeFuInfo wkfinfo = new WeixinKeFuInfo(); wkfinfo.UserOpenId = requestXML.FromUserName.ToString(); wkfinfo.UserContent = requestXML.Content.ToString(); wkfinfo.CreaterDate = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); wkfs.AddWeixinKeFuInfo(wkfinfo); string responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "正在接入.请稍候....."); HttpContext.Current.Response.ContentType = "text/xml"; HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(responseContent); HttpContext.Current.Response.End(); } }
以上代码实现了数据库的插入,那么取出来,显示的页面,核心代码WeiXinSessionList.aspx,前台代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeiXinSessionList.aspx.cs" Inherits="DQWebSite.Administrator.WeiXinSessionList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://.w3./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://.w3./1999/xhtml"> <head id="Head1" runat="server"> <title></title> <meta http-equiv="refresh" content="60; url=WeiXinSessionList.aspx" /> <link href="css/style.css" rel="Stylesheet" type="text/css" /> <style type="text/css"> .tablestyle { width:1124px; margin:10px auto 10px auto; border:1px solid #ecd9df; text-align:center; } th { height:35px;background-image:url('images/th.gif'); background-repeat:repeat-x; } tr { height:30px; } td { border-left:1px dotted #a7b5bc; } .trcolor { background-color:#ecd9df; } tr:hover { cursor:pointer; } #FenPage { width:1124px; height:25px; line-height:25px; text-align:center; margin:20px auto 20px auto; } .linka { color:#0094ff; cursor:pointer; } .fenyebtn {width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px; float:right; } .fenyebtn2 { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right; } .toPageIndex { width:60px;height:25px; background-image:url('images/inputbg.gif'); margin-left:10px; background-repeat:repeat-x;border-:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; text-align:center; float:right; } .gotoPagebtn { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right; background-color:#ced9df; } .deletebtn {float:left;width:100px; color:#000; height:25px; background-color:#ced9df; border:1px solid #ced9df; border-radius:5px; text-align:center; } #BtnDeleteSelected:hover { cursor:pointer; } .publishHuoDong {background-color:#ced9df; border:1px solid #ced9df; border-radius:5px;text-align:center; width:100px; color:#000; height:25px; line-height:25px; float:left; } a { color:#08a5e0; } .droplist { background-image:url('images/inputbg.gif'); background-repeat:repeat-x; width:120px; height:25px; border:1px solid #ced9df; } </style> <script type="text/javascript"> function EditRoster(piciNumber) { var url = 'MessageWindow.aspx?id=' + piciNumber; //转向网页的地址; var name = 'add'; //网页名称,可为空; var iWidth = 850; //弹出窗口的宽度; var iHeight = 600; //弹出窗口的高度; //获得窗口的垂直位置 var iTop = (window.screen.availHeight - 30 - iHeight) / 2; //获得窗口的水平位置 var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; window.open(url, name, 'height=' + iHeight + ',,innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no'); } </script> </head> <body style="background-image:url('images/ygbg.png'); background-repeat:repeat;"> <form id="form1" runat="server"> <div class="place"> <span>位置</span> <ul class="placeul"> <li><a href="WelCome.aspx" target="rightFrame">首页</a></li> <li>微信管理</li> <li>德桥员工服务中心--会话管理</li> </ul> </div> <div> <div style="width:1124px;margin:10px auto 0px 20px;"> <font style="color:red;"> 根据微信公众平台规定,用户主送发起会话后,48小时之内可与该用户进行无限次会话,超过48小时不能主动会话。</font> </div> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <table class="tablestyle"> <asp:Repeater ID="RepeaterGustBookList" runat="server" OnItemDataBound="RepeaterGustBookList_ItemDataBound"> <HeaderTemplate> <tr> <th style="width:50px;"><asp:CheckBox ID="CheckAll" runat="server" oncheckedchanged="CheckAll_CheckedChanged" /><br /></th> <th style="width:105px;">openId</th> <%-- <th style="width:150px;">昵称</th> <th style="width:50px;">性别</th>--%> <th style="width:200px;">初始内容</th> <th style="width:100px;">接入时间</th> <th style="width:100px;">近期会话</th> <th style="width:80px;">会话状态</th> <th style="width:150px;">已过时间</th> <th style="width:100px;">会话操作</th> </tr> </HeaderTemplate> <ItemTemplate> <tr style='%#(Container.ItemIndex%2==0)?"#fff":"#ced9ff"%>' > <td><asp:CheckBox ID="CheckIn" runat="server" /></td> <td><asp:Label ID="lbUId" runat="server" Visible="false" Text="Label"></asp:Label> <%# Eval("UserOpenId")%> </td> <%-- <td><asp:Label ID="lbNikeName" runat="server" Text="未知"></asp:Label></td> <td><asp:Label ID="lbSex" runat="server" Text="未知"></asp:Label></td>--%> <td><%# (Eval("UserContent").ToString().Length>10)?Eval("UserContent").ToString().Substring(0,10)+"..":Eval("UserContent") %></td> <td><%# Eval("CreaterDate")%></td> <td><asp:Label ID="lblastDate" runat="server" Text="未知"></asp:Label></td> <td><asp:Label ID="lbState" runat="server" Text="未知"></asp:Label></td> <td><asp:Label ID="lbChaoshi" runat="server" Text="未知"></asp:Label></td> <td><a onclick="EditRoster(<%# Eval("UId") %>);">启动会话</a> <%-- <asp:HyperLink ID="HyperLinkNewSession" runat="server">新建</asp:HyperLink> --%> </td> </tr> </ItemTemplate> </asp:Repeater> </table> <div id="FenPage"> <asp:LinkButton ID="LinkBtnToPage" CssClass="gotoPagebtn" runat="server" OnClick="LinkBtnToPage_Click">确定</asp:LinkButton> <asp:TextBox ID="txtPageIndex" CssClass="toPageIndex" runat="server"></asp:TextBox> <asp:HyperLink ID="lnkLast" runat="server"><span class="fenyebtn2">>>|</span></asp:HyperLink> <asp:HyperLink ID="lnkNext" runat="server"><span class="fenyebtn2">></span></asp:HyperLink> <asp:HyperLink ID="lnkTop" runat="server"><span class="fenyebtn2"><</span></asp:HyperLink> <asp:HyperLink ID="lnkFist" runat="server"><span class="fenyebtn">|<<</span></asp:HyperLink> <asp:Button ID="BtnDelete" runat="server" Text="删除选中项" CssClass="deletebtn" BackColor="ButtonFace" onclick="BtnDelete_Click" /> <span style="float:left;margin-left:20px;">当前第</span> <span style="float:left; color:red;"><asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label></span> <span style="float:left;margin-left:5px;">页/</span> <span style="float:left;margin-left:5px;">共</span> <span style="float:left;color:red;"><asp:Label ID="lbCountPage" runat="server" Text=""></asp:Label></span> <span style="float:left;margin-left:5px;">页</span> <span style="float:left;margin-left:10px;"><asp:Label ID="lbPageSize" runat="server" Text=""></asp:Label></span> <span style="float:left;margin-left:10px;">共搜索到 </span> <span style="float:left;margin-left:5px; color:red;"><asp:Label ID="lbCountData" runat="server" Text=""></asp:Label></span> <span style="float:left;margin-left:5px;">条记录.</span> </div> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
WeiXinSessionList.aspx.cs后台代码如下
PagedDataSource pds = new PagedDataSource(); protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindGustBookList(); this.DataBind(); UsersInfo user = Session["Users"] as UsersInfo; if (user != null && user.RolsId == 1) { this.BtnDelete.Enabled = true; } else { this.BtnDelete.Enabled = false; } } } private void BindGustBookList() { WeixinKeFuService wkf = new WeixinKeFuService(); List<WeixinKeFuInfo> wkflists = wkf.GetAllWeixinKeFuInfoList(); //if (this.DDLState.SelectedValue.Equals("1")) //{ // lists = gbs.GetAllGustBookListByState(); /
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程