文章出處

近期將出個系列講解開發過程,同時作為此系統的開發記錄吧,萬能的博客園,本邊講解如何發送模板消息,并且能夠定時發送,下一篇講解如何處理多個公眾號的網頁授權登錄問題

【后臺】http://xiaoshuo.qqsiot.cn/manager

管理員賬號:admin

渠道商賬號:channel

代理商賬號:agent

演示密碼:1413051356

【前臺】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 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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()