public void TemplateMessageDataTest() { var data = new TemplateMessageData(); data.Add("Key1", new TemplateMessageDataValue("this is value1")); data.Add("Key2", new TemplateMessageDataValue("this is value2")); data.Add("Key3", new TemplateMessageDataValue("this is value3")); data.Add("Key4", new TemplateMessageDataValue("this is value4")); var json = data.ToJson(true); Console.WriteLine(json); var exceptStr = @"{ ""Key1"": { ""value"": ""this is value1"" }, ""Key2"": { ""value"": ""this is value2"" }, ""Key3"": { ""value"": ""this is value3"" }, ""Key4"": { ""value"": ""this is value4"" } }"; Assert.AreEqual(exceptStr, json); }
/// <summary> /// 动态点赞通知,模板编号:579 /// </summary> /// <param name="toUser">接收者(用户)的 openid</param> /// <param name="templateId">消息模板Id</param> /// <param name="name">点赞用户,20个以内字符</param> /// <param name="date">点赞时间,4小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01</param> /// <param name="page">点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。</param> public static WxJsonResult SendGoodNotice(string toUser, string templateId, string name, string date, string page) { var data = new TemplateMessageData(); data.Add("name1", new TemplateMessageDataValue(name)); data.Add("date2", new TemplateMessageDataValue(date)); return(MessageApi.SendSubscribe(weixinAppId, toUser, templateId, data, page)); }
/// <summary> /// 新的评论提醒 ,模板编号:484 /// </summary> /// <param name="toUser">接收者(用户)的 openid</param> /// <param name="templateId">消息模板Id</param> /// <param name="title">文章标题,20个以内字符</param> /// <param name="desc">评论内容,20个以内字符</param> /// <param name="date">评论时间,4小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01</param> /// <param name="userNick">评论用户,20个以内字符</param> /// <param name="page"></param> public static WxJsonResult SendRemarkNotice(string toUser, string templateId, string title, string desc, string date, string userNick, string page) { var data = new TemplateMessageData(); data.Add("thing1", new TemplateMessageDataValue(title)); data.Add("thing2", new TemplateMessageDataValue(desc)); data.Add("time3", new TemplateMessageDataValue(date)); data.Add("thing5", new TemplateMessageDataValue(userNick)); return(MessageApi.SendSubscribe(weixinAppId, toUser, templateId, data, page)); }
public string SendTemplateMessage([FromBody] TemplateMessageData data) { try { string postData = "touser="******"&template_id=" + data.template_id; postData += "&page=" + data.page; postData += "&form_id=" + data.form_id; postData += "&data=" + data.data; postData += "&color=" + data.color; postData += "&emphasis_keyword=" + data.emphasis_keyword; PostData pd = new PostData(); pd.touser = data.touser; pd.template_id = data.template_id; pd.page = data.page; pd.form_id = data.form_id; pd.data = new JavaScriptSerializer().Deserialize(data.data, typeof(Data)); /* * pd.data = new Data(); * pd.data.keyword1 = new DataItem("339208499", "#173177"); * pd.data.keyword2 = new DataItem("2015年01月05日 12:30", "#173177"); * pd.data.keyword3 = new DataItem("粤海喜来登酒店", "#173177"); * pd.data.keyword4 = new DataItem("广州市天河区天河路208号", "#173177"); * */ pd.color = data.color; pd.emphasis_keyword = data.emphasis_keyword; ASCIIEncoding encoding = new ASCIIEncoding(); byte[] byteArray = encoding.GetBytes(new JavaScriptSerializer().Serialize(pd)); string url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + data.AccessToken; System.Net.WebRequest wReq = HttpWebRequest.Create(url); wReq.Method = "POST"; wReq.ContentType = "application/x-www-form-urlencoded"; //wReq.ContentLength = byteArray.Length; //请求流 Stream dataStream = wReq.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //获取响应数据 System.Net.WebResponse wResp = wReq.GetResponse(); System.IO.Stream respStream = wResp.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8)) { return(reader.ReadToEnd()); } } catch (System.Exception ex) { } return(""); }
/// <summary> /// 资讯早报通知,模板编号:269 /// </summary> /// <param name="toUser">接收者(用户)的 openid</param> /// <param name="templateId">消息模板Id</param> /// <param name="title">更新内容,20个以内字符</param> /// <param name="remark">备注,20个以内字符</param> /// <param name="page">点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。</param> public static WxJsonResult SendNewsMorningNotice(string toUser, string templateId, string title, string remark, string page) { var data = new TemplateMessageData(); data["thing1"] = new TemplateMessageDataValue(title); data["thing2"] = new TemplateMessageDataValue(remark); var submitData = new { touser = toUser, template_id = templateId, page = page, data = data }; return(MessageApi.SendSubscribe(weixinAppId, toUser, templateId, data, page)); }
/// <summary> /// 留言提醒,模板编号:1069 /// </summary> /// <param name="toUser">接收者(用户)的 openid</param> /// <param name="templateId">消息模板Id</param> /// <param name="text">留言内容,20个以内字符</param> /// <param name="date">留言时间,4小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01</param> /// <param name="page">点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。</param> public static WxJsonResult SendCommentNotice(string toUser, string templateId, string text, string date, string page) { var data = new TemplateMessageData(); data["thing1"] = new TemplateMessageDataValue(text); data["time2"] = new TemplateMessageDataValue(date); var submitData = new { touser = toUser, template_id = templateId, page = page, data = data }; return(MessageApi.SendSubscribe(weixinAppId, toUser, templateId, data, page)); }
public static async Task <WxJsonResult> BizSendAsync(string accessTokenOrAppId, string toUser, string templateId, TemplateMessageData data, string page = null, TemplateModel_MiniProgram miniProgram = null, int timeOut = Config.TIME_OUT) { return(await ApiHandlerWapper.TryCommonApiAsync(accessToken => { string urlFormat = Config.ApiMpHost + "/cgi-bin/message/subscribe/bizsend?access_token={0}"; var submitData = new { touser = toUser, template_id = templateId, page = page, data = data, miniprogram = miniProgram, }; return CommonJsonSend.SendAsync(accessToken, urlFormat, submitData, timeOut: timeOut); }, accessTokenOrAppId)); }
/// <summary> /// 订阅消息 /// </summary> /// <param name="sessionId"></param> /// <param name="templateId"></param> /// <returns></returns> public async Task <IActionResult> SubscribeMessage(string sessionId, string templateId = "xWclWkOqDrxEgWF4DExmb9yUe10pfmSSt2KM6pY7ZlU") { var sessionBag = SessionContainer.GetSession(sessionId); if (sessionBag == null) { return(Json(new { success = false, msg = "请先登录!" })); } await Task.Delay(1000);//停1秒钟,实际开发过程中可以将权限存入数据库,任意时间发送。 var templateMessageData = new TemplateMessageData(); templateMessageData["thing1"] = new TemplateMessageDataValue("微信公众号+小程序快速开发"); templateMessageData["time5"] = new TemplateMessageDataValue(SystemTime.Now.ToString("yyyy年MM月dd日 HH:mm")); templateMessageData["thing6"] = new TemplateMessageDataValue("盛派网络研究院"); templateMessageData["thing7"] = new TemplateMessageDataValue("第二部分课程正在准备中,尽情期待"); var page = "pages/index/index"; //templateId也可以由后端指定 try { var result = await Weixin.WxOpen.AdvancedAPIs.MessageApi.SendSubscribeAsync(WxOpenAppId, sessionBag.OpenId, templateId, templateMessageData, page); if (result.errcode == ReturnCode.请求成功) { return(Json(new { success = true, msg = "消息已发送,请注意查收" })); } else { return(Json(new { success = false, msg = result.errmsg })); } } catch (Exception ex) { return(Json(new { success = false, msg = ex.Message })); } }
/// <summary> /// 发送订阅消息 /// </summary> /// <param name="accessTokenOrAppId">AccessToken或AppId(推荐使用AppId,需要先注册)</param> /// <param name="toUser">接收者(用户)的 openid</param> /// <param name="templateId">所需下发的订阅模板id</param> /// <param name="data">模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }</param> /// <param name="page">点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。</param> /// <param name="miniprogramState">跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版</param> /// <param name="lang">进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN</param> /// <param name="timeOut"></param> /// <returns></returns> public static WxJsonResult SendSubscribe(string accessTokenOrAppId, string toUser, string templateId, TemplateMessageData data, string page = null, string miniprogramState = null, string lang = null, int timeOut = Config.TIME_OUT) { return(WxOpenApiHandlerWapper.TryCommonApi(accessToken => { string urlFormat = Config.ApiMpHost + "/cgi-bin/message/subscribe/send?access_token={0}"; var submitData = new { touser = toUser, template_id = templateId, page = page, data = data, miniprogram_state = miniprogramState, lang = lang }; return CommonJsonSend.Send(accessToken, urlFormat, submitData, timeOut: timeOut, jsonSetting: new CO2NET.Helpers.Serializers.JsonSetting() { IgnoreNulls = true }); }, accessTokenOrAppId)); }
public static WxJsonResult SendSubscribe(string accessTokenOrAppId, string toUser, string templateId, TemplateMessageData data, string page = null, int timeOut = Config.TIME_OUT) { return(WxOpenApiHandlerWapper.TryCommonApi(accessToken => { string urlFormat = Config.ApiMpHost + "/cgi-bin/message/subscribe/send?access_token={0}"; var submitData = new { touser = toUser, template_id = templateId, page = page, data = data }; return CommonJsonSend.Send(accessToken, urlFormat, submitData, timeOut: timeOut); }, accessTokenOrAppId)); }