作者:王先荣
本文介绍微信公众号中的模板消息,包括以下内容:(1)templatemessage类简介;(2)设置所属行业;(3)获得模板id;(4)发送模板消息;(5)接收推送模板消息发送结果事件。
1 templatemessage类简介
templatemessage静态类封装了跟模板消息相关的方法,见下表:
方法名 功能
setindustry 设置行业
getid 获取模板id
send 发送模板消息
2 设置所属行业
templatemessage类的setindustry方法用于设置公众号所属的行业,该方法的定义如下:
/// <summary>
/// 设置行业 /// </summary>
/// <param name="username">公众号</param>
/// <param name="code1">行业代码1</param>
/// <param name="code2">行业代码2</param>
/// <returns>返回设置是否成功</returns>
public static errormessage setindustry(string username, string code1, string code2) //或者
/// <summary>
/// 设置行业 /// </summary>
/// <param name="username">公众号</param>
/// <param name="industry1">行业1</param>
/// <param name="industry2">行业2</param>
/// <returns>返回设置是否成功</returns>
public static errormessage setindustry(string username, industry industry1, industry industry2)
其中,industry为行业类,类中的静态成员包含了已知的所有行业,例如:industry.onlinegame代表了网络游戏这一行业;industry类有三个属性,分别为:code——行业代码,name——行业名称,primaryindustry——主行业。
设置所属行业的示例:
/// <summary>
/// 设置所属行业
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnsetindustry_click(object sender, eventargs e)
{
string username = lbpublicaccount.selectedvalue;
string industrycode1 = "", industrycode2 = "";
int count = 0;
foreach (listitem item in cblindustry.items)
{
if (item.selected)
{
count++;
if (count == 1)
industrycode1 = item.value;
else if (count == 2)
{
industrycode2 = item.value;
break;
}
}
}
if (count != 2)
ltrmessage.text = "请选择两个行业。";
else
{
errormessage errormessage = templatemessage.setindustry(username, industrycode1, industrycode2);
ltrmessage.text = string.format("设置所属行业{0}。{1}",
errormessage.issuccess ? "成功" : "失败",
errormessage.issuccess ? "" : errormessage.tostring());
}
}
设置所属行业示例
设置所属行业示例
3 获得模板id
templatemessage类的getid方法用于获取模板id,该方法定义如下:
/// <summary>
/// 获取模板id /// </summary>
/// <param name="username">公众号</param>
/// <param name="shorttemplateid">模板库中模板的编号,有“tm**”和“opentmtm**”等形式</param>
/// <param name="errormessage">返回获取是否成功</param>
/// <returns>返回模板id;如果获取失败,返回空字符串。</returns>
public static string getid(string username, string shorttemplateid, out errormessage errormessage)
注意:(1)如果尚未添加模板,该方法会先添加模板,然后返回模板id;(2)如果已经添加了模板,再次调用该方法,会返回一个新的不同于上次获取到的模板id。
获得模板id的示例:
/// <summary>
/// 添加并模板id /// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btngettemplateid_click(object sender, eventargs e)
{ string username = lbpublicaccount.selectedvalue;
errormessage errormessage; string templateid = templatemessage.getid(username, txttemplateidshort.text, out errormessage); if (errormessage.issuccess)
ltrmessage.text = string.format("添加并获取模板id成功。模板id:{0}", templateid); else
ltrmessage.text = string.format("添加并获取模板id失败。{0}", errormessage.tostring());
}
获得模板id示例
4 发送模板消息
templatemessage类的send方法用于发送模板消息,该方法定义如下:
/// <summary>
/// 发送模板消息 /// </summary>
/// <param name="username">公众号</param>
/// <param name="touser">接收消息的账号</param>
/// <param name="templateid">模板id</param>
/// <param name="detailurl">详情地址</param>
/// <param name="topcolor">顶端颜色</param>
/// <param name="data">数据</param>
/// <param name="errormessage">返回发送是否成功</param>
/// <returns>返回消息id;如果发送失败,返回-1。</returns>
public static long send(string username, string touser, string templateid, string detailurl, color topcolor,
tuple<string, string, color>[] data, out errormessage errormessage)
其中,data参数为tuple类型,包含模板所用的数据,data.item1为数据键,data.item2为数据值,data.item3为显示数据的颜色。
发送模板消息的示例:
/// <summary>
/// 发送模板消息
/// </summary>
/// <param name="username">公众号</param>
/// <param name="touser">接收消息的账号</param>
/// <param name="templateid">模板id</param>
/// <param name="detailurl">详情地址</param>
/// <param name="topcolor">顶端颜色</param>
/// <param name="data">数据</param>
/// <param name="errormessage">返回发送是否成功</param>
/// <returns>返回消息id;如果发送失败,返回-1。</returns>
public static long send(string username, string touser, string templateid, string detailurl, color topcolor,
tuple<string, string, color>[] data, out errormessage errormessage)
发送模板消息示例
5 接收推送模板消息发送结果事件
在发送模板消息之后,微信服务器会推送结果到公众号的指定url上,公众号服务器会接收到一条requesttemplatesendjobfinishmessage类型的请求消息。
requesttemplatesendjobfinishmessage类有以下只读属性:
/// <summary>
/// 获取消息id
/// </summary>
public long msgid { get; private set; }
/// <summary>
/// 获取群发消息的结果
/// </summary>
public string status { get; private set; }
/// <summary>
/// 获取消息是否群发成功
/// </summary>
public templatemessagesendstatusenum sendstatus
{
get
{
templatemessagesendstatusenum status;
if (status == sendfaileduserblock)
status = templatemessagesendstatusenum.userblock;
else if (status == sendfailedsystemfailed)
status = templatemessagesendstatusenum.systemfailed;
else
status = templatemessagesendstatusenum.success;
return status;
}
}
以上就是.net微信公众号开发的详细内容。
