微信開發第六篇伺服器主動傳送資訊
上幾篇文章基本是介紹有手機客戶端觸發的事件在先,這種有手機微信客戶端觸發的請求,咱們的伺服器被動響應,這種模式我個人理解為被動傳送資訊。
但是除此之外我們有時間要讓使用者推送訊息,比如向家長每天傳送孩子的作業資訊。這就要用到模板訊息了
對於模板訊息首先要新增
進入模板選擇行業之後就要等兩天才能用模板訊息
能用模板訊息之後 根據自己的情況,檢視模板選擇適用於自己的模板 如果沒有可以自己定義 只要微信官方稽核通過就可以用(我申請的好像說是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<WeiXinUserInfo>(getInfoUrl);
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<TemplateMessageResult>(string.Format(sendUrl, accessToken), json);
resultes = result.errmsg;
break;
}
if (resultes=="ok")
{
return true;
}
else
{
return false;
}
}
如果知道了使用者的openid,這樣就可以使用模板訊息,主動向手機客戶端傳送訊息了。