类818tu.c微信小说分销系统设计之定时模板消息源码
近期将出个系列讲解开发过程,同时作为此系统的开发记录吧,万能的博客园,本边讲解如何发送模板消息,并且能够定时发送,下一篇讲解如何处理多个公众号的网页授权登录问题
【后台】http://xiaoshuo.qqsiot.cn/manager
管理员账号:admin
渠道商账号:channel
代理商账号:agent
演示密码:123456
我的独立博客:http://www.yxxrui.cn
先讲一下系统的功能,整个系统总共有四种角色:管理员 -> 渠道商 -> 代理商 -> 读者
【管理员】管理员拥有最高权限。可以发布通知公告(不同可见度的通知)、查看整个平台数据统计、订单明细、管理小说分类、管理小说、管理章节、管理渠道商、管理员管理、处理渠道打款、修改个人资料、修改密码、清空数据库、安全域名自动配置,每个渠道商拥有一个专属的子域名,支付域名也单独拿出来,防微信封杀功能、导入ApiKey设置与刷新、;
【渠道商】查看公告,本渠道的数据统计、读者统计、订单明细、定时群发微信模板消息、查看小说、查看章节、内容、推广小说、文案编辑、复制链接、推广首页、当前渠道商的代理商管理、我的结算单、处理代理打款事项、查看所有读者、读者充值记录、公众号设置、关键字回复、创建微信自定义菜单、自定义关注章节、简易扫码支付(减少有风险环境下无法支付的问题)、修改个人资料、修改密码等;
【代理商】查看公告、本代理的数据统计、用户统计、订单统计、查看小说、查看章节、内容、推广小说、文案编辑、复制链接、推广首页、我的结算单、修改个人资料、修改密码等;代理商无需公众号即可赚钱。
【读 者】首页、搜索书库、男频、女频、排行、书库、分类、书签、历史记录、签到、首次阅读自动签到、签到自动回复客服消息、关注推送文章链接、关键字图文回复、分享赚书币(3次)、看书、充值书币、充值年费会员等。
前台(部分):
后台(部分):
批量导入工具:
还有一个配套的高级导入工具,选择一次,遍历所有文件夹中的小说,批量导入到系统中
定时发送模板消息,目前比较简单,在网站开始运行的时候,启动定时器,每隔x时间则检测一下是否有定时需要发送的模板消息:
public static void SetOndDayTimer()
{
//第一次开始的时间,两秒执行一次
DateTime startTime = DateTime.Now;
/*if (startTime < DateTime.Now)
startTime = startTime.AddDays(1.0);*/
TimeSpan delayTime = (startTime - DateTime.Now); TimeSpan intervalTime = new TimeSpan(0, 0, 0, 1); //1秒执行一次 // OnOndDayTimer为你每天需要调用的方法
TimerCallback timerDelegate = new TimerCallback(DealTask); // Create a timer that signals the delegate to invoke
myTimer = new System.Threading.Timer(timerDelegate, null, delayTime, intervalTime);
}
上边的源码中的DealTask为处理数据库中定时消息的方法,此方法从数据库读取数据,并且处理,代码如下:
private static bool _isBusy = false;//是否正在工作中
public static void DealTask(object obj)
{
if (_isBusy) return;
_isBusy = true;
TimerTaskBll timerTaskBll = new TimerTaskBll();
var tts = timerTaskBll.Gets(null, 1);
if (tts.Count < 1)
{
_isBusy = false;
return;
}
UserBll userBll = new UserBll();
foreach (var task in tts)
{
//先处理掉
timerTaskBll.FinishThis(task.TaskId);
List<User> users = null;//需要发送消息的所有用户
if (task.AgentId == null||task.AgentId==0)
{
if (task.UserId == null || task.UserId == 0)
{
users = userBll.Gets(null, null, null, null, null);
}
else
{
users = new List<User>();
users.Add(userBll.Get(task.UserId ?? 0));
}
}
else
{
if (task.UserId == null || task.UserId == 0)
{
//2017-06-30 可能需修改
users = userBll.Gets(task.AgentId, task.AgentId, null, null, null);
}
else
{
users = new List<User>();
User user = userBll.Get(task.UserId ?? 0);
if (user.BelongToAgentId == task.AgentId)
{
users.Add(user);
}
}
}
try
{
var wexinTool = new WxNorFactory(task.AgentId ?? 5);
foreach (var user in users)
{
var data = task.TaskValue.Replace("{nickname}", user.Nickname)
.Replace("{coinnum}", user.CoinNum.ToString());
wexinTool.SendTemplateMsg(user.Openid, task.TemplateId, task.ClickUrl, data);
}
}
catch
{
timerTaskBll.FinishThisWithError(task.TaskId);
} }
_isBusy = false;
}
主要思路就是先统计需要发送的用户,然后拿到每个用户的openid,最后给每个用户发送一条消息即可。
wexinTool.SendTemplateMsg(user.Openid, task.TemplateId, task.ClickUrl, data);此方法为最终发送模板消息的,直接将提交到微信服务器
上边的WxNorFactory类中包含了多公众号接口操作的所有方法,具体讲解关注我的博客园账号,下次写多个微信公众号网页授权、多域名技术、跨公众号支付。
我刚发现手机上看不到博客评论,抱歉,答案在此:1420213383
类818tu.c微信小说分销系统设计之定时模板消息源码的更多相关文章
- 类似818tu.co微信小说分销系统设计之多公众号网页授权自动登录源码
/** 转载请保留原地址以及版权声明,请勿恶意修改 * 作者:杨浩瑞 QQ:1420213383 独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...
- 类似818tu.c微信小说分销系统设计之多公众号网页授权自动登录源码分享
/** 转载请保留原地址以及版权声明,请勿恶意修改 * 作者:杨浩瑞 QQ:1420213383 独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...
- 微信小说分销系统设计之使用百度Echarts地图统计功能统计微信粉丝地域分布情况
/** 转载请保留博客园原地址以及版权声明,请勿恶意修改,本博客中的内容均属于技术交流,请勿用于商业用途,谢谢配合 * 作者:杨浩瑞 QQ:1420213383 独立博客:http://www. ...
- 微信小程序使用场景延伸:扫码登录、扫码支付
微信小程序使用场景延伸:扫码登录.扫码支付 小程序最适合的使用场景有哪些?相比大家能列举出来很多,但这个场景,大家可能多数没想到_^ 笔者团队近期接到了一个PC项目:转转游戏租号PC官网,该项目要求在 ...
- 微信内点击链接或扫描二维码可直接用外部浏览器打开H5链接的解决方案
很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们使用微信跳转浏览器接口实现跳转功能即可. 简单的处理方案 1. 用浏览器打开我们需要用到的 ...
- 微信Netting-QRLJacking分析利用-扫我二维码获取你的账号权限
首先我们来看一下QRLJacking的实际原理:.攻击者首先进行客户端QR会话,并将登录QR码复制到网络钓鱼网站.“现在,一个精心制作的网络钓鱼页面有一个有效和定期更新的QR码可以被发送给受害者.” ...
- 微信小程序动态生成保存二维码
起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...
- 120多套各种类别微信小程序模板源码打包下载
120多套各种类别微信小程序模板源码打包下载,以下是部分截图欢迎下载!120多套各种类别微信小程序模板源码打包下载 下载地址:https://pan.baidu.com/s/1Cfqyc9p2ZDOc ...
- txt文件按行处理工具类(可以截取小说、分析日志等)【我】
txt文件按行处理工具类(可以分析日志.截取小说等) package file; import java.io.BufferedReader; import java.io.BufferedWrite ...
随机推荐
- SpringCloud 源码系列(1)—— 注册中心 Eureka(上)
Eureka 是 Netflix 公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡.熔断器.网关等)一起,被 Spring Cloud 整合为 Spring C ...
- 发现了一个关于 gin 1.3.0 框架的 bug
gin 1.3.0 框架 http 响应数据错乱问题排查 问题概述 客户端同时发起多个http请求,gin接受到请求后,其中一个接口响应内容为空,另外一个接口响应内容包含接口1,接口2的响应内容,导致 ...
- 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析
第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...
- PyQt(Python+Qt)学习随笔:部件的inputMethodHints属性
inputMethodHints属性只对输入部件有效,输入法使用它来检索有关输入法应如何操作的提示,例如,如果设置了只允许输入数字的标志,则输入法可能会更改其可视组件,以反映只能输入数字.相关取值及含 ...
- 从Linux源码看Socket(TCP)的accept
从Linux源码看Socket(TCP)的accept 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就从Linux源码的角度看下Serve ...
- hitorMiss、hitAndMiss以及MORPH_HITMISS?
hitorMiss.hitAndMiss在图像处理中都是同一个概念,即图像的形态学变换中的击中击不中变换,hit表示击中,miss表示击不中.MORPH_HITMISS是OpenCV调用时该变换的op ...
- RedHat-Linux操作指令第1篇
不同的linux系统切换方式会稍有一点差别 从图形界面切换到字符界面:Alt+F(1-8) 或者 Alt+Ctrl+Shift+F(1-8) 从字符界面切换回图形界面:Alt+F7 字符界面启动到图形 ...
- Leetcode学习笔记(6)
题目1 ID112 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标 ...
- CF1147F Zigzag Game & 稳定婚姻问题学习笔记
CF1147F Zigzag Game 这题太神仙了,不得不记录一下. 我网络流做不动了,DS做不动了,DP做不动了,特别自闭.于是博弈论之神(就是随手切3500博弈的那种) \(\color{bla ...
- CF850F Rainbow Balls 题解
考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...