千家信息网

ASP.NET中微信公众平台开发的消息管理是怎样的

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这期内容当中小编将会给大家带来有关ASP.NET中微信公众平台开发的消息管理是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。思维导图用思维导图来分析和表达一些
千家信息网最后更新 2025年01月19日ASP.NET中微信公众平台开发的消息管理是怎样的

这期内容当中小编将会给大家带来有关ASP.NET中微信公众平台开发的消息管理是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。


思维导图

用思维导图来分析和表达一些模型:


表结构

根据思维导图,我们可以建立的表可以是3张表:消息表,规则表,类型表
消息表:实际的消息
规则表:文本、图文、语音等
类型表:文本、图文、语音(默认回复,订阅回复)
也可以是两张表:规制表,消息表(+一个类型字段)

我这里只设计一张表:消息表(+一个规则字段+一个类型字段)

设计表结构与个人的平时习惯有关系,我还是喜欢简单的东西,别为了设计而去专门设计,这样只会增加系统的复杂度

CREATE TABLE [dbo].[WC_MessageResponse]( [Id] [varchar](50) NOT NULL,  --主键  [OfficalAccountId] [varchar](50) NULL, --所属公众号 [MessageRule] [int] NULL,   --消息规则(枚举) [Category] [int] NULL,   --类型(枚举) [MatchKey] [varchar](1000) NULL,  --关键字 [TextContent] [varchar](max) NULL, --文本内容 [ImgTextContext] [varchar](max) NULL, --图文文本内容 [ImgTextUrl] [varchar](1000) NULL, --图文图片URL [ImgTextLink] [varchar](1000) NULL, --图文图片超链接 [MeidaUrl] [varchar](1000) NULL,  --语音URL [MeidaLink] [varchar](1000) NULL,  --语音超链接 [Enable] [bit] NOT NULL,   --是否启用 [IsDefault] [bit] NOT NULL,  --是否默认 [Remark] [varchar](2000) NULL,  --说明 [Sort] [int] NOT NULL,   --排序 [CreateTime] [datetime] NOT NULL,  --创建时间 [CreateBy] [varchar](50) NOT NULL, --创建人 [ModifyTime] [datetime] NOT NULL,  --修改时间 [ModifyBy] [varchar](50) NULL,  --修改人 CONSTRAINT [PK_WC_MessageResponse] PRIMARY KEY CLUSTERED ( [Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[WC_MessageResponse] WITH CHECK ADD CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts] FOREIGN KEY([OfficalAccountId])REFERENCES [dbo].[WC_OfficalAccounts] ([Id])ON DELETE CASCADEGOALTER TABLE [dbo].[WC_MessageResponse] CHECK CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts]GO

表对应了两个枚举和关联主表公众号管理的主表

CREATE TABLE [dbo].[WC_OfficalAccounts]( [Id] [varchar](50) NOT NULL,  --主键 [OfficalId] [varchar](200) NULL, --公众号的唯一ID [OfficalName] [varchar](200) NOT NULL, --公众号名称 [OfficalCode] [varchar](200) NOT NULL, --公众号帐号 [OfficalPhoto] [varchar](1000) NULL, --头像 [OfficalKey] [varchar](500) NULL, --EncodingAESKey [ApiUrl] [varchar](1000) NULL,  --我们的资源服务器 [Token] [varchar](200) NULL,  --Token [AppId] [varchar](200) NULL,  --AppId [AppSecret] [varchar](200) NULL, --Appsecret [AccessToken] [varchar](200) NULL, --访问Token [Remark] [varchar](2000) NULL,  --说明 [Enable] [bit] NOT NULL,  --是否启用 [IsDefault] [bit] NOT NULL,  --是否为当前默认操作号 [Category] [int] NOT NULL,  --类别(媒体号,企业号,个人号,开发测试号) [CreateTime] [datetime] NOT NULL, --创建时间 [CreateBy] [varchar](50) NOT NULL, --创建人 [ModifyTime] [datetime] NOT NULL, --修改时间 [ModifyBy] [varchar](50) NULL,  --修改人 CONSTRAINT [PK_WC_OfficalAcconts] PRIMARY KEY CLUSTERED ( [Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

对应的枚举

 public enum WeChatReplyCategory { //文本 Text =1, //图文 Image =2, //语音 Voice =3, //相等,用于回复关键字 Equal=4, //包含,用于回复关键字 Contain = 5 } public enum WeChatRequestRuleEnum { ///  /// 默认回复,没有处理的 ///  Default =0, ///  /// 关注回复 ///  Subscriber =1, ///  /// 文本回复 ///  Text =2, ///  /// 图片回复 ///  Image =3, ///  /// 语音回复 ///  Voice =4, ///  /// 视频回复 ///  Video =5, ///  /// 超链接回复 ///  Link =6, ///  /// LBS位置回复 ///  Location =7, }

枚举其实对应就是我省掉的其余两张表
到这里,相信表的设计已经非常清晰

后台代码

增删改查非常普通,主要关注点在前端,前端处理提交的消息中,必须包含规则,类型,来指定消息的最终表达

Controller

[HttpPost] [SupportFilter(ActionName = "Edit")] public JsonResult PostData(WC_MessageResponseModel model) {  WC_OfficalAccountsModel accountModel = account_BLL.GetCurrentAccount();  if (string.IsNullOrEmpty(model.Id))  {  model.Id = ResultHelper.NewId;  }    model.CreateBy = GetUserId();  model.CreateTime = ResultHelper.NowTime;  model.ModifyBy = GetUserId();  model.ModifyTime = ResultHelper.NowTime;  model.OfficalAccountId = accountModel.Id;  model.Enable = true;  model.IsDefault = true;  if (m_BLL.PostData(ref errors, model))  {  LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",OfficalAccountId" + model.OfficalAccountId, "成功", "保存", "WC_MessageResponse");  return Json(JsonHandler.CreateMessage(1, Resource.SaveSucceed));  }  else  {  string ErrorCol = errors.Error;  LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",OfficalAccountId" + model.OfficalAccountId + "," + ErrorCol, "失败", "保存", "WC_MessageResponse");  return Json(JsonHandler.CreateMessage(0, Resource.SaveFail + ErrorCol));  } }

BLL

public bool PostData(ref ValidationErrors errors, WC_MessageResponseModel model) {  try  {  WC_MessageResponse entity = new WC_MessageResponse();  if (IsExists(model.Id))  {   entity = m_Rep.GetById(model.Id);  }  entity.Id = model.Id;  entity.OfficalAccountId = model.OfficalAccountId;  entity.MessageRule = model.MessageRule;  entity.Category = model.Category;  entity.MatchKey = model.MatchKey;  entity.TextContent = model.TextContent;  entity.ImgTextContext = model.ImgTextContext;  entity.ImgTextUrl = model.ImgTextUrl;  entity.ImgTextLink = model.ImgTextLink;  entity.MeidaUrl = model.MeidaUrl;  entity.Enable = model.Enable;  entity.IsDefault = model.IsDefault;  entity.Remark = model.Remark;  entity.CreateTime = model.CreateTime;  entity.CreateBy = model.CreateBy;  entity.Sort = model.Sort;  entity.ModifyTime = model.ModifyTime;  entity.ModifyBy = model.ModifyBy;  if (m_Rep.PostData(entity))  {   return true;  }  else  {   errors.Add(Resource.NoDataChange);   return false;  }  }  catch (Exception ex)  {  errors.Add(ex.Message);  ExceptionHander.WriteException(ex);  return false;  } }

DAL

public bool PostData(WC_MessageResponse model) {  //如果所有开关都关掉,证明不启用回复  if (model.Category == null)  {  return true;  }  //全部设置为不默认  ExecuteSqlCommand(string.Format("update [dbo].[WC_MessageResponse] set IsDefault=0 where OfficalAccountId ='{0}' and MessageRule={1}", model.OfficalAccountId, model.MessageRule));  //默认回复和订阅回复,且不是图文另外处理,因为他们有3种模式,但是只有一个是默认的  if (model.Category!= (int)WeChatReplyCategory.Image && (model.MessageRule == (int)WeChatRequestRuleEnum.Default || model.MessageRule == (int)WeChatRequestRuleEnum.Subscriber))  {  //查看数据库是否存在数据  var entity = Context.WC_MessageResponse.Where(p => p.OfficalAccountId == model.OfficalAccountId && p.MessageRule == model.MessageRule && p.Category == model.Category).FirstOrDefault();  if (entity != null)  {   //删除原来的   Context.WC_MessageResponse.Remove(entity);  }  }  //全部设置为默认  ExecuteSqlCommand(string.Format("update [dbo].[WC_MessageResponse] set IsDefault=1 where OfficalAccountId ='{0}' and MessageRule={1} and Category={2}", model.OfficalAccountId, model.MessageRule,model.Category));  //修改  if(IsExist(model.Id))  {  Context.Entry(model).State = EntityState.Modified;  return Edit(model);  }  else {   return Create(model);  } }

DAL层有必要来说明一下

默认回复和关注回复有3种类型:文本,图文,语音(但是只能有一种,所以有IsDefault字段来表明执行哪种回复)所以这两个规则必须另外处理,且看DAL的代码执行的SQL语句便明白。

所以我们尽情的设计前端吧!

前端如何设计?

我们来看一个思维导图:


前端完整代码

文本: @Html.SwitchButtonByEdit("swText0", false) 图文: @Html.SwitchButtonByEdit("swImage0", false) 语音: @Html.SwitchButtonByEdit("swVoice0", false)
当前操作公众号:@ViewBag.CurrentOfficalAcount
@Html.ToolButton("btnSava01", "fa fa-plus", "提交保存", ref perm, "Edit", false)
@Html.ToolButton("btnCreate02", "fa fa-search", "添加回复", ref perm, "Edit", false)
@Html.ToolButton("btnSava02", "fa fa-search", "提交保存", ref perm, "Edit", false)
标题:
图片:

@Resource.Browse @Resource.Uploading
内容:
链接:
排序:
@Html.ToolButton("btnSava03", "fa fa-plus", "提交保存", ref perm, "Edit", false)
标题:
语音:
@Resource.Browse @Resource.Uploading
描述:
文本: @Html.SwitchButtonByEdit("swText1", false) 图文: @Html.SwitchButtonByEdit("swImage1", false) 语音: @Html.SwitchButtonByEdit("swVoice1", false)
当前操作公众号:@ViewBag.CurrentOfficalAcount
@Html.ToolButton("btnSava11", "fa fa-plus", "提交保存", ref perm, "Edit", false)
@Html.ToolButton("btnCreate12", "fa fa-search", "添加回复", ref perm, "Edit", false) @Html.ToolButton("btnEdit12", "fa fa-search", "编辑", ref perm, "Edit", true) @Html.ToolButton("btnDelete12", "fa fa-search", "删除", ref perm, "Delete", false)
@Html.ToolButton("btnSava12", "fa fa-search", "提交保存", ref perm, "Edit", false)
标题:
图片:

@Resource.Browse @Resource.Uploading
内容:
链接:
排序:
@Html.ToolButton("btnSava13", "fa fa-plus", "提交保存", ref perm, "Edit", false)
标题:
语音:
@Resource.Browse @Resource.Uploading
描述:
@Html.ToolButton("btnCreate2", "fa fa-search", "添加回复", ref perm, "Edit", true) @Html.ToolButton("btnEdit2", "fa fa-search", "编辑", ref perm, "Edit", true) @Html.ToolButton("btnDelete2", "fa fa-search", "删除", ref perm, "Delete", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
@Html.ToolButton("btnSava2", "fa fa-search", "提交保存", ref perm, "Edit", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
关键字:
规则: @Html.SwitchButtonByEdit("swMessageRule2", true, "模糊匹配(关键字包含内容) ", "完全匹配(内容与关键字完全匹配)", "280")
内容:
@Html.ToolButton("btnCreate3", "fa fa-search", "添加回复", ref perm, "Edit", true) @Html.ToolButton("btnEdit3", "fa fa-search", "编辑", ref perm, "Edit", true) @Html.ToolButton("btnDelete3", "fa fa-search", "删除", ref perm, "Delete", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
@Html.ToolButton("btnSava3", "fa fa-search", "提交保存", ref perm, "Edit", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
标题:
关键字:
规则: @Html.SwitchButtonByEdit("swMessageRule3", true, "模糊匹配(关键字包含内容) ", "完全匹配(内容与关键字完全匹配)", "280")
图片:

@Resource.Browse @Resource.Uploading
内容:
链接:
排序:
 
@Html.ToolButton("btnCreate4", "fa fa-search", "添加回复", ref perm, "Edit", false) @Html.ToolButton("btnEdit4", "fa fa-search", "编辑", ref perm, "Edit", true) @Html.ToolButton("btnDelete4", "fa fa-search", "删除", ref perm, "Delete", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
@Html.ToolButton("btnSava4", "fa fa-search", "提交保存", ref perm, "Edit", false)
当前操作公众号: @ViewBag.CurrentOfficalAcount
标题:
关键字:
规则: @Html.SwitchButtonByEdit("swMessageRule4", true, "模糊匹配(关键字包含内容) ", "完全匹配(内容与关键字完全匹配)", "280")
语音:
@Resource.Browse @Resource.Uploading
描述:
@*
*@ @*
*@

利用前端的思维导图,来快速理解前端代码,和应用于实际

总结

消息的管理是非常有技巧的一件事

1.消息在没有任务回复的情况 下,我们应该启用默认回复,要不用户会得不到回应,丢失体验

2.关键字的设计一般是一环扣一环,是有引导作用的
比如:

关键字:(我要) 回复: 按1加入获得礼品一份,按2直接获得50元
关键字:(1) 回复: 按3获得铁观音茶一份,按4获得普洱茶
关键字:(3或4) 回复:请回复您的地址和电话及收件人
这样我们将获得系统与用户之间的完整对话,当然我们也要对用户最后的信息进行处理。

上述就是小编为大家分享的ASP.NET中微信公众平台开发的消息管理是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0