public static int SendErrorMessage(string msg, string stacktrace) { var template = @"<?Tittle:ApplicationError?> <?FullMessage: Message: <%Message%> StackTrace: <%StackTrace%> ?> <?ShortMessage: Test?> "; var message = TemplateMessage.GetMessage(template, new { Message = msg, StackTrace = stacktrace }); var adresses = new MessageAddressCollection(); adresses.EMails.FromAddress = "*****@*****.**"; adresses.EMails.ToAddresses.Add("*****@*****.**"); //adresses.Phones.FromAddress = "89150819401"; //adresses.Phones.ToAddresses.Add("89150819401"); MessageSender.SendMessage(adresses, message); return(message.MessageID); }
public void TestMethod4() { var url = $"https://meiquewechat.microfeel.net/templatemessage/index"; var templateMessage = new TemplateMessage { // 联系人:{ { keyword1.DATA} } // 联系电话:{ { keyword2.DATA} } // 安装地址:{ { keyword3.DATA} } Contents = new List <string>() { "张伟", "18624438893", "哈尔滨恒盛豪庭4栋1000" }, OpenIds = new List <string>() { "oOeJg1kP5_HEwTEV3I59jwqa19vI" }, First = "安装提醒", Url = "https://meiquewechat.microfeel.net/Order/OrderDetail?billID=323a6836-6e67-4e82-8549-208c4a143a16", TemplateId = "YZ5vsFVwOrWIjAb-5q9NeQa842kipYKaCMueg0srQMI", }; var result = url.PostJsonAsync(templateMessage).ReceiveString().Result; var list = JsonConvert.DeserializeObject <List <SendTemplateMessageResult> >(result); Debug.Assert(list.Count == 0, result); }
public void Convert_TemplateMessageWithCustomIConfirmTemplate_ConvertedToConfirmTemplate() { TestTemplateMessage message = new TestTemplateMessage() { Template = new TestConfirmTemplate() }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); Assert.AreNotEqual(message, messages[0]); TemplateMessage templateMessage = messages[0] as TemplateMessage; Assert.AreEqual("AlternativeText", templateMessage.AlternativeText); ConfirmTemplate template = templateMessage.Template as ConfirmTemplate; Assert.AreEqual("ConfirmText", template.Text); MessageAction okAction = template.OkAction as MessageAction; Assert.AreEqual("MessageLabel", okAction.Label); Assert.AreEqual("MessageText", okAction.Text); UriAction cancelAction = template.CancelAction as UriAction; Assert.AreEqual("UriLabel", cancelAction.Label); Assert.AreEqual(new Uri("tel://uri"), cancelAction.Url); }
public void Convert_TemplateMessageWithConfirmTemplateAndMessageActionLabelIsNull_ThrowsException() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ConfirmTemplate() { Text = "ConfirmText", OkAction = new MessageAction() { Text = "PostbackText" }, CancelAction = new UriAction() { Label = "PostbackLabel", Url = new Uri("http://foo.bar") } } }; ExceptionAssert.Throws <InvalidOperationException>("The label cannot be null.", () => { MessageConverter.Convert(new ISendMessage[] { message }); }); }
private void update_code(string appId, string token) { if (token.Length < 10) { return; } JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary <string, object> csInfo = new Dictionary <string, object>(); csInfo.Add("component_appid", appId);// string menuInfo = serializer.Serialize(csInfo); string postUrl = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=" + token; string val = TemplateMessage.PostWebRequest(postUrl, menuInfo); Dictionary <string, object> dToken = (Dictionary <string, object>)serializer.DeserializeObject(val); string pre_auth_code = ""; object value; if (dToken.TryGetValue("pre_auth_code", out value)) { pre_auth_code = value.ToString(); Hashtable ht = new Hashtable(); ht["Code"] = pre_auth_code; DataFactory.SqlDataBase().UpdateByHashtable("Wx_PlatformInfo", "AppId", appId, ht); } }
public void Convert_TemplateMessageWithButtonsTemplateAndPostbackActionDataIsNull_ThrowsException() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ButtonsTemplate() { ThumbnailUrl = new Uri("https://foo.bar"), Title = "ButtonsTitle", Text = "ButtonsText", Actions = new ITemplateAction[] { new PostbackAction() { Label = "PostbackLabel", Text = "PostbackText" } } } }; ExceptionAssert.Throws <InvalidOperationException>("The data cannot be null.", () => { MessageConverter.Convert(new ISendMessage[] { message }); }); }
public void Convert_TemplateMessageWithCustomICarouselTemplate_ConvertedToCarouselTemplate() { TestTemplateMessage message = new TestTemplateMessage() { Template = new TestCarouselTemplate() }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); Assert.AreNotEqual(message, messages[0]); TemplateMessage templateMessage = messages[0] as TemplateMessage; Assert.AreEqual("AlternativeText", templateMessage.AlternativeText); CarouselTemplate template = templateMessage.Template as CarouselTemplate; CarouselColumn column = template.Columns.First() as CarouselColumn; Assert.AreEqual(new Uri("https://carousel.url"), column.ThumbnailUrl); Assert.AreEqual("CarouselTitle", column.Title); Assert.AreEqual("CarouselText", column.Text); ITemplateAction[] actions = column.Actions.ToArray(); MessageAction action = actions[0] as MessageAction; Assert.AreEqual("MessageLabel", action.Label); Assert.AreEqual("MessageText", action.Text); }
public void TestMethod3() { var url = $"https://meiquewechat.microfeel.net/templatemessage/index"; var templateMessage = new TemplateMessage { // 姓名:{ { keyword1.DATA} } // 联系方式:{ { keyword2.DATA} } // 送货地点:{ { keyword3.DATA} } // 商品名称:{ { keyword4.DATA} } // 商品数量:{ { keyword5.DATA} } Contents = new List <string>() { "张伟", "18817716666", "哈尔滨恒盛豪庭4栋1000", "1号商品", "50" }, OpenIds = new List <string>() { "oOeJg1kP5_HEwTEV3I59jwqa19vI" }, First = "亲爱的送货员,以下是订单详情,请及时送达", Remark = "如有疑问请拨打电话18817716666", Url = "https://meiquewechat.microfeel.net/Order/OrderDetail?billID=323a6836-6e67-4e82-8549-208c4a143a16", TemplateId = "WOhVMPZWgLm3awaWiJ0Cv5INuvGf2Baz91Doo5uks1k", }; var result = url.PostJsonAsync(templateMessage).ReceiveString().Result; var list = JsonConvert.DeserializeObject <List <SendTemplateMessageResult> >(result); Debug.Assert(list.Count == 0, result); }
public void ShouldConvertCustomITemplateMessageToTemplateMessage() { var message = new TestTemplateMessage() { Template = new TestButtonsTemplate() }; var templateMessage = TemplateMessage.Convert(message); Assert.AreNotEqual(message, templateMessage); Assert.AreEqual("AlternativeText", templateMessage.AlternativeText); var template = templateMessage.Template as ButtonsTemplate; Assert.AreEqual(new Uri("https://bar.foo"), template.ThumbnailUrl); Assert.AreEqual("ButtonsTitle", template.Title); Assert.AreEqual("ButtonsText", template.Text); var actions = template.Actions.ToArray(); var action = actions[0] as PostbackAction; Assert.AreEqual("PostbackLabel", action.Label); Assert.AreEqual("PostbackData", action.Data); Assert.AreEqual("PostbackText", action.Text); }
public void ShouldPreserveInstanceWhenValueIsTemplateMessage() { var message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ButtonsTemplate() { ThumbnailUrl = new Uri("https://foo.bar"), Title = "ButtonsTitle", Text = "ButtonsText", Actions = new[] { new PostbackAction() { Label = "PostbackLabel", Text = "PostbackText", Data = "PostbackData", } } } }; var templateMessage = TemplateMessage.Convert(message); Assert.AreSame(message, templateMessage); var buttonsTemplate = templateMessage.Template as IButtonsTemplate; Assert.AreSame(message.Template, buttonsTemplate); var action = buttonsTemplate.Actions.First(); Assert.AreSame(action, ((ButtonsTemplate)message.Template).Actions.First()); }
public static void SendMessage(string accessTocken, TemplateMessage templateMessage) { StringBuilder builder = new StringBuilder("{"); builder.AppendFormat("\"touser\":\"{0}\",", templateMessage.Touser); builder.AppendFormat("\"template_id\":\"{0}\",", templateMessage.TemplateId); builder.AppendFormat("\"url\":\"{0}\",", templateMessage.Url); builder.AppendFormat("\"topcolor\":\"{0}\",", templateMessage.Topcolor); builder.Append("\"data\":{"); foreach (TemplateMessage.MessagePart part in templateMessage.Data) { builder.AppendFormat("\"{0}\":{{\"value\":\"{1}\",\"color\":\"{2}\"}},", part.Name, part.Value, part.Color); } builder.Remove(builder.Length - 1, 1); builder.Append("}}"); WebUtils utils = new WebUtils(); string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessTocken; string response = utils.DoPost(url, builder.ToString()); //日志 //StreamWriter writer = File.AppendText(HttpContext.Current.Server.MapPath("~/log/" + DateTime.Now.Ticks + "Template_Send.txt")); //writer.WriteLine(url); //writer.WriteLine(builder.ToString()); //writer.WriteLine(response); //writer.WriteLine(DateTime.Now); //writer.Flush(); //writer.Close(); Log.Debug("TemplateApi", "url:" + url + " value:" + builder.ToString() + " response:" + response); }
/// <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()); } }
/// <summary> /// 发送模板消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSend_Click(object sender, EventArgs e) { if (rblUser.SelectedIndex >= 0 && rblTemplates.SelectedIndex > 0) { string userName = lbPublicAccount.SelectedValue; string openId = rblUser.SelectedValue; string templateId = rblTemplates.SelectedValue; string title = txtTitle.Text; string name = txtUserName.Text; string time = DateTime.Now.ToString(); Tuple <string, string, Color>[] data = new Tuple <string, string, Color>[] { new Tuple <string, string, Color>("title", title, Color.Blue), new Tuple <string, string, Color>("username", name, Color.Green), new Tuple <string, string, Color>("time", time, Color.Red) }; ErrorMessage errorMessage; long msgId = TemplateMessage.Send(userName, rblUser.SelectedValue, templateId, "", Color.Black, data, out errorMessage); if (errorMessage.IsSuccess) { ltrMessage.Text = string.Format("发送模板消息成功。消息id:{0}", msgId); } else { ltrMessage.Text = string.Format("发送模板消息失败。{0}", errorMessage); } } }
/// <summary> /// 画像カルーセルテンプレート追加 /// </summary> /// <param name="altText">テキスト</param> /// <param name="templateActionFactoryService">アクション作成用クラス</param> public MessageFactoryService AddImageCarouselTemplateMessage( TemplateImageCarouselColumnFactoryService templateimageCarouselColumnFactoryService, string altText ) { Trace.TraceInformation("Start"); if (!this.RegulateMessageArray()) { Trace.TraceWarning("Regulate Message Array is False"); Trace.TraceInformation("End"); return(this); } MessageBase templateMessage = new TemplateMessage() { altText = altText, template = new ImageCarouselTemplate() { columns = templateimageCarouselColumnFactoryService.Columns, } }; this.Messages[this.Messages.Length - 1] = templateMessage; Trace.TraceInformation("End"); return(this); }
public void Convert_TemplateMessageWithCarouselTemplateAndColumnTextIsNull_ThrowsException() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new CarouselTemplate() { Columns = new ICarouselColumn[] { new CarouselColumn() { ThumbnailUrl = new Uri("https://foo.bar"), Title = "CarouselTitle", Actions = new ITemplateAction[] { new MessageAction() { Label = "PostbackLabel", Text = "PostbackText" } } } } } }; ExceptionAssert.Throws <InvalidOperationException>("The text cannot be null.", () => { MessageConverter.Convert(new ISendMessage[] { message }); }); }
public void TestMethod2() { var url = $"https://meiquewechat.microfeel.net/templatemessage/index"; var templateMessage = new TemplateMessage { // 订单号:{ { keyword1.DATA} } // 订单状态:{ { keyword2.DATA} } // 商品名称:{ { keyword3.DATA} } Contents = new List <string>() { "43535643656456456", "待处理", "1号商品" }, OpenIds = new List <string>() { "oOeJg1kP5_HEwTEV3I59jwqa19vI" }, First = "您收到一份订单", Remark = "请您尽快处理!", Url = "https://meiquewechat.microfeel.net/Order/OrderDetail?billID=323a6836-6e67-4e82-8549-208c4a143a16", TemplateId = "gcu_pgCPfKq51xBhB9oQtkK0KoK-g6aYL6Y5ljlwqRk", }; var result = url.PostJsonAsync(templateMessage).ReceiveString().Result; var list = JsonConvert.DeserializeObject <List <SendTemplateMessageResult> >(result); Debug.Assert(list.Count == 0, result); }
public void Convert_TemplateMessageWithCustomIButtonsTemplate_ConvertedToConfirmTemplate() { TestTemplateMessage message = new TestTemplateMessage() { Template = new TestButtonsTemplate() }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); Assert.AreNotEqual(message, messages[0]); TemplateMessage templateMessage = messages[0] as TemplateMessage; Assert.AreEqual("AlternativeText", templateMessage.AlternativeText); ButtonsTemplate template = templateMessage.Template as ButtonsTemplate; Assert.AreEqual(new Uri("https://bar.foo"), template.ThumbnailUrl); Assert.AreEqual("ButtonsTitle", template.Title); Assert.AreEqual("ButtonsText", template.Text); ITemplateAction[] actions = template.Actions.ToArray(); PostbackAction action = actions[0] as PostbackAction; Assert.AreEqual("PostbackLabel", action.Label); Assert.AreEqual("PostbackData", action.Data); Assert.AreEqual("PostbackText", action.Text); }
private void update_token(string appId, string appsecret, string ticket) { JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary <string, object> csInfo = new Dictionary <string, object>(); csInfo.Add("component_appid", appId);// csInfo.Add("component_appsecret", appsecret); csInfo.Add("component_verify_ticket", ticket); string menuInfo = serializer.Serialize(csInfo); string postUrl = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"; string val = TemplateMessage.PostWebRequest(postUrl, menuInfo); Dictionary <string, object> dToken = (Dictionary <string, object>)serializer.DeserializeObject(val); string component_access_token = ""; object value; if (dToken.TryGetValue("component_access_token", out value)) { component_access_token = value.ToString(); Hashtable ht = new Hashtable(); ht["Token"] = component_access_token; ht["Ticket"] = ticket; ht["CreateTime"] = DateTime.Now; DataFactory.SqlDataBase().UpdateByHashtable("Wx_PlatformInfo", "AppId", appId, ht); } }
public void TestMethod1() { var url = $"https://meiquewechat.microfeel.net/templatemessage/index"; var templateMessage = new TemplateMessage { /* * 商品名称:{{keyword1.DATA}} * 商品价格:{{keyword2.DATA}} * 商品数量:{{keyword3.DATA}} * 下单时间:{{keyword4.DATA}} */ Contents = new List <string>() { "1号商品", "30", "40", "2018-10-19" }, OpenIds = new List <string>() { "oOeJg1kP5_HEwTEV3I59jwqa19vI" }, First = "您收到一份客户预订单", Remark = "可能需要提前备货", Url = "https://meiquewechat.microfeel.net/Order/OrderDetail?billID=323a6836-6e67-4e82-8549-208c4a143a16", TemplateId = "MSaGCBTSTNWzKSn9utOq_5BvnZr9uE5ugxrnhAT7xUU", }; var result = url.PostJsonAsync(templateMessage).ReceiveString().Result; var list = JsonConvert.DeserializeObject <List <SendTemplateMessageResult> >(result); Debug.Assert(list.Count == 0, result); }
public Boolean RemoveTemplate(long templateID) { using (ISession session = NHSessionHelper.GetSession()) { try { session.BeginTransaction(); DatabaseContext dc = new lm.Notification.Core.DataLayer.DatabaseContext(session); TemplateMessage t = session.Get <TemplateMessage>(templateID); if (t != null && t.ID > 0) { session.Delete(t); session.CommitTransaction(); return(true); } return(false); } catch (Exception ex) { session.RollbackTransaction(); return(false); } } }
public void ShouldNotThrowExceptionWhenValueIsImageCarouselTemplate() { var message = new TemplateMessage() { Template = new ImageCarouselTemplate() }; }
/// <summary> /// カルーセルテンプレート追加 /// </summary> /// <param name="altText">テキスト</param> /// <param name="templateActionFactoryService">アクション作成用クラス</param> public MessageFactoryService AddCarouselTemplateMessage( TemplateCarouselColumnFactoryService templateCarouselColumnFactoryService, string altText, bool isImageAspectSquare = false, bool isImageSizeCover = true ) { Trace.TraceInformation("Start"); if (!this.RegulateMessageArray()) { Trace.TraceWarning("Regulate Message Array is False"); Trace.TraceInformation("End"); return(this); } MessageBase templateMessage = new TemplateMessage() { altText = altText, template = new CarouselTemplate() { columns = templateCarouselColumnFactoryService.Columns, imageAspectRatio = isImageAspectSquare ? "square" : "rectangle", imageSize = isImageSizeCover ? "cover" : "contain" } }; this.Messages[this.Messages.Length - 1] = templateMessage; Trace.TraceInformation("End"); return(this); }
public void ShouldNotThrowExceptionWhenValueIsButtonsTemplate() { var message = new TemplateMessage() { Template = new ButtonsTemplate() }; }
public void ShouldNotThrowExceptionWhenValueIsConfirmTemplate() { var message = new TemplateMessage() { Template = new ConfirmTemplate() }; }
public void SendTemplateMessage(TemplateMessage request, TemplateMessageResponse response) { AtResponse wxr = GetAcc(); if (String.IsNullOrEmpty(wxr.Expires_in)) { throw new WeChatException("GET_ACCESSTOKEN_FAIL", "获取AccessToken失败"); } Hashtable s1 = new Hashtable { { @"keynote1", request.keynote1 }, { @"keynote2", request.keynote2 } }; string data = XmlAndJsonToHash.HashTableToXml(s1); Hashtable s2 = new Hashtable { { @"touser", request.touser }, { @"template_id", request.template_id }, { @"url", request.url }, { @"data", data } }; string postData = XmlAndJsonToHash.HashTableToXml(s2); String wxResult = HttpRequestUtil.HttpPost(string.Format(TemplateMessageUrl, wxr.Access_token), postData); TmResponse tr = JsonHelper.Deserialize <TmResponse>(wxResult); if (tr.errmsg.ToUpper() == "OK") { response.errcode = tr.errcode; response.errmsg = tr.errmsg; response.ResponseStatus.ErrorCode = "OK"; } else { throw new WeChatException("SendTemplateMessage_fail", "发送模板消息失败"); } }
/// <summary> /// Handles errors at template compile time, typically related to parsing issues. /// </summary> /// <param name="msg">The message from Antlr.</param> public void CompiletimeError(TemplateMessage msg) { if (msg == null) { ThrowUnhandledError("CompiletimeError", null); return; } var helper = new MessageHelper(msg); var errorDescription = string.Format( CultureInfo.CurrentCulture, Strings.CompiletimeExceptionWrapper, helper.ErrorDescription); var errors = new[] { new ParseError( helper.ErrorExtent, "CompiletimeError", errorDescription) }; ErrorContext.ThrowTerminatingError( new ErrorRecord( new ParseException(errors), "CompiletimeError", ErrorCategory.ParserError, msg.Self)); }
public void Constructor_SerializedCorrectly() { TemplateMessage message = new TemplateMessage() { AlternativeText = "Alternative", Template = new ConfirmTemplate { Text = "Confirm", OkAction = new UriAction() { Label = "OkLabel", Url = new Uri("https://foo.bar") }, CancelAction = new PostbackAction() { Label = "CancelLabel", Data = "Postback", Text = "CancelText" } } }; string serialized = JsonConvert.SerializeObject(message); Assert.AreEqual(@"{""type"":""template"",""altText"":""Alternative"",""template"":{""type"":""confirm"",""text"":""Confirm"",""actions"":[{""type"":""uri"",""label"":""OkLabel"",""uri"":""https://foo.bar""},{""type"":""postback"",""label"":""CancelLabel"",""data"":""Postback"",""text"":""CancelText""}]}}", serialized); }
public void Template_SetToCarouselTemplate_ThrowsNoException() { TemplateMessage message = new TemplateMessage() { Template = new CarouselTemplate() }; }
public void Template_SetToConfirmTemplate_ThrowsNoException() { TemplateMessage message = new TemplateMessage() { Template = new ConfirmTemplate() }; }
public void Template_SetToButtonsTemplate_ThrowsNoException() { TemplateMessage message = new TemplateMessage() { Template = new ButtonsTemplate() }; }
public void TemplateMessageTest() { var t = new TemplateMessage(1, "M1"); t.Text = "WWW"; var t2 = engine.SaveTemplateMessage(t); t2 = engine.GetTemplateMessage(t2.Id); Assert.AreEqual(t.Title, t2.Title); Assert.AreEqual(t.ProjectId, t2.ProjectId); Assert.AreEqual(t.Text, t2.Text); Assert.AreNotEqual(t.CreateBy, default(Guid)); Assert.AreNotEqual(t.CreateOn, default(DateTime)); foreach (var d in engine.GetTemplateMessages(1)) { engine.RemoveTemplateMessage(d.Id); } }