【转】微信公众号开发之微信模板消息 -凯发k8网页登录

——欢迎访问rogerfan的博客,常来《java——咖啡馆》坐坐,喝杯浓香的咖啡,彼此探讨一下java技术,交流工作经验,分享java带来的快乐!本网站部分转载文章,如果有凯发k8网页登录的版权问题请与我联系。

前言

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。具体模板消息运营规则请读 

关于使用规则,请注意:

1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用15个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【20141118日将接口调用频率从默认的日1万次提升为日10万次,可在mp登录后的开发者中心查看】。当账号粉丝数超过10w/100w/1000w时,模板消息的日调用上限会相应提升,以公众号mp后台开发者中心页面中标明的数字为准。

关于接口文档,请注意:

  1、模板消息调用时主要需要模板id和模板中各参数的赋值内容;
  2、模板中参数内容必须以".data"结尾,否则视为保留字;
  3、模板保留符号"{{ }}"。
一、首先我们要在公众号里面添加我们所需要用到的模板,先假设您已经在mp中设置好了所属行业;  
二、然后我们要定义一些请求模板消息时所要使用的实体类
 1 /// 
 2     /// 公众号模板消息 3     /// 
 4     public class templatemessage
 5     {
 6         public templatemessage()
 7         {
 8             topcolor = "#ff0000";
 9         }
10         /// 
11         /// 接收者微信openid12         /// 
13         public string touser { get; set; }
14         /// 
15         /// 模板id16         /// 
17         public string template_id { get; set; }
18         /// 
19         /// 跳转url20         /// 
21         public string url { get; set; }
22         /// 
23         /// 顶部颜色24         /// 
25         public string topcolor { get; set; }
26         /// 
27         /// 具体模板数据28         /// 
29         public object data { get; set; }
30     }

数据项data:

public class templatedataitem
{
/// 
/// 项目值
/// 
public string value { get; set; }
/// 
/// 16进制颜色代码,如:#ff0000
/// 
public string color { get; set; }
/// 
///
/// 
/// value
/// color
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;
}
}
还有一个消息发送之后微信返回码的一个实体:
    /// 
    /// json返回结果(用于微信响应接口等)/// 
    public class wxjsonresult
    {
        public returncode errcode { get; set; }
        public string errmsg { get; set; }
    }
    /// 
    /// 发送模板消息结果/// 
    public class templatemessageresult:wxjsonresult
    {
        /// 
        /// msgid/// 
        public int msgid { get; set; }
    }

三、所有实体建好之后我们就需要去写发送模板消息的服务了;

 1     public class sendtemplatemessageservice
 2     {
 3         /// 
 4         /// 公众号相关信息 5         /// 
 6         private const string appid = "wxdcabc123456xyz";
 7         private const string appsecret = "086323crd33xd23gc524fd93428b4ed9";
 8         /// 
 9         /// 发送模板消息api10         /// 
11         private const string sendmessageapi = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";
12         /// 
13         /// 获取用信息api14         /// 
15         private const string getbaseuserinfoapi = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}⟨=zh_cn";
16         /// 
17         /// 公众号发送模板消息方法18         /// 
19         /// 
20         /// 
21         /// 模板id
22         /// 微信openid
23         /// 点击详情跳转路径
24         /// 
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(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(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 阅读(346) 评论(0)  编辑  收藏 所属分类: 【开源技术】
网站地图