近期將出個系列講解開發過程,同時作為此系統的開發記錄吧,萬能的博客園,本邊講解如何發送模板消息,并且能夠定時發送,下一篇講解如何處理多個公眾號的網頁授權登錄問題
【后臺】http://xiaoshuo.qqsiot.cn/manager
管理員賬號:admin
渠道商賬號:channel
代理商賬號:agent
演示密碼:1413051356
我的獨立博客: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
文章列表