ASP.NET 微信公眾平台模板消息推送功能完整開發


  最近公眾平台的用戶提出了新需求,他們希望當收到新的郵件或者日程的時候,公眾平台能主動推送一條提醒給用戶。看了看平台提供的接口,似乎只有【模板消息】能盡量滿足這一需求,但不得不說微信提供的實例太少,而且只有PHP的,不過摸索了一下還是成功的實現了。

  首先是准備工作,需要申請開通【模板消息】功能,網上教程很多。然后申請通過之后,用戶可以從現有的模板里選擇15個使用,也可以自己添加模板使用。這里吐槽一下:申請添加新的模板時,微信出於保護用戶的目的禁止了一些“看起來會很頻繁”的消息類型,比如這圖里的——

  

  明明是客戶的需求,結果微信認為會引起用戶反感所以不通過 =L=

  后台代碼:

  

        /// <summary>
        /// 功能: 模板消息推送
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public string ModelMessageSend(string data) 
        {
            CancelView();

            string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + AccessToken;

            string result = RequestPost(data, url);

            if (result.Contains("ok"))
            {
                return "OK";
            }
            else {
                return "result";
            }
        }    
     /// <summary>
        /// 功能: 模擬Post請求
        /// </summary>
        /// <param name="postData">json</param>
        /// <param name="url">url</param>
        /// <returns></returns>
        public string RequestPost(string postData, string url)
        {
            byte[] data = Encoding.UTF8.GetBytes(postData);
            
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "Post";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            request.KeepAlive = true;

            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);

            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
            }

            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string content = reader.ReadToEnd();

            request.Abort();
            response.Close();
            reader.Dispose();
            stream.Close();
            stream.Dispose();
            
            return content;
        }

然后是關於傳入的json數據需要注意,不能使用單引號!

Ex:{\"touser\":\"oHWXst6bEayYb0m91RtdU4FzxfKY\",\"template_id\":\"Gyi3hZCDK6Y8CmAubONfxoHW7VADuwxz9mO_dObWsE0\",\"url\":\"http://www.baidu.com\",\"topcolor\":\"#FF0000\",\"data\":{\"first\": {\"value\":\"新的通知\",\"color\":\"#173177\"},\"keyword1\":{\"value\":\"吃飯!\",\"color\":\"#173177\"},\"keyword2\":{\"value\":\"2015.03.16中午\",\"color\":\"#173177\"},\"keyword3\":{\"value\":\"食堂\",\"color\":\"#173177\"},\"keyword4\":{\"value\":\"張三李四王二麻子\",\"color\":\"#173177\"},\"remark\":{\"value\":\"愛吃吃不吃滾\",\"color\":\"#173177\"}}}

之前為了省事使用了單引號,結果一直提示data格式錯誤,把單引號換成\"后就成功了……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM