微信公眾號開發之微信模板消息


前言  

模板消息僅用於公眾號向用戶發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支持廣告等營銷類消息以及其它所有可能對用戶造成騷擾的消息。具體模板消息運營規則請讀模板消息運營規范

關於使用規則,請注意:

1、所有服務號都可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證后的服務號才可以申請模板消息的使用權限並獲得該權限;
2、需要選擇公眾賬號服務所處的2個行業,每月可更改1次所選行業;
3、在所選擇行業的模板庫中選用已有的模板進行調用;
4、每個賬號可以同時使用15個模板。
5、當前每個賬號的模板消息的日調用上限為10萬次,單個模板沒有特殊限制。【2014年11月18日將接口調用頻率從默認的日1萬次提升為日10萬次,可在MP登錄后的開發者中心查看】。當賬號粉絲數超過10W/100W/1000W時,模板消息的日調用上限會相應提升,以公眾號MP后台開發者中心頁面中標明的數字為准。

關於接口文檔,請注意:

  1、模板消息調用時主要需要模板ID和模板中各參數的賦值內容;
  2、模板中參數內容必須以".DATA"結尾,否則視為保留字;
  3、模板保留符號"{{ }}"。

一、首先我們要在公眾號里面添加我們所需要用到的模板,先假設您已經在MP中設置好了所屬行業;  


 

  下面這張圖就是領取成功通知的模板,我們必須按照這個模板提供的字段來發送消息



二、然后我們要定義一些請求模板消息時所要使用的實體類
 1 /// <summary>
 2     /// 公眾號模板消息
 3     /// </summary>
 4     public class TemplateMessage
 5     {
 6         public TemplateMessage()
 7         {
 8             topcolor = "#FF0000";
 9         }
10         /// <summary>
11         /// 接收者微信OpenId
12         /// </summary>
13         public string touser { get; set; }
14         /// <summary>
15         /// 模板Id
16         /// </summary>
17         public string template_id { get; set; }
18         /// <summary>
19         /// 跳轉url
20         /// </summary>
21         public string url { get; set; }
22         /// <summary>
23         /// 頂部顏色
24         /// </summary>
25         public string topcolor { get; set; }
26         /// <summary>
27         /// 具體模板數據
28         /// </summary>
29         public object data { get; set; }
30     }

 

數據項data:

    public class TemplateDataItem
    {
        /// <summary>
        /// 項目值
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 16進制顏色代碼,如:#FF0000
        /// </summary>
        public string color { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="v">value</param>
        /// <param name="c">color</param>
        public TemplateDataItem(string v, string c = "#173177")
        {
            value = v;
            color = c;
        }
    }

 

這里就是我們上面在公眾號中添加的一些模板:

    public class MessageTemplate
    {
        /// <summary>
        /// 領取通知消息模板(優惠券領取成功通知)
        /// </summary>
        /// <param name="first">通知標題</param>
        /// <param name="keyword1">券名稱</param>
        /// <param name="keyword2">來源商家</param>
        /// <param name="keyword3">過期時間</param>
        /// <param name="keyword4">使用說明</param>
        /// <param name="remark">備注</param>
        /// <returns></returns>
        public static object NoticeTemplate(string first, string keyword1, string keyword2, string keyword3, string keyword4, string remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#3990eb"),
                keyword1 = new TemplateDataItem(keyword1, "#feb91a"),
                keyword2 = new TemplateDataItem(keyword2, "#feb91a"),
                keyword3 = new TemplateDataItem(keyword3, "#feb91a"),
                keyword4 = new TemplateDataItem(keyword4, "#000000"),
                remark = new TemplateDataItem(remark, "#fe5627")
            };
            return data;
        }

        /// <summary>
        /// (訂單支付成功)消息模板---->>面向消費者
        /// </summary>
        /// <param name="first">標題</param>
        /// <param name="orderMoneySum">支付金額</param>
        /// <param name="orderProductName">商品信息</param>
        /// <param name="Remark">備注</param>
        /// <returns></returns>
        public static object NoticeOrderPaySuccess(string first, string orderMoneySum, string orderProductName, string Remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#3990eb"),
                orderMoneySum = new TemplateDataItem(orderMoneySum, "#feb91a"),
                orderProductName = new TemplateDataItem(orderProductName, "#feb91a"),
                Remark = new TemplateDataItem(Remark, "#fe5627")
            };
            return data;
        }

        /// <summary>
        /// (新訂單通知)消息模板---->>面向商家
        /// </summary>
        /// <param name="first">消息標題</param>
        /// <param name="keyword1">下單時間</param>
        /// <param name="keyword2">配送地址</param>
        /// <param name="keyword3">訂單金額</param>
        /// <param name="keyword4">訂單備注</param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public static object NoticeOrderPaySuccess(string first, string keyword1, string keyword2, string keyword3, string keyword4, string remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#3990eb"),
                keyword1 = new TemplateDataItem(keyword1, "#feb91a"),
                keyword2 = new TemplateDataItem(keyword2, "#feb91a"),
                keyword3 = new TemplateDataItem(keyword3, "#feb91a"),
                keyword4 = new TemplateDataItem(keyword4, "#000000"),
                remark = new TemplateDataItem(remark, "#fe5627")
            };
            return data;
        }
    }

