类818tu.c微信小说分销系统设计之定时模板消息源码
近期將出個系列講解開發過程,同時作為此系統的開發記錄吧,萬能的博客園,本邊講解如何發送模板消息,并且能夠定時發送,下一篇講解如何處理多個公眾號的網頁授權登錄問題
【后臺】http://xiaoshuo.qqsiot.cn/manager
管理員賬號:admin
渠道商賬號:channel
代理商賬號:agent
演示密碼:123456
【前臺】http://y6.qqsiot.cn
我的獨立博客: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 invokemyTimer = 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微信小说分销系统设计之定时模板消息源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgreSQl pathman 用
- 下一篇: 生产系统服务器是啥意思,生产系统服务器主