1. 程式人生 > >微信開發第六篇伺服器主動傳送資訊

微信開發第六篇伺服器主動傳送資訊

      上幾篇文章基本是介紹有手機客戶端觸發的事件在先,這種有手機微信客戶端觸發的請求,咱們的伺服器被動響應,這種模式我個人理解為被動傳送資訊。

但是除此之外我們有時間要讓使用者推送訊息,比如向家長每天傳送孩子的作業資訊。這就要用到模板訊息了

對於模板訊息首先要新增

進入模板選擇行業之後就要等兩天才能用模板訊息

能用模板訊息之後 根據自己的情況,檢視模板選擇適用於自己的模板 如果沒有可以自己定義 只要微信官方稽核通過就可以用(我申請的好像說是7-15天,完成審計,但是好像30分鐘就給我發通知說申請成功)

後兩個都是我自己申請的模板。

給一個我呼叫模板的方法

 [WebMethod(Description = "測試優學酷能力報告")]
        public string TestEveryOneWeek(string featherOpenid)
        {
            string url = "http://......";
            string first = "親愛的家長,您孩子能力報告出爐通知\n";
            var keyword1 = string.Format("英語");
            var keyword2 = "單詞、語法很棒哦!聽力、口語還不錯!差一點就當學霸了,繼續加油!\n";
            var remark = "點選“詳情”檢視";
            //得到所需要的模板資料
            var data = MessageTemplate.NoticeYouxuekuEvery(first, keyword1, keyword2, remark);
            //模板標號
            string templateid = "XakPchhUx1InpJX0pxDqmDKKQz6-ocrPTn682sV5VSw";
            featherOpenid = "............";  //我個人微信的openid
            bool sendsucess = SendTemplateMessageService.SendTemplateMessage(templateid, featherOpenid, url, data);
            if (sendsucess)
            {
                return "成功";
            }
            else
            {
                return "失敗";
            }
        }

要給所謂的訊息,製成固定格式如下 格式並新增顏色

      public static object NoticeYouxuekuEvery(string first, string keyword1, string keyword2,string remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#000000"),
                keyword1 = new TemplateDataItem(keyword1, "#000000"),
                keyword2 = new TemplateDataItem(keyword2, "#000000"),
                remark = new TemplateDataItem(remark, "#000000")
            };
            return data;
        }

裡面的first,keyword1,keyword2,remark都是模板裡面的引數。

呼叫傳送訊息方法如下

public static bool SendTemplateMessage(string templateId, string openId, string url, object data)
        {
            WeiXinService weixin = new WeiXinService();
            var accessToken = weixin.GetAccessToken();
            var getInfoUrl = string.Format(GetBaseUserInfoApi, accessToken, openId);
            WeiXinUserInfo userInfo = HttpClientHelper.GetResponse<WeiXinUserInfo>(getInfoUrl);
            string resultes=null;
            //判斷使用者是否關注公眾號
            switch (userInfo.Subscribe)
            {
                case 0:
                    break;
                default:
                    var sendUrl = string.Format(SendMessageApi, accessToken);
                    var msg = new TemplateMessage
                    {
                        template_id = templateId,
                        touser = openId,
                        url = url,
                        data = data
                    };
                   //序列化實體為json
                   string json = JsonConvert.SerializeObject(msg, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                   //呼叫訊息傳送介面
                   var result = HttpClientHelper.PostResponse<TemplateMessageResult>(string.Format(sendUrl, accessToken), json);
                   resultes = result.errmsg;
                    break;
            }
            if (resultes=="ok")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

如果知道了使用者的openid,這樣就可以使用模板訊息,主動向手機客戶端傳送訊息了。