类818tu.c微信小说分销系统设计之定时模板消息源码
近期將出個系列講解開發(fā)過程,同時作為此系統(tǒng)的開發(fā)記錄吧,萬能的博客園,本邊講解如何發(fā)送模板消息,并且能夠定時發(fā)送,下一篇講解如何處理多個公眾號的網(wǎng)頁授權(quán)登錄問題
【后臺】http://xiaoshuo.qqsiot.cn/manager
管理員賬號:admin
渠道商賬號:channel
代理商賬號:agent
演示密碼:123456
【前臺】http://y6.qqsiot.cn
我的獨(dú)立博客:http://www.yxxrui.cn
先講一下系統(tǒng)的功能,整個系統(tǒng)總共有四種角色:管理員??-> ?渠道商 ?-> ?代理商 ?-> ?讀者
? ?【管理員】管理員擁有最高權(quán)限。可以發(fā)布通知公告(不同可見度的通知)、查看整個平臺數(shù)據(jù)統(tǒng)計、訂單明細(xì)、管理小說分類、管理小說、管理章節(jié)、管理渠道商、管理員管理、處理渠道打款、修改個人資料、修改密碼、清空數(shù)據(jù)庫、安全域名自動配置,每個渠道商擁有一個專屬的子域名,支付域名也單獨(dú)拿出來,防微信封殺功能、導(dǎo)入ApiKey設(shè)置與刷新、;
? ?【渠道商】查看公告,本渠道的數(shù)據(jù)統(tǒng)計、讀者統(tǒng)計、訂單明細(xì)、定時群發(fā)微信模板消息、查看小說、查看章節(jié)、內(nèi)容、推廣小說、文案編輯、復(fù)制鏈接、推廣首頁、當(dāng)前渠道商的代理商管理、我的結(jié)算單、處理代理打款事項、查看所有讀者、讀者充值記錄、公眾號設(shè)置、關(guān)鍵字回復(fù)、創(chuàng)建微信自定義菜單、自定義關(guān)注章節(jié)、簡易掃碼支付(減少有風(fēng)險環(huán)境下無法支付的問題)、修改個人資料、修改密碼等;
? ?【代理商】查看公告、本代理的數(shù)據(jù)統(tǒng)計、用戶統(tǒng)計、訂單統(tǒng)計、查看小說、查看章節(jié)、內(nèi)容、推廣小說、文案編輯、復(fù)制鏈接、推廣首頁、我的結(jié)算單、修改個人資料、修改密碼等;代理商無需公眾號即可賺錢。
? ?【讀 ? 者】首頁、搜索書庫、男頻、女頻、排行、書庫、分類、書簽、歷史記錄、簽到、首次閱讀自動簽到、簽到自動回復(fù)客服消息、關(guān)注推送文章鏈接、關(guān)鍵字圖文回復(fù)、分享賺書幣(3次)、看書、充值書幣、充值年費(fèi)會員等。
前臺(部分):
? ? ? ? ??? ? ?
?
??? ? ?
后臺(部分):
批量導(dǎo)入工具:
還有一個配套的高級導(dǎo)入工具,選擇一次,遍歷所有文件夾中的小說,批量導(dǎo)入到系統(tǒng)中
定時發(fā)送模板消息,目前比較簡單,在網(wǎng)站開始運(yùn)行的時候,啟動定時器,每隔x時間則檢測一下是否有定時需要發(fā)送的模板消息:
public static void SetOndDayTimer(){//第一次開始的時間,兩秒執(zhí)行一次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秒執(zhí)行一次// OnOndDayTimer為你每天需要調(diào)用的方法TimerCallback timerDelegate = new TimerCallback(DealTask);// Create a timer that signals the delegate to invokemyTimer = new System.Threading.Timer(timerDelegate, null, delayTime, intervalTime);} 上邊的源碼中的DealTask為處理數(shù)據(jù)庫中定時消息的方法,此方法從數(shù)據(jù)庫讀取數(shù)據(jù),并且處理,代碼如下: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;//需要發(fā)送消息的所有用戶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;} 主要思路就是先統(tǒng)計需要發(fā)送的用戶,然后拿到每個用戶的openid,最后給每個用戶發(fā)送一條消息即可。
wexinTool.SendTemplateMsg(user.Openid, task.TemplateId, task.ClickUrl, data);此方法為最終發(fā)送模板消息的,直接將提交到微信服務(wù)器
上邊的WxNorFactory類中包含了多公眾號接口操作的所有方法,具體講解關(guān)注我的博客園賬號,下次寫多個微信公眾號網(wǎng)頁授權(quán)、多域名技術(shù)、跨公眾號支付。
我剛發(fā)現(xiàn)手機(jī)上看不到博客評論,抱歉,答案在此:1420213383
總結(jié)
以上是生活随笔為你收集整理的类818tu.c微信小说分销系统设计之定时模板消息源码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgreSQl pathman 用
- 下一篇: 生产系统服务器是啥意思,生产系统服务器主