還有一個消息發送之后微信返回碼的一個實體:
    /// <summary>
    /// JSON返回結果(用於微信響應接口等)
    /// </summary>
    public class WxJsonResult
    {
        public ReturnCode errcode { get; set; }
        public string errmsg { get; set; }
    }
 
        
    /// <summary>
    /// 發送模板消息結果
    /// </summary>
    public class TemplateMessageResult:WxJsonResult
    {
        /// <summary>
        /// msgid
        /// </summary>
        public int msgid { get; set; }
    }

 

三、所有實體建好之后我們就需要去寫發送模板消息的服務了;

 1     public class SendTemplateMessageService
 2     {
 3         /// <summary>
 4         /// 公眾號相關信息
 5         /// </summary>
 6         private const string AppId = "wxabcde123456xyz";
 7         private const string AppSecret = "25633c23232d23gc0000d93428b1234";
 8         /// <summary>
 9         /// 發送模板消息API
10         /// </summary>
11         private const string SendMessageApi = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";
12         /// <summary>
13         /// 獲取用信息API
14         /// </summary>
15         private const string GetBaseUserInfoApi = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN";
16         /// <summary>
17         /// 公眾號發送模板消息方法
18         /// </summary>
19         /// <param name="appId"></param>
20         /// <param name="appSecret"></param>
21         /// <param name="templateId">模板ID</param>
22         /// <param name="openId">微信openId</param>
23         /// <param name="url">點擊詳情跳轉路徑</param>
24         /// <param name="data"></param>
25         public static void SendTemplateMessage(string templateId, string openId, string url, object data)
26         {
27             var accessToken = AccessTokenContainer.TryGetToken(AppId,AppSecret);
28             var getInfoUrl = string.Format(GetBaseUserInfoApi, accessToken, openId);
29             var userInfo = HttpClientHelper.GetResponse<WeixinUserInfoResult>(getInfoUrl);
30             //判斷用戶是否關注公眾號
31             switch (userInfo.subscribe)
32             {
33                 case 0:
34                     break;
35                 default:
36                     var sendUrl = string.Format(SendMessageApi, accessToken);
37                     var msg = new TemplateMessage
38                     {
39                         template_id = templateId,
40                         touser = openId,
41                         url = url,
42                         data = data
43                     };
44                     //序列化實體為json
45                     string json = JsonConvert.SerializeObject(msg, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
46 
47                     //調用消息發送接口
48                     var result = HttpClientHelper.PostResponse<TemplateMessageResult>(string.Format(sendUrl, accessToken), json);
49                     LoggerHelper.Log(string.Format("【微信公眾號發送模板消息接口調用】返回參數:errcode:{0},erromsg:{1},misgid:{2}", result.errcode, result.errmsg, result.msgid));
50                     break;
51             }
52         }
53     }

 

四、最后一步就是調用我們上面的這個方法發送模板消息了

//判斷是否是在微信瀏覽器中
if (isWechat)
{
     var url = "http://m.xdd.wquan.cn/findcp";
     var endDate = "2015年08月20日";
     var first = string.Format("恭喜您,獲得了100元現金抵用券");
     var keyword4 = StrUtil.HtmlDiscode(ecList.ECouponDetail.Usage);
     var remark = "點擊“詳情”查看優惠券,歡迎再次使用享叮當!";
     //得到所需要的模板數據
     var data = MessageTemplate.NoticeTemplate(first, ecList.ProductName, ecList.CorpName, endDate, keyword4, remark);
     //調用發送模板消息的方法,模板Id存儲在config中
     SendTemplateMessageService.SendTemplateMessage(noticeTemplateId, oAuthAccessTokenResult.openid, url, data);
}

 

最后來看一下效果:

 

微信模板消息其實就這么簡單!

 







免責聲明!

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



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