JAVA—咖啡館

          ——?dú)g迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請(qǐng)與我聯(lián)系。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          前言

          模板消息僅用于公眾號(hào)向用戶發(fā)送重要的服務(wù)通知,只能用于符合其要求的服務(wù)場(chǎng)景中,如信用卡刷卡通知,商品購買成功通知等。不支持廣告等營(yíng)銷類消息以及其它所有可能對(duì)用戶造成騷擾的消息。具體模板消息運(yùn)營(yíng)規(guī)則請(qǐng)讀 模板消息運(yùn)營(yíng)規(guī)范

          關(guān)于使用規(guī)則,請(qǐng)注意:

          1、所有服務(wù)號(hào)都可以在功能->添加功能插件處看到申請(qǐng)模板消息功能的入口,但只有認(rèn)證后的服務(wù)號(hào)才可以申請(qǐng)模板消息的使用權(quán)限并獲得該權(quán)限;
          2、需要選擇公眾賬號(hào)服務(wù)所處的2個(gè)行業(yè),每月可更改1次所選行業(yè);
          3、在所選擇行業(yè)的模板庫中選用已有的模板進(jìn)行調(diào)用;
          4、每個(gè)賬號(hào)可以同時(shí)使用15個(gè)模板。
          5、當(dāng)前每個(gè)賬號(hào)的模板消息的日調(diào)用上限為10萬次,單個(gè)模板沒有特殊限制。【20141118日將接口調(diào)用頻率從默認(rèn)的日1萬次提升為日10萬次,可在MP登錄后的開發(fā)者中心查看】。當(dāng)賬號(hào)粉絲數(shù)超過10W/100W/1000W時(shí),模板消息的日調(diào)用上限會(huì)相應(yīng)提升,以公眾號(hào)MP后臺(tái)開發(fā)者中心頁面中標(biāo)明的數(shù)字為準(zhǔn)。

          關(guān)于接口文檔,請(qǐng)注意:

            1、模板消息調(diào)用時(shí)主要需要模板ID和模板中各參數(shù)的賦值內(nèi)容;
            2、模板中參數(shù)內(nèi)容必須以".DATA"結(jié)尾,否則視為保留字;
            3、模板保留符號(hào)"{{ }}"。
          
          一、首先我們要在公眾號(hào)里面添加我們所需要用到的模板,先假設(shè)您已經(jīng)在MP中設(shè)置好了所屬行業(yè);  

          二、然后我們要定義一些請(qǐng)求模板消息時(shí)所要使用的實(shí)體類
           1 /// <summary>
           2     /// 公眾號(hào)模板消息
           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         /// 跳轉(zhuǎn)url
          20         /// </summary>
          21         public string url { get; set; }
          22         /// <summary>
          23         /// 頂部顏色
          24         /// </summary>
          25         public string topcolor { get; set; }
          26         /// <summary>
          27         /// 具體模板數(shù)據(jù)
          28         /// </summary>
          29         public object data { get; set; }
          30     }

          數(shù)據(jù)項(xiàng)data:

          public class TemplateDataItem
          {
            /// <summary>
            /// 項(xiàng)目值
            /// </summary>
            public string value { get; set; }
            /// <summary>
            /// 16進(jìn)制顏色代碼,如:#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;
            }
          }
          

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

            public class MessageTemplate
          {
            /// <summary>
            /// 領(lǐng)取通知消息模板(優(yōu)惠券領(lǐng)取成功通知)
            /// </summary>
            /// <param name="first">通知標(biāo)題</param>
            /// <param name="keyword1">券名稱</param>
            /// <param name="keyword2">來源商家</param>
            /// <param name="keyword3">過期時(shí)間</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>
            /// (訂單支付成功)消息模板---->>面向消費(fèi)者
            /// </summary>
            /// <param name="first">標(biāo)題</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">消息標(biāo)題</param>
            /// <param name="keyword1">下單時(shí)間</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;
            }
          }
          

          還有一個(gè)消息發(fā)送之后微信返回碼的一個(gè)實(shí)體:
          
              /// <summary>
              /// JSON返回結(jié)果(用于微信響應(yīng)接口等)
              /// </summary>
              public class WxJsonResult
              {
                  public ReturnCode errcode { get; set; }
                  public string errmsg { get; set; }
              }
              /// <summary>
              /// 發(fā)送模板消息結(jié)果
              /// </summary>
              public class TemplateMessageResult:WxJsonResult
              {
                  /// <summary>
                  /// msgid
                  /// </summary>
                  public int msgid { get; set; }
              }

          三、所有實(shí)體建好之后我們就需要去寫發(fā)送模板消息的服務(wù)了;

           1     public class SendTemplateMessageService
           2     {
           3         /// <summary>
           4         /// 公眾號(hào)相關(guān)信息
           5         /// </summary>
           6         private const string AppId = "wxdcabc123456xyz";
           7         private const string AppSecret = "086323crd33xd23gc524fd93428b4ed9";
           8         /// <summary>
           9         /// 發(fā)送模板消息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}?=zh_CN";
          16         /// <summary>
          17         /// 公眾號(hào)發(fā)送模板消息方法
          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">點(diǎn)擊詳情跳轉(zhuǎn)路徑</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             //判斷用戶是否關(guān)注公眾號(hào)
          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                     //序列化實(shí)體為json
          45                     string json = JsonConvert.SerializeObject(msg, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
          46 
          47                     //調(diào)用消息發(fā)送接口
          48                     var result = HttpClientHelper.PostResponse<TemplateMessageResult>(string.Format(sendUrl, accessToken), json);
          49                     LoggerHelper.Log(string.Format("【微信公眾號(hào)發(fā)送模板消息接口調(diào)用】返回參數(shù):errcode:{0},erromsg:{1},misgid:{2}", result.errcode, result.errmsg, result.msgid));
          50                     break;
          51             }
          52         }
          53     }

          四、最后一步就是調(diào)用我們上面的這個(gè)方法發(fā)送模板消息了

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

          最后來看一下效果:

          微信模板消息其實(shí)就這么簡(jiǎn)單!

          posted on 2016-09-23 17:12 rogerfan 閱讀(425) 評(píng)論(0)  編輯  收藏 所屬分類: 【開源技術(shù)】
          主站蜘蛛池模板: 凭祥市| 明光市| 疏勒县| 济源市| 贵南县| 抚松县| 锡林郭勒盟| 永康市| 通化县| 阳曲县| 泰兴市| 桃源县| 内江市| 新邵县| 宜丰县| 东莞市| 汝阳县| 武夷山市| 定日县| 攀枝花市| 浏阳市| 阳谷县| 分宜县| 庆阳市| 星座| 大英县| 兴安盟| 丁青县| 肥东县| 大化| 江津市| 达拉特旗| 深圳市| 二连浩特市| 西和县| 忻州市| 南丰县| 舞钢市| 潍坊市| 宜丰县| 淮北市|