/// <summary> /// 使用异步Action测试异步模板消息接口 /// </summary> /// <param name="checkcode"></param> /// <returns></returns> public async Task <ActionResult> TemplateMessageTest(string checkcode) { var openId = CustomMessageHandler.TemplateMessageCollection.ContainsKey(checkcode) ? CustomMessageHandler.TemplateMessageCollection[checkcode] : null; if (openId == null) { return(Content("验证码已过期或不存在!请在“盛派网络小助手”公众号输入“tm”获取验证码。")); } else { CustomMessageHandler.TemplateMessageCollection.Remove(checkcode); var templateId = "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4"; var testData = new //TestTemplateData() { first = new TemplateDataItem("【异步模板消息测试】"), keyword1 = new TemplateDataItem(openId), keyword2 = new TemplateDataItem("网页测试"), keyword3 = new TemplateDataItem(DateTime.Now.ToString("O")), remark = new TemplateDataItem("更详细信息,请到Senparc.Weixin SDK官方网站(http://zs.sasu.edu.cn)查看!") }; var result = await TemplateApi.SendTemplateMessageAsync(appId, openId, templateId, null, testData); return(Content("异步模板消息已经发送到【盛派网络小助手】公众号,请查看。此前的验证码已失效,如需继续测试,请重新获取验证码。")); } }
/// <summary> /// 发送审核通知 /// </summary> /// <param name="OpenId"></param> /// <param name="host"></param> /// <param name="currentName"></param> /// <returns></returns> public async Task SendCheckMesssage(string OpenId, string host, string currentName) { try { string templateId = await _wechatappconfigRepository.GetAll().Select(v => v.TemplateIds).FirstOrDefaultAsync(); if (templateId != null || templateId.Length != 0) { string[] ids = templateId.Split(','); string appId = AppConfig.AppId; string openId = OpenId; //string templateId = "qvt7CNXBY4FzfzdX54TvMUaOi9jZ3-tdsb2NRhVp0yg";//模版id host = host ?? "http://ga.intcov.com";//host配置 string url = host + "/GAWX/Authorization?page=302"; object data = new { first = new TemplateDataItem("店员审核通知,请您尽快审核", "#FF0000"), keyword1 = new TemplateDataItem(currentName.ToString()), keyword2 = new TemplateDataItem(DateTime.Now.ToString("yyyy-MM-dd HH:mm")) }; await TemplateApi.SendTemplateMessageAsync(appId, openId, ids[2], url, data); } } catch (Exception ex) { Logger.ErrorFormat("审核通知发送失败 error:{0} Exception:{1}", ex.Message, ex); } }
public void SendTemplateMessageAsyncTest() { var openId = base._testOpenId; var templateId = "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4"; base.TestAyncMethod(2, base._testOpenId, () => { /* * 详细内容 * {{first.DATA}} * 用户名:{{keyword1.DATA}} * 标题:{{keyword2.DATA}} * 时间:{{keyword3.DATA}} * {{remark.DATA}} */ var testData = new //TestTemplateData() { first = new TemplateDataItem(string.Format("【模板消息测试-{0}】您好,审核通过。", DateTime.Now.ToString("T"))), keyword1 = new TemplateDataItem(openId), keyword2 = new TemplateDataItem("单元测试"), keyword3 = new TemplateDataItem(DateTime.Now.ToString("O")), remark = new TemplateDataItem("更详细信息,请到Senparc.Weixin SDK官方网站(http://zs.sasu.edu.cn)查看!\r\n运行线程:" + Thread.CurrentThread.GetHashCode()) }; var result = TemplateApi.SendTemplateMessageAsync(base._appId, openId, templateId, null, testData).Result; Console.WriteLine("线程{0},结果:{1}", Thread.CurrentThread.GetHashCode(), result.errmsg); base.AsyncThreadsCollection.Remove(Thread.CurrentThread);//必须要加 }); }
private async Task PurchaseSendWXMesssageToShopKeeper(string OpenId, string host, string memberBarCode, int?finalIntegral, int?integral) { try { string templateId = await _wechatappconfigRepository.GetAll().Select(v => v.TemplateIds).FirstOrDefaultAsync(); if (templateId != null || templateId.Length != 0) { string[] ids = templateId.Split(','); //发送微信模板通知-店铺管理员 string appId = AppConfig.AppId; string openId = OpenId; //string templateId = "3Dgkz89yi8e0jXtwBUhdMSgHeZwPvHi2gz8WrD-CUA4";//模版id host = host ?? "http://ga.intcov.com";//host配置 string url = host + "/GAWX/Authorization?page=301"; object data = new { keyword1 = new TemplateDataItem(memberBarCode.ToString()), keyword2 = new TemplateDataItem(finalIntegral.ToString() + "积分"), keyword3 = new TemplateDataItem(integral.ToString() + "积分"), keyword4 = new TemplateDataItem(DateTime.Now.ToString("yyyy-MM-dd HH:mm")) }; await TemplateApi.SendTemplateMessageAsync(appId, openId, ids[0], url, data); } } catch (Exception ex) { Logger.ErrorFormat("店铺管理员发送消息通知失败 error:{0} Exception:{1}", ex.Message, ex); } }
/// <summary> /// 使用异步Action测试异步模板消息接口 /// </summary> /// <param name="checkcode"></param> /// <returns></returns> public async Task <ActionResult> TemplateMessageTest(string checkcode) { var currentCache = CacheStrategyFactory.GetObjectCacheStrategyInstance(); var cacheKey = $"TestCheckCode:{checkcode}"; var openId = await currentCache.GetAsync(cacheKey) as string;//使用缓存,如果多台服务器可以使用分布式缓存共享 if (openId.IsNullOrEmpty()) { return(Content("验证码已过期或不存在!请在“盛派网络小助手”公众号输入“tm”获取验证码。")); } else { await currentCache.RemoveFromCacheAsync(cacheKey); var templateId = "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4"; var testData = new //TestTemplateData() { first = new TemplateDataItem("【异步模板消息测试】"), keyword1 = new TemplateDataItem(openId), keyword2 = new TemplateDataItem("网页测试"), keyword3 = new TemplateDataItem(SystemTime.Now.ToString("O")), remark = new TemplateDataItem("更详细信息,请到Senparc.Weixin SDK官方网站(http://sdk.weixin.senparc.com)查看!") }; var miniProgram = new TemplateModel_MiniProgram() { appid = "wxfcb0a0031394a51c",//【盛派互动(BookHelper)】小程序 pagepath = "pages/index/index" }; var result = await TemplateApi.SendTemplateMessageAsync(appId, openId, templateId, null, testData, miniProgram); return(Content("异步模板消息已经发送到【盛派网络小助手】公众号,请查看。此前的验证码已失效,如需继续测试,请重新获取验证码。")); } }
public void AsyncSendTemplateMessageTestForBookOptmize() { WxJsonResult finalResult = null; Task.Factory.StartNew(async() => { var openId = "olPjZjsXuQPJoV0HlruZkNzKc91E";//消息目标用户的OpenId //实际生产环境中,用户信息应该从数据库或缓存中读取 var userInfo = await UserApi.InfoAsync(_appId, openId); var data = new TemplateMessage_PaySuccessNotice( "您的订单已经支付", userInfo.nickname, "1234567890", 88.ToString("c"), "模板消息测试商品", "更详细信息,请到Senparc.Weixin SDK官方网站(http://zs.sasu.edu.cn)查看!\r\n这条消息使用的是优化过的方法,且不带Url参数。使用异步方法。"); var result = await TemplateApi.SendTemplateMessageAsync(_appId, openId, data); //调用客服接口显示msgId finalResult = await CustomApi.SendTextAsync(_appId, openId, "上一条模板消息的MsgID:" + result.msgid); Assert.AreEqual(ReturnCode.请求成功, result.errcode); }); while (finalResult == null) { } }
public Task Execute(IJobExecutionContext context) { IPagedList <User> users = userService.GetUsers(string.Empty, 1, int.MaxValue); List <Task> templateMessageTasks = new List <Task>(); foreach (var user in users.Where(u => !string.IsNullOrWhiteSpace(u.WeChatOpenID))) { var templateDatas = new { first = new TemplateDataItem("你好,检测到异常报警设备"), keyword1 = new TemplateDataItem(DateTime.Now.ToString("yyyy-MM-dd HH:mm")), keyword2 = new TemplateDataItem("零度云平台"), keyword3 = new TemplateDataItem("传感器参数异常"), remark = new TemplateDataItem("请尽快查看相关设备状态。") }; var url = string.Format("http://www.xcode.me/{0}", encryptionService.Encrypt(user.WeChatOpenID, appSecret)); AccessTokenContainer.Register(appId, appSecret); var task = TemplateApi.SendTemplateMessageAsync(appId, user.WeChatOpenID, templateId, url, templateDatas); templateMessageTasks.Add(task); } return(Task.WhenAll(templateMessageTasks)); }
/// <summary> /// 发送模板消息 /// </summary> /// <param name="openId"></param> /// <param name="templateId"></param> /// <param name="modelData">一个匿名对象,其中的属性作为模板参数,如下所示: /// new /// { /// nickname = new TemplateDataItem("daiwei"), /// date = new TemplateDataItem("2018-06-12"), /// mobile = new TemplateDataItem("13610239726"), /// money = new TemplateDataItem("5.00") /// }</param> /// <param name="detailUrl"></param> public Task <SendTemplateMessageResult> SendTemplateMessageAsync(string openId, string templateId, object modelData, string detailUrl) { //var obj = new ExpandoObject() as IDictionary<string, Object>; //foreach (var pair in modelData) //{ // obj[pair.Key] = new TemplateDataItem(pair.Value); //} //TemplateApi.SendTemplateMessage(this.AccessToken, openId, ) return(TemplateApi.SendTemplateMessageAsync(this.Config.AppId, openId, templateId, detailUrl, modelData)); }
/// <summary> /// 资金到账提醒 /// </summary> public void SendMoneyToWalletTemplateMessage(string openId, string dateTime, string amount, string finallyValue, string remark, string url) { Task.Factory.StartNew(async() => { var templateMessage = new TemplateMessage.MoneyToWalletTemplateMessage(dateTime, amount, finallyValue, remark, url); var accessToken = AccessToken(); if (!string.IsNullOrEmpty(openId) && !string.IsNullOrEmpty(accessToken)) { var result = await TemplateApi.SendTemplateMessageAsync(accessToken, openId, templateMessage.TemplateId, templateMessage.Url, templateMessage); } }); return; }
/// <summary> /// 修改支付密码通知 /// </summary> public void SendChangePayPasswordTemplateMessage(string openId, string userName, string payPassword, string shopName, string url) { Task.Factory.StartNew(async() => { var templateMessage = new TemplateMessage.ChangePayPasswordTemplateMessage(userName, payPassword, shopName, url); var accessToken = AccessToken(); if (!string.IsNullOrEmpty(openId) && !string.IsNullOrEmpty(accessToken)) { var result = await TemplateApi.SendTemplateMessageAsync(accessToken, openId, templateMessage.TemplateId, templateMessage.Url, templateMessage); } }); return; }
/// <summary> /// 发生服务器错误模板消息 /// </summary> public void SendExTemplateMessage(string openId, string err, string errMessage, string url) { Task.Factory.StartNew(async() => { var templateMessage = new TemplateMessage.ExceptionAlertTemplateMessage(err, errMessage, url); var accessToken = AccessToken(); if (!string.IsNullOrEmpty(openId) && !string.IsNullOrEmpty(accessToken)) { var result = await TemplateApi.SendTemplateMessageAsync(accessToken, openId, templateMessage.TemplateId, templateMessage.Url, templateMessage); } }); return; }
/// <summary> /// 发送新订单提醒 /// </summary> /// <param name="openId"></param> /// <param name="number"></param> /// <param name="goodsName"></param> /// <param name="customerName"></param> /// <param name="customerMobile"></param> /// <param name="expressAddress"></param> /// <param name="url"></param> public void SendNewOrderTemplateMessage(string openId, string number, string goodsName, string customerName, string customerMobile, string expressAddress, string url) { Task.Factory.StartNew(async() => { var templateMessage = new TemplateMessage.NewOrderTemplateMessage(number, goodsName, customerName, customerMobile, expressAddress, url); var accessToken = AccessToken(); if (!string.IsNullOrEmpty(openId) && !string.IsNullOrEmpty(accessToken)) { var result = await TemplateApi.SendTemplateMessageAsync(accessToken, openId, templateMessage.TemplateId, templateMessage.Url, templateMessage); } }); return; }
public void CreateAsyncTest() { var openId = base._testOpenId; base.TestAyncMethod(1, openId, () => { var result = QrCodeApi.CreateAsync(base._appId, 100, 999999, QrCode_ActionName.QR_SCENE, "QrTest").Result; //Assert.AreEqual(ReturnCode.请求成功,result.errcode); Console.WriteLine("Result(T-{0}):{1}", Thread.CurrentThread.GetHashCode(), result.ToString()); //发送消息通知生成状态 var testData = new //TestTemplateData() { first = new TemplateDataItem(string.Format("【测试-{0}】QrCode单元测试完成一个线程。", SystemTime.Now.ToString("T"))), keyword1 = new TemplateDataItem(openId), keyword2 = new TemplateDataItem("QrCode测试"), keyword3 = new TemplateDataItem(SystemTime.Now.Ticks.ToString("O")), remark = new TemplateDataItem("结果:" + result.errcode.ToString()) }; var tmResult = TemplateApi.SendTemplateMessageAsync(base._appId, openId, "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4", (result.url) , testData).Result; if (result.errcode == ReturnCode.请求成功) { //下载并获得二维码 try { var fileName = Path.Combine(System.Environment.CurrentDirectory, "..\\", string.Format("qrcode-{0}.jpg", SystemTime.Now.ToString("yyyy-MM-dd HH_mm_ss"))); using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate)) { QrCodeApi.ShowQrCode(result.ticket, fs);//下载二维码 } //下载之后,文件储存在\src\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin目录下, //打开.jpg文件之后,使用微信扫一扫查看效果。 } catch { } } base.AsyncThreadsCollection.Remove(Thread.CurrentThread);//必须要加 }); }
public async Task <Result> Index([FromBody] TemplateMessage templateMessage) { var template = new WeixinTemplate(templateMessage.Url, templateMessage.TemplateId, ""); var count = templateMessage.Contents.Count; template.first = !string.IsNullOrEmpty(templateMessage.First) ? new TemplateDataItem(templateMessage.First) : null; template.remark = !string.IsNullOrEmpty(templateMessage.Remark) ? new TemplateDataItem(templateMessage.Remark) : null; //利用反射赋值 WeixinTemplate 的 keyword1, keyword2 等属性。 //有没有更好的写法呢 ?? for (var i = 0; i < count; i++) { var property = template.GetType().GetProperty($"keyword{i + 1}"); property.SetValue(template, new TemplateDataItem(templateMessage.Contents[i])); } try { var taskList = new List <Task <SendTemplateMessageResult> >(); foreach (var openId in templateMessage.OpenIds) { var task = TemplateApi.SendTemplateMessageAsync(WeixinSetting.WeixinAppId, openId, template); taskList.Add(task); } var results = await Task.WhenAll(taskList); //获取发送模板失败的用户List return(new SuccessResult { Lists = results.Where(sendResult => sendResult.ErrorCodeValue != 0).ToList() }); } catch (Exception) { return(new ErrorResult { Lists = new List <SendTemplateMessageResult>() }); } }
/// <summary> /// 使用异步Action测试异步模板消息接口 /// </summary> /// <param name="checkcode"></param> /// <returns></returns> public async Task <ActionResult> TemplateMessageTest(string checkcode) { var openId = CustomMessageHandler.TemplateMessageCollection.ContainsKey(checkcode) ? CustomMessageHandler.TemplateMessageCollection[checkcode] : null; if (openId == null) { return(Content("验证码已过期或不存在!请在“盛派网络小助手”公众号输入“tm”获取验证码。")); } else { CustomMessageHandler.TemplateMessageCollection.Remove(checkcode); var templateId = "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4"; var testData = new //TestTemplateData() { first = new TemplateDataItem("【异步模板消息测试】"), keyword1 = new TemplateDataItem(openId), keyword2 = new TemplateDataItem("网页测试"), keyword3 = new TemplateDataItem(DateTime.Now.ToString("O")), remark = new TemplateDataItem("更详细信息,请到Senparc.Weixin SDK官方网站(http://sdk.weixin.senparc.com)查看!") }; var miniProgram = new TempleteModel_MiniProgram() { appid = "wxfcb0a0031394a51c",//【盛派互动(BookHelper)】小程序 pagepath = "pages/index/index" }; var result = await TemplateApi.SendTemplateMessageAsync(appId, openId, templateId, null, testData, miniProgram); return(Content("异步模板消息已经发送到【盛派网络小助手】公众号,请查看。此前的验证码已失效,如需继续测试,请重新获取验证码。")); } }
/// <summary> /// 批量发送模板消息 /// </summary> /// <param name="appId"></param> /// <param name="openIds"></param> /// <param name="templateId"></param> /// <param name="data"></param> /// <param name="url"></param> /// <returns></returns> public async Task <int> SendTemplateMessagesAsync(string appId, string[] openIds, string templateId, Dictionary <string, TemplateDataItem> data, string url = null) { int errorCount = 0; foreach (var openId in openIds) { try { var result = await TemplateApi.SendTemplateMessageAsync(appId, openId, templateId, url, data); if (result.errcode != ReturnCode.请求成功) { errorCount++; } } catch (Exception ex) { errorCount++; } } return(errorCount); }
private void Send <T>(string openid, string templateCode, T data, Func <string, T, string> format, string appName = null) { var wxApp = appName == null?Options.CurrentValue.GetDefaultMp() : Options.CurrentValue.Get(appName); if (wxApp == null || wxApp.AppType != WxAppType.MP) { throw new Exception("appName错误或微信配置异常"); } var model = Options.CurrentValue.Templates.FirstOrDefault(r => r.Code.EqualsIgnoreCase(templateCode)); if (model == null) { throw new Exception($"找不到微信消息模板:{templateCode}"); } if (model.TemplateId.IsNullOrWhiteSpace()) { // 模板id 为空则不发送 return; } var keys = TemplateDic.GetOrDefault(model.TemplateId); if (keys.IsNullOrEmpty()) { // 清除,重新加载 TemplateDic.Clear(); var res = TemplateApi.GetPrivateTemplateAsync(wxApp.AppId).GetAwaiter().GetResult(); var reg = new Regex(@"\{\{[^\{\}]{1,}.DATA\}\}"); // 正则匹配查找模板中的键 foreach (var item in res.template_list) { var matches = reg.Matches(item.content); var list = new List <string>(); foreach (Match math in matches) { if (!math.Success) { continue; } var v = math.Value.AsSpan().Slice(2); v = v.Slice(0, v.Length - 7); list.Add(v.ToString()); } if (list.Count == 0) { throw new Exception($"模板消息:{item.title},内容错误:{item.content}"); } TemplateDic.TryAdd(item.template_id, list); } keys = TemplateDic.GetOrDefault(model.TemplateId); } if (keys.IsNullOrEmpty()) { throw new Exception($"错误的模板消息配置,code:{templateCode},templateId:{model.TemplateId}"); } var colorReg = new Regex("^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$"); var dataDic = new Dictionary <string, object>(); for (int i = 0; i < keys.Count; i++) { string value = ""; string color = ""; if (model.Datas.Count >= i + 1) { value = model.Datas[i]; var span = value.AsSpan(); if (span.StartsWith(new[] { '#' }) && span[7] == '|') { color = span.Slice(0, 7).ToString(); if (!colorReg.IsMatch(color)) { color = ""; } value = span.Slice(8).ToString(); } } if (data != null && !value.IsNullOrWhiteSpace()) { value = format(value, data); } dataDic.Add(keys[i], new { value, color }); } var url = model.Url; if (!url.IsNullOrWhiteSpace()) { url = format(url, data); } if (!string.IsNullOrEmpty(model.MiniProgramPagePath)) { model.MiniProgramPagePath = format(model.MiniProgramPagePath, data); } TemplateApi.SendTemplateMessageAsync(wxApp.AppId, openid, model.TemplateId, url, dataDic, new TemplateModel_MiniProgram { appid = model.MiniProgramAppId, pagepath = model.MiniProgramPagePath }); }
private Task <SendTemplateMessageResult> Send(WeixinTemplate_PaySuccess templateData, string t) => TemplateApi.SendTemplateMessageAsync(WeixinSetting.WeixinAppId, t, templateData);