上几篇文章基本是介绍有手机客户端触发的事件在先,这种有手机微信客户端触发的请求,咱们的服务器被动响应,这种模式我个人理解为被动发送信息。
但是除此之外我们有时间要让用户推送消息,比如向家长每天发送孩子的作业信息。这就要用到模板消息了
对于模板消息首先要添加
进入模板选择行业之后就要等两天才能用模板消息
能用模板消息之后 根据自己的情况,查看模板选择适用于自己的模板 如果没有可以自己定义 只要微信官方审核通过就可以用(我申请的好像说是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
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
resultes = result.errmsg;
break;
}
if (resultes=="ok")
{
return true;
}
else
{
return false;
}
}
如果知道了用户的openid,这样就可以使用模板消息,主动向手机客户端发送消息了。