<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

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

    前言

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

    關于使用規則,請注意:

    1、所有服務號都可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證后的服務號才可以申請模板消息的使用權限并獲得該權限;
    2、需要選擇公眾賬號服務所處的2個行業,每月可更改1次所選行業;
    3、在所選擇行業的模板庫中選用已有的模板進行調用;
    4、每個賬號可以同時使用15個模板。
    5、當前每個賬號的模板消息的日調用上限為10萬次,單個模板沒有特殊限制。【20141118日將接口調用頻率從默認的日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 = "wxdcabc123456xyz";
     7         private const string AppSecret = "086323crd33xd23gc524fd93428b4ed9";
     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}?=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);
    }
    

    最后來看一下效果:

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

    posted on 2016-09-23 17:12 rogerfan 閱讀(417) 評論(0)  編輯  收藏 所屬分類: 【開源技術】
    主站蜘蛛池模板: 亚洲线精品一区二区三区影音先锋 | 免费人妻av无码专区| 乱人伦中文视频在线观看免费| 中文字幕亚洲图片| 免费人成网站在线观看10分钟| 免费观看四虎精品成人| 亚洲国产一区在线| 国产无遮挡吃胸膜奶免费看视频| 中文字幕高清免费不卡视频| 亚洲一区在线免费观看| 亚洲人成网站18禁止一区 | 国产成人无码综合亚洲日韩| 成年女人18级毛片毛片免费| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 3344永久在线观看视频免费首页| 日韩国产欧美亚洲v片| 亚洲av福利无码无一区二区| 免费观看四虎精品国产永久| 亚州免费一级毛片| 香蕉免费看一区二区三区| 亚洲色偷偷色噜噜狠狠99网| 亚洲AV无一区二区三区久久| 免费一级毛片在级播放| 最近中文字幕免费mv在线视频| h片在线播放免费高清| 亚洲日韩精品国产3区| 久久精品九九亚洲精品| 久久久久久A亚洲欧洲AV冫| 女人被免费视频网站| 亚洲综合免费视频| 国产麻豆成人传媒免费观看| 免费的黄色网页在线免费观看| 中文无码亚洲精品字幕| 91亚洲导航深夜福利| 亚洲三区在线观看无套内射| 国产免费69成人精品视频| 久久久久久久久免费看无码| h视频在线观看免费网站| 久久狠狠躁免费观看2020| 久久成人永久免费播放| 免费国产a理论片|