/// <summary> /// 发送信息 /// </summary> public bool Send(string open_id, string template_id, string link_url, object data) { try { if (!AccessTokenContainer.CheckRegistered(appId)) //检查是否已经注册 { AccessTokenContainer.Register(appId, appSecret); //如果没有注册则进行注册 } string access_token = AccessTokenContainer.GetAccessTokenResult(appId).access_token; //AccessToken SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, open_id, template_id, link_url, data); //发送成功 if (sendResult.errcode.ToString() == "请求成功") { LogHelper.WriteDebugLog("[wx push msg]:" + open_id + " send success"); return(true); } else { LogHelper.WriteDebugLog("[wx push msg]:" + open_id + " send failed"); return(false); } } catch (Exception ex) { LogHelper.WriteDebugLog("[wx push msg]:" + ex.Message); return(false); } }
public Boolean SendTemplateMsg(BillDataModel billData) { var accessToken = AccessTokenContainer.GetAccessToken(Config.APPID); //由于源代码采用分支管理,这里将不再编写兼容所有模板消息的代码 var templateId = "KpddG3wzOIVa5WOqFIYO4rBQL7knr0UJltcUWUqokAc"; var data = new { first = new TemplateDataItem(""), keyword1 = new TemplateDataItem(billData.ACC_MONEY), keyword2 = new TemplateDataItem(billData.ACC_WATER), remark = new TemplateDataItem(billData.BILLING_MONTH.ToString()) }; string url = ""; SendTemplateMessageResult result = TemplateApi.SendTemplateMessage(Config.APPID, billData.openID, templateId, url, data); if (result.errmsg == "ok") { return(true); } else { return(false); } }
public override void Execute(SendRegisteredMessageJobArgs args) { var templateId = "8YRKA8IAzlqaOjgLuuZSOhkVbGRgAsK79MA47txODgo"; var message = new { first = new TemplateDataItem("新用户注册提醒"), keyword1 = new TemplateDataItem(args.PersonName), keyword2 = new TemplateDataItem(args.RegisterDate.ToString("yyyy-MM-dd HH:mm")), keyword3 = new TemplateDataItem(args.Mobile), remark = new TemplateDataItem(args.TenancyName), }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, "", message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //var sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, "", message); }
//标题委托房源通知 //private string OrderTemp = "51o9MS_hB0RCXdciqIlqRZ0C58g6LjtA3Fp2Ph7cFHw"; //private string OrderTemp = "TuGoUsJWShChs6dU9Lp7Kf3gg_Qi8AsBfk9dSpEMB4I"; /// <summary> /// 直约业主 /// </summary> //private string BespokeTemp = "AQa1EnpKlwIqX6DqIUw1jibkHYq9-Ft9NEUdFbavHdk"; //private string BespokeTemp = "TuGoUsJWShChs6dU9Lp7Kf3gg_Qi8AsBfk9dSpEMB4I"; public virtual SendTemplateMessageResult SendOrderStatusChangeMessag(string appId, string secret, string openId, string templateId, object temp, string url = "", string color = "#FF0000") { SendTemplateMessageResult result = new SendTemplateMessageResult(); int i = 0; do { try { i++; logger.Debug("第" + i + "次 发送..."); //Task.Factory.StartNew(() => Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessageAsync(appId, openId, // templateId, url, temp)); result = TemplateApi.SendTemplateMessage(appId, openId, templateId, url, temp); //result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessageAsync(appId, openId, templateId, url, temp).Result; if (result != null && result.msgid > 0) { break; } } catch (Exception ex) { logger.Debug("发送消息" + i + " :" + ex); } } while (i < 3); return(result); }
/// <summary> /// /// </summary> /// <param name="openId">用户openId </param> /// <param name="templateId">模版id</param> /// <param name="linkUrl">点击详情后跳转后的链接地址,为空则不跳转 </param> public static ErrorMessage SendMsg(WxMsgModel model, Dictionary <string, string> param) { ErrorMessage errorMessage = new ErrorMessage(ErrorMessage.ExceptionCode, "消息发送失败"); try { //校验参数 if (string.IsNullOrWhiteSpace(model.OpenId)) { errorMessage.errmsg = "接收消息的账号不能为空。"; return(errorMessage); } if (string.IsNullOrWhiteSpace(model.TemplateId)) { errorMessage.errmsg = "模板id不能为空。"; return(errorMessage); } if (string.IsNullOrWhiteSpace(Config.APPID) && string.IsNullOrWhiteSpace(Config.APPSECRET)) { errorMessage.errmsg = "微信appid,AppSecret不能为空"; return(errorMessage); } //string appId, appSecret; //appId = "wx65aceb537005fb0d"; //appSecret = "a7eddd99f2e1ab7acb1fe6aa09152941"; //获取许可令牌 AccessToken token = AccessToken.Get(Config.APPID, Config.APPSECRET); if (token == null) { errorMessage.errmsg = "获取Token失败。"; } Dictionary <string, TemplateDataItem> templateData = new Dictionary <string, TemplateDataItem>(); foreach (var item in param.Keys) { templateData.Add(item, new TemplateDataItem(param[item])); } SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(token.access_token, model.OpenId, model.TemplateId, "#ccc", model.LinkUrl, templateData); //发送成功 if (sendResult.errcode.ToString() == "请求成功") { //... } else { //Logger.Error(sendResult.errmsg); } errorMessage.errcode = 0; errorMessage.errmsg = "成功"; return(errorMessage); } catch (Exception ex) { return(errorMessage); } }
public override void Execute(SendWeiXinMessageJobArgs args) { var task = ProcessTaskManager.GetAll() .Include(o => o.Tenant) .Include(o => o.ProcessType) .Include(o => o.Part).ThenInclude(o => o.Project) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (task != null) { //图片之前已生成,不进行重新生成 //ProcessTaskManager.SaveTaskSheetToImage2(task).GetAwaiter().GetResult(); var config = _hostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/OuterTaskView?id=" + task.Id; var templateId = "wVpgBt0ziOXX3DwWvqosHb7K2G43G61Xj40aS7iY3R4";//模来模往 //var templateId = "dltvm7BNLgK9d6KxxMn_Sl6uVuaPkV1ywMdZTiudHkk";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:SendOuterTask"])) { templateId = config["TemplateId:SendOuterTask"]; } var message = new { first = new TemplateDataItem("你好,收到" + task.Tenant.TenancyName + "新的加工任务"), keyword1 = new TemplateDataItem(task.Part.Project.ProjectSN), keyword2 = new TemplateDataItem(task.Part.PartName + task.ProcessType.ProcessTypeName), keyword3 = new TemplateDataItem(task.Part.Project.GetPropertyValue <string>("ProjectCharger")), keyword4 = new TemplateDataItem(task.RequireDate?.ToString("yyyy-MM-dd HH:mm:ss")), remark = new TemplateDataItem("请及时处理") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public bool SendOrderNotice([FromBody] OrderInfo info) { try { string shop_appid = WeixinConfig.AppID;//公众账号ID //string access_token = WeixinConfig.TokenHelper.GetToken(); string access_token = AccessTokenContainer.TryGetAccessToken(WeixinConfig.AppID, WeixinConfig.AppSecret, true); string openid = info.openid; string template_id = System.Configuration.ConfigurationManager.AppSettings["SpollingSendPlaceOrderNotice"];//模板ID 正式号模板ID var domain = System.Configuration.ConfigurationManager.AppSettings["Domain"]; string redirect_uri = "http://" + domain + "/weixin/seeorderdetail?orderid=" + info.orderId; string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}"; url = string.Format(url, shop_appid, HttpUtility.UrlEncode(redirect_uri), "wanlixin"); string first = "尊敬的会员,您的订单已支付成功!"; string keyword1 = info.shopName.ToString(); //门店名称 string keyword2 = info.orderId.ToString(); //订单编号 string keyword3 = info.num.ToString(); //订单数量 string keyword4 = info.price.ToString(); //销售金额 string remark = "感谢您的信任,欢迎您再次光临!"; Tuple <string, string, Color>[] data = new Tuple <string, string, Color>[] { new Tuple <string, string, Color>("first", first, Color.Black), new Tuple <string, string, Color>("keyword1", keyword1, Color.Black), new Tuple <string, string, Color>("keyword2", keyword2, Color.Black), new Tuple <string, string, Color>("keyword3", keyword3, Color.Black), new Tuple <string, string, Color>("keyword4", keyword4, Color.Black), new Tuple <string, string, Color>("remark", remark, Color.Black) }; IDictionary <string, object> dataDict = new Dictionary <string, object>(); foreach (Tuple <string, string, Color> item in data) { dataDict.Add(item.Item1, new { value = item.Item2, color = GetColorString(item.Item3) }); } SendTemplateMessageResult result = TemplateApi.SendTemplateMessage(access_token, openid, template_id, url, dataDict); Tools.MessBox(result.errcode + "|" + result.errmsg, "//Log//SendOrderNotice//return"); if (result.errmsg == "ok") { return(true); } else { return(false); } } catch (Exception ex) { Tools.MessBox(ex.ToString(), "//Log//SendOrderNotice"); return(false); } }
public async Task <SendTemplateMessageResult> SendTemplateMessageOfWalletWithdrawAsync(int tenantId, string openId, string url, WalletWithdrawTemplateMessageData data) { string accessToken = await WechatCommonManager.GetAccessTokenAsync(tenantId); string templateId = await SettingManager.GetSettingValueForTenantAsync(WechatSettings.TemplateMessage.WalletWithdraw, tenantId); SendTemplateMessageResult sendResult = await SendTemplateMessageAsync(accessToken, openId, templateId, url, data); return(sendResult); }
public override void Execute(SendWeiXinMessageJobArgs args) { var task = ProcessTaskManager.GetAll() .Include(o => o.Supplier) .Include(o => o.Tenant) .Include(o => o.ProcessType) .Include(o => o.Part) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (task != null) { var config = _hostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/wechat/Receiptaudit?taskid=" + task.Id; var templateId = "wVpgBt0ziOXX3DwWvqosHb7K2G43G61Xj40aS7iY3R4";//master //var templateId= "dltvm7BNLgK9d6KxxMn_Sl6uVuaPkV1ywMdZTiudHkk"//demo if (!string.IsNullOrEmpty(config["TemplateId:ReportRemind"])) { templateId = config["TemplateId:ReportRemind"]; } var message = new { first = new TemplateDataItem("外协回单提醒"), keyword1 = new TemplateDataItem(task.ProcessSN), keyword2 = new TemplateDataItem(task.Part.PartName + task.ProcessType.ProcessTypeName), keyword3 = new TemplateDataItem(task.Supplier.UnitName), keyword4 = new TemplateDataItem(""), remark = new TemplateDataItem("请及时处理") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
/// <summary> /// 发送消息 /// </summary> /// <param name="weixinAppId">小程序AppID</param> /// <param name="appId">开发者ID(微信公众号)</param> /// <param name="openId">接收者ID(微信公众号)</param> /// <param name="pagepath">小程序跳转链接</param> /// <param name="templateId">消息模板</param> /// <param name="url"></param> /// <param name="title">标题</param> /// <param name="_first"></param> /// <param name="_remark"></param> /// <param name="_params">参数替换</param> /// <returns></returns> public string Send(string weixinAppId, string appId, string openId, string pagepath, string templateId, string url, string title, string _first, string _remark, string[] _params) { TempleteModel_MiniProgram mini; SendTemplateMessageResult result = new SendTemplateMessageResult(); var data = new WeiXinTemplate(templateId, "", title, _first, _remark, _params); mini = new TempleteModel_MiniProgram(); mini.appid = weixinAppId; mini.pagepath = pagepath; result = TemplateApi.SendTemplateMessage(appId, openId, data); return(JsonConvert.SerializeObject(result)); }
public override void Execute(SendWeiXinMessageJobArgs args) { var task = ProcessTaskManager.GetAll().IgnoreQueryFilters() .Include(o => o.CreatorUser) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (task != null) { var config = _hostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/mes/JGKD?taskid=" + task.Id; var templateId = "u99i9f5VikTcDUJw4OL1neDcI3Lt2oYl7y5wmIqHQjA";//模来模往 //var templateId = "8j4xzh_ke3-ikaLx3iNnoY4yn8A-yEBLllrNxTiv7bY";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:TaskConfirm"])) { templateId = config["TemplateId:TaskConfirm"]; } var message = new { first = new TemplateDataItem("你好,收到新的加工开单申请"), keyword1 = new TemplateDataItem(task.Poster), keyword2 = new TemplateDataItem(task.ProjectCharger), keyword3 = new TemplateDataItem(task.CreationTime.ToString("yyyy-MM-dd HH:mm:ss")), remark = new TemplateDataItem("请及时处理") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public override void Execute(SendWeiXinMessageJobArgs args) { var processQuote = ProcessQuoteManager.GetAll() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId).SingleOrDefault(); if (processQuote != null) { var config = HostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/ProcessQuoteProcessor#/msg/" + processQuote.Id; var templateId = "jd3mdo68Y2mmObCZafu5C8Tq5zFu3f9hdZg6rllGB2A";//模来模往 //var templateId = "Hm3BL2i0zPKLzfAIl0Po71cnVRVTf8rYvA_qaezHZk8";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:SendProcessQuote"])) { templateId = config["TemplateId:SendProcessQuote"]; } var message = new { first = new TemplateDataItem($"收到{processQuote.Tenant.TenancyName}询价信息"), keyword1 = new TemplateDataItem(processQuote.QuoteSN), keyword2 = new TemplateDataItem(processQuote.QuoteName), keyword3 = new TemplateDataItem(processQuote.ExpireDate.ToString("yyyy-MM-dd HH:mm:ss")), remark = new TemplateDataItem("请及时处理") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public static void SendTemplate(List <Guid?> userIds, string templateId, string linkUrl) { QueryOpenId(userIds).ForEach(openId => { var templateData = new TemplateData() { Title = new TemplateDataItem("您好,您的订单已支付成功!", "#000000"), Place = new TemplateDataItem("广州-北京", "#000000"), Price = new TemplateDataItem("100元", "#000000"), Time = new TemplateDataItem("2111-11-11 11:11:11", "#000000"), Remark = new TemplateDataItem("感谢您的购买~", "#000000") }; SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(AppId, openId, templateId, linkUrl, templateData, null); }); }
public string PushMsg() { //模板ID 0AI1R_RWcY-gxfU57El-r7iOr8-aQOgCyTgrOiOqWp0 开票提醒 //开发者ID(AppID) wx37f7ad5ea8d57ffa //开发者密码(AppSecret) d3049416a70dcc631c0bd1f8f4ecfdba //我的 openID oXhYxs6xEvWnJR0sqvhkUh9JUHoA //WeChatApiCommonService.GetWeChatAccessToken(); //根据appId判断获取 //if (!AccessTokenContainer.CheckRegistered(ApiConfigConst.WeChatAppID)) //检查是否已经注册 //{ // AccessTokenContainer.Register(ApiConfigConst.WeChatAppID, ApiConfigConst.WeChatAppSecret); //如果没有注册则进行注册 //} //string access_token = AccessTokenContainer.GetAccessTokenResult(ApiConfigConst.WeChatAppID).access_token; //AccessToken string access_token = "15_eJHYeCbl20cD0KLsgSHun0Z9vykSZmXpu8UdaIQ7LNd-ausM6guuGjg3ui12J6aKyCl8cvyaT1xVsIJpfQHd9hUCKMVRJbaolMsTrbfCZSMjM0OkBEMRz8Cv6kSNt9U1NBAlAjqqs2Sf5EmGVTAiAGANLS"; string openId = "oXhYxs6xEvWnJR0sqvhkUh9JUHoA"; //用户openId string templateId = "0AI1R_RWcY-gxfU57El-r7iOr8-aQOgCyTgrOiOqWp0"; //模版id string linkUrl = "http://www.baidu.com"; //点击详情后跳转后的链接地址,为空则不跳转 //您好,您的发票已经开具成功。 //发票号码:NO9000001 //开票日期:2017 - 06 - 18 //开票金额:890.00 //点击查看详情 //为模版中的各属性赋值 var templateData = new ProductTemplateData() { first = new TemplateDataItem("您好,您的发票\r\n已经开具成功。", "#000000"), keyword1 = new TemplateDataItem("NO9000001", "#000000"), keyword2 = new TemplateDataItem("2017 - 06 - 18", "#000000"), keyword3 = new TemplateDataItem("890.00", "#000000"), remark = new TemplateDataItem("感谢您的光临~", "#000000") }; SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, openId, templateId, linkUrl, templateData); //发送成功 if (sendResult.errcode.ToString() == "请求成功") { //... } else { //Response.Write("出现错误:" + sendResult.errmsg); } return(""); }
public override void Execute(SendWeiXinMessageJobArgs args) { var processQuote = ProcessQuoteManager.GetAll() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId).SingleOrDefault(); if (processQuote != null) { var config = HostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/ProcessQuoteProcessor#/msg/" + processQuote.Id; var templateId = "nNYnBiwnwqvstTqeNfZ1JByKBNqJIPVIi4g8Wj3Bhog";//模来模往 //var templateId = "XS1LGGjeKHMsyoiKJLDz94wpgwndY4ilOY6y21aoJ_k";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:SendProcessQuoteChoose"])) { templateId = config["TemplateId:SendProcessQuoteChoose"]; } var message = new { first = new TemplateDataItem($"您已成功中标{processQuote.Tenant.TenancyName}询价信息"), keyword1 = new TemplateDataItem(processQuote.QuoteSN), keyword2 = new TemplateDataItem(processQuote.QuoteName), remark = new TemplateDataItem("") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
/// <summary> /// 发送模板消息 /// </summary> /// <param name="userOpenId"></param> /// <param name="templateId"></param> /// <param name="url">//点击详情后跳转后的链接地址,为空则不跳转</param> /// <param name="templateData"></param> /// <returns></returns> public string SendTemplateMessage <T>(string userOpenId, string templateId, string url, T templateData) { string access_token = GetAccessToken(); SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, userOpenId, templateId, url, templateData); //发送成功 if (sendResult.errcode.ToString() == "请求成功") { return("发送成功"); } else { return(sendResult.errmsg); } }
public override void Execute(SendWeiXinMessageJobArgs args) { var notice = NoticeManager.GetAll() .IgnoreQueryFilters() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (notice != null) { var baseurl = HostingEnvironment.GetAppConfiguration()["base:url"]; var url = baseurl + "/MES/TenantNoticeView?id=" + args.DataId; var templateId = "r5azOIRD5TP2heIi-6TTF29h_0TvyM4gruh4wy4YXMQ";//模来模往 //var templateId = "MPrQIbyjLaa-grTkEihsEPEWtCUvvguDk6mtmMO0hnc";//云报工 var message = new { first = new TemplateDataItem($"收到{notice.Tenant.TenancyName}公告消息"), keyword1 = new TemplateDataItem(notice.Tenant.TenancyName), keyword2 = new TemplateDataItem(notice.NoticeTitle), //keyword3 = new TemplateDataItem(processQuote.PublishDate?.ToString("yyyy-MM-dd")), remark = new TemplateDataItem("请及时查看") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public async Task <SendTemplateMessageResult> SendTemplateMessageAsync <T>(string accessToken, string openId, string templateId, string url, T data) where T : TemplateMessageData { try { SendTemplateMessageResult sendResult = await Task.Run(() => { return(TemplateApi.SendTemplateMessage(accessToken, openId, templateId, url, data, 5000)); }); return(sendResult); } catch { return(null); } }
/// <summary> /// 发送模板消息-跳转至小程序 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="userOpenId"></param> /// <param name="templateId"></param> /// <param name="url"></param> /// <param name="templateData"></param> /// <param name="miniAppId"></param> /// <param name="pagePath"></param> /// <returns></returns> public string SendTemplateMessageToMiniApp <T>(string userOpenId, string templateId, string url, T templateData, string miniAppId, string pagePath) { string access_token = GetAccessToken(); TemplateModel_MiniProgram miniModel = new TemplateModel_MiniProgram { appid = miniAppId, pagepath = pagePath }; SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, userOpenId, templateId, url, templateData, miniModel); //发送成功 if (sendResult.errcode.ToString() == "请求成功") { return("发送成功"); } else { return(sendResult.errmsg); } }
public static void SendMsgToWeUser(string access_token, string openId, string orderId, OrderTemplateData templateData) { var linkUrl = string.Format("http://weixin.shoushouto.com/Order/Detail?orderId={0}", orderId); SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, openId, AbpWebConst.TemplateId, linkUrl, templateData); }
/// <summary> /// 发送信息 /// </summary> /// <param name="_OpenId"></param> /// <param name="Template"></param> public bool SendMessage(Template Template = Template.流程催办提醒, String strEmpID = null, String 信息内容 = null, int ID = 0) { String OpenID = String.Empty; String URL = String.Empty; TemplateData AutoCreateTemplate = new TemplateData(); SubscribeUsers SubscribeUsers = null; //JosonEntity.JosonReflection JosonEntity = new JosonEntity.JosonReflection(); string templateId = "uLJONvcsIA0JhaUc25nUsVeph9T-LLbQpjlOjqmAm3s";//换成已经在微信后台添加的模板Id string accessToken = String.Empty; String FirstMsg = "{0},你有一个流程已经被{1}"; String RemarkMsg = "你的一个流程已经被{0},请点击查看详细内容,或登录BPM电子流查看相关信息。"; var testData = new TemplateData() { first = new TemplateDataItem("【待办任务】您好,你有任务需处理", "#FF0000"), remark = new TemplateDataItem("客户端出现无法登录,请及时处理。更详细信息,请到登录BPM电子流网站(http://www.JosonJiang.com)查看!") }; ISubscribeUsersService _ISubscribeUsersService = new SubscribeUsersService(); IQueryable <SubscribeUsers> UserLst = _ISubscribeUsersService.LoadEntities(o => o.OpenID.Length > 0); SendTemplateMessageResult result = null; if (String.IsNullOrWhiteSpace(accessToken)) { accessToken = AccessTokenContainer.GetAccessToken(AppID); } switch (Template) { case Template.流程办结提醒: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); templateId = "AqBXBXc1vVR-bMSOLvVYL9H_wWGJmJ6G6PJkLB_gnW0"; testData = new TemplateData() { first = new TemplateDataItem(String.Format("{0}您好,您发起申请的流程已处理结束。", SubscribeUsers.Remark), "#FF0000"), keyword1 = new TemplateDataItem(信息内容), keyword2 = new TemplateDataItem(DateTime.Now.ToString(), "#FF3300"), remark = new TemplateDataItem("您可以进行后续的工作安排。更详细信息,请到登录BPM电子流网站查看!") }; AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = JosonReflection.CopyFromEntity <TemplateData, TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.流程待办提醒: templateId = "oJVBysZMEzhop9jeReRDlJsTOJ3VVIJqrHrh1UQ1aMc"; //{{first.DATA}} //流程编号:{{keyword1.DATA}} //流程名称:{{keyword2.DATA}} //发起时间:{{keyword3.DATA}} //流程摘要:{{keyword4.DATA}} //{{remark.DATA}} //您好,您有一个流程待办需要处理。 //流程编号:YBHT-123456789 //流程名称:一般合同审批 //发起时间:2015.10.08 12:12:12 //流程摘要:部门 信息管理部 发起人 张三, 合同名称 同城灾备项目合同 紧急度 高 //请尽快审批,截至当前,您还有3个待办事宜未处理。 testData.first = new TemplateDataItem("您好,您有一个流程待办需要处理"); testData.remark = new TemplateDataItem("请点击查看详细内容,或登录BPM电子流查看相关信息。"); AutoCreateTemplate = CreateTemplate(信息内容); //AutoCreateTemplate = JosonEntity.CopyFromEntity<TemplateData, TemplateData>(testData,false); //AutoCreateTemplate = AutoCreateTemplate.CopyEntity<TemplateData>(testData); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.流程待审批事项: templateId = "oJVBysZMEzhop9jeReRDlJsTOJ3VVIJqrHrh1UQ1aMc"; testData.first = new TemplateDataItem("您好,您有一个流程待办需要处理"); testData.remark = new TemplateDataItem("请点击查看详细内容,或登录BPM电子流查看相关信息。"); AutoCreateTemplate = CreateTemplate(信息内容); //AutoCreateTemplate = JosonEntity.CopyFromEntity<TemplateData, TemplateData>(testData,false); //AutoCreateTemplate = AutoCreateTemplate.CopyEntity<TemplateData>(testData); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.撤销通知: //审批结果提醒 //{{first.DATA}} //审批事项:{{keyword1.DATA}} //审批结果:{{keyword2.DATA}} //孔连顺,您好: //审批事项:『银电网络智能监控系统』项目差旅费报销,金额为¥215元整。 //审批结果:通过 //2014/8/25 10:12:22 SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format(FirstMsg, SubscribeUsers.Remark, "撤销"); RemarkMsg = String.Format(RemarkMsg, "撤销"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.拒绝通知: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format(FirstMsg, SubscribeUsers.Remark, "拒绝"); RemarkMsg = String.Format(RemarkMsg, "拒绝"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.意通知: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format("{0},你有一个流程已经被同意。", SubscribeUsers.Remark); RemarkMsg = String.Format("你的一个流程已经被同意。请点击查看详细内容,或登录BPM电子流查看相关信息"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.除通知: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format(FirstMsg, SubscribeUsers.Remark, "删除"); RemarkMsg = String.Format(RemarkMsg, "删除"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.退回通知: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format(FirstMsg, SubscribeUsers.Remark, "退回"); RemarkMsg = String.Format(RemarkMsg, "退回"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.阅示通知: SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format("{0},你有一个流程需要处理。", SubscribeUsers.Remark); RemarkMsg = String.Format("请点击查看详细内容,或登录BPM电子流查看相关信息"); templateId = "G4tEz6j-rRoPVgQZz3p5CQdsTLuS5yeppwPyBB6Xo0w"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.通用信息提醒: //流程操作通知 //{{first.DATA}} //通知内容:{{keyword1.DATA}} //通知时间:{{keyword2.DATA}} //{{remark.DATA}} //您有一个通知请查收。 //通知内容:部门经理审核通过,请进行下一步。 //通知时间:2015-09-23 //点击详情,查看明细。 SubscribeUsers = _ISubscribeUsersService.LoadEntities(o => o.Email == strEmpID).SingleOrDefault(); FirstMsg = String.Format("{0},你有一个流程需要处理。", SubscribeUsers.Remark); RemarkMsg = String.Format("请点击查看详细内容,或登录BPM电子流查看相关信息"); templateId = "cC6lIBWSHR3AaDccY0sm4yXrJeLPzhpVhDZOSQoP0P0"; testData.first = new TemplateDataItem(FirstMsg); testData.remark = new TemplateDataItem(RemarkMsg); AutoCreateTemplate = CreateTemplate(信息内容); AutoCreateTemplate = AutoCreateTemplate.CopyFrom <TemplateData>(testData); if (SubscribeUsers != null) { OpenID = SubscribeUsers.OpenID; URL = String.Format("{0}?ID={1}&isweixin=1", ConnectionEmail, ID); if (!String.IsNullOrWhiteSpace(OpenID)) { result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, AutoCreateTemplate); if (ReturnCode.请求成功.Equals(result.errcode)) { System.Threading.Thread.Sleep(1000); } } } break; case Template.流程催办提醒: IBPMProcNotifyRecService _IBPMProcNotifyRecService = new BPMProcNotifyRecService(); IQueryable <BPMProcNotifyRec> BPMProcNotifyRecLst = _IBPMProcNotifyRecService.LoadEntities(o => o.STEPID > 0); IBPMProcNotifyRecHisService _IBPMProcNotifyRecHisService = new BPMProcNotifyRecHisService(); BPMProcNotifyRecHis NotifyRecHis = new BPMProcNotifyRecHis(); var lstNotifyRec = from User in UserLst join NotifyRec in BPMProcNotifyRecLst on User.EmpID equals NotifyRec.NOTIFYUSER select new { UserMail = User.Email, OpenID = User.OpenID, MsgID = NotifyRec.MSGID, FLOWNO = NotifyRec.FLOWNO, PROCNAME = NotifyRec.PROCNAME, NODENAME = NotifyRec.NODENAME, OWNERCOUNT = NotifyRec.OWNERCOUNT, OWNERNAME = NotifyRec.OWNERNAME, NOTIFYHOUR = NotifyRec.NOTIFYHOUR, RECEIVEAT = NotifyRec.RECEIVEAT, NTYPE = NotifyRec.NTYPE, STEPID = NotifyRec.STEPID, OPDEPT = NotifyRec.OPDEPT, NOTIFYUSER = NotifyRec.NOTIFYUSER, NOTIFYUNAME = NotifyRec.NOTIFYUNAME, EXPWORKTIME = NotifyRec.EXPWORKTIME, NOTIFYCOUNT = NotifyRec.NOTIFYCOUNT, LASTTIME = DateTime.Now, OPSTATUS = NotifyRec.OPSTATUS, CREATETIME = NotifyRec.CREATETIME }; var lst = lstNotifyRec.ToList(); foreach (var NotifyRec in lst) { //流程催办提醒 templateId = "OIGvdsocfU7_1wytXnmso6H0cl8XpiS-4Q7jBS09Pyc"; OpenID = NotifyRec.OpenID; if (!String.IsNullOrWhiteSpace(OpenID)) { //流程催办提醒 templateId = "OIGvdsocfU7_1wytXnmso6H0cl8XpiS-4Q7jBS09Pyc"; testData = new TemplateData() { first = new TemplateDataItem("您好,以下流程处理进度需要您关注!", "#FF0000"), keyword1 = new TemplateDataItem(NotifyRec.FLOWNO), keyword2 = new TemplateDataItem(String.Format("{0}/{1}", NotifyRec.PROCNAME, NotifyRec.NODENAME)), keyword3 = new TemplateDataItem(String.Format("{0} ({1})", NotifyRec.OWNERNAME, NotifyRec.OWNERCOUNT)), keyword4 = new TemplateDataItem(Convert.ToString(NotifyRec.RECEIVEAT)), keyword5 = new TemplateDataItem(String.Format("本流程节点已设置标准处理时间{0}WH,现已超时", NotifyRec.NOTIFYHOUR)), remark = new TemplateDataItem("请关注该流程处理进度,并在适当时给予协助!" + DateTime.Now) }; URL = String.Format("{0}?Joson={1}&isweixin=1", ConnectioniAnyWhere, NotifyRec.NTYPE == 2 ? NotifyRec.OWNERCOUNT : NotifyRec.NOTIFYUSER); try { #if DEBUG //throw new Exception("有意出错的"); #endif result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, testData); if (ReturnCode.请求成功.Equals(result.errcode)) { BPMProcNotifyRec oNotifyRec = _IBPMProcNotifyRecService.LoadEntities(o => o.FLOWNO == NotifyRec.FLOWNO && o.MSGID == NotifyRec.MsgID).SingleOrDefault(); //JosonEntity.JosonReflection JosonEntity = new JosonEntity.JosonReflection(); NotifyRecHis = JosonReflection.CopyFromEntity <BPMProcNotifyRec, BPMProcNotifyRecHis>(oNotifyRec); NotifyRecHis.LASTTIME = DateTime.Now; if (_IBPMProcNotifyRecService.DeleteEntity(oNotifyRec)) { _IBPMProcNotifyRecHisService.AddEntity(NotifyRecHis); } } } catch (Exception ex) { #region 邮件发送 String DisplayName = "BPM系统通知邮件" + NotifyRec.PROCNAME; String JosonNotice = @"<BR><BR><div style='border:1px solid #efefef; padding:5px;'><font color='blue'>请关注微信服务号“创维数字移动办公”,将微信号和BPM账号绑定 ,本通知将会通过微信消息推送给您!</font><BR><font color='red'>本邮件为系统自动发送,请勿直接回复 <BR>" + DateTime.Now + "</font></div>"; String Receive = NotifyRec.UserMail, MSubject = NotifyRec.PROCNAME + NotifyRec.FLOWNO, MailBody = String.Format(@"{0}{1}你好,<BR><BR>由于无法进行微信推送信息服务,我们只能以邮件方式提醒你。<BR> 与你相关的<font color='red'>流程{2}({3})现已超时</font>,请你及时处理。<BR> 本流程节点已设置<font color='blue'>标准处理时间{4}WH</font>,现已超时!请关注该流程处理进度,并在适当时给予协助!<BR><BR> {5} 谢谢 <BR><hr> 说明:重点流程超时提醒为公司要求,如对处理时间设置由异议,请与IT联系,欢迎关注“创维数字移动办公”微信公共号,通过微信方式接受推送消息 。" + JosonNotice , NotifyRec.OPDEPT , NotifyRec.OWNERNAME , NotifyRec.PROCNAME , NotifyRec.NODENAME , NotifyRec.NOTIFYHOUR , NotifyRec.NOTIFYUNAME == NotifyRec.OWNERNAME ? String.Empty : String.Format("该邮件将同时抄送{0},敬请恢复绑定微信通知<BR><BR>", NotifyRec.NOTIFYUNAME) ); //SendMail.MailConfig Config = new SendMail.MailConfig //{ // DispalyName = NotifyRec.PROCNAME, // FromEmail = "*****@*****.**", // FromServer = "mail.skyworth.com", // PassWord = "******" //}; //Boolean isReceived = SendMail.SendEmail(Config, Receive, MSubject, MailBody); #endregion #if DEBUG //Receive = "*****@*****.**"; #endif Boolean isReceived = SendMail.SendEmail(DisplayName, Receive, MSubject, MailBody, false); System.Threading.Thread.Sleep(1000); if (isReceived) { BPMProcNotifyRec oNotifyRec = _IBPMProcNotifyRecService.LoadEntities(o => o.FLOWNO == NotifyRec.FLOWNO && o.MSGID == NotifyRec.MsgID).SingleOrDefault(); oNotifyRec.PROCNAME += "(SendEmail)" + Receive; //JosonEntity.JosonReflection JosonEntity = new JosonEntity.JosonReflection(); NotifyRecHis = JosonReflection.CopyFromEntity <BPMProcNotifyRec, BPMProcNotifyRecHis>(oNotifyRec); NotifyRecHis.LASTTIME = DateTime.Now; if (_IBPMProcNotifyRecService.DeleteEntity(oNotifyRec)) { _IBPMProcNotifyRecHisService.AddEntity(NotifyRecHis); } } ISchedulers.ScheduleJob.JosonException.CreateException(ex, NotifyRec); } System.Threading.Thread.Sleep(1000); } } #region 流程催办提醒 //{{first.DATA}} //流程编号:{{keyword1.DATA}} //流程名称:{{keyword2.DATA}} //待办人员:{{keyword3.DATA}} //待办时间:{{keyword4.DATA}} //备注信息:{{keyword5.DATA}} //{{remark.DATA}} //您好,以下流程处理进度需要您关注! //流程编号:YBHT-12345678 //流程名称:一般合同审批/法务审核 //待办人员:SDT03982(蒋小鹏) //待办时间:2015.10.08 12:52:52 //备注信息:本流程节点已设置标准处理时间8WH,现已超时。 //请关注该流程处理进度,并在适当时给予协助。 ////流程催办提醒 //templateId = "OIGvdsocfU7_1wytXnmso6H0cl8XpiS-4Q7jBS09Pyc"; #endregion #if DEBUG foreach (BPMProcNotifyRec NotifyRec in BPMProcNotifyRecLst.ToList()) { OpenID = UserLst.Where(u => u.EmpID == NotifyRec.NOTIFYUSER).SingleOrDefault() == null ? new AppConfigs().GetTestOpenID(false) : UserLst.Where(u => u.EmpID == NotifyRec.NOTIFYUSER).SingleOrDefault().OpenID; // OpenID = SendOpenID(NotifyRec.PROCNAME); // OpenID = GetOpenIDByEmpID(NotifyRec.OWNERCOUNT); if (!String.IsNullOrWhiteSpace(OpenID)) { //流程催办提醒 templateId = "OIGvdsocfU7_1wytXnmso6H0cl8XpiS-4Q7jBS09Pyc"; testData = new TemplateData() { first = new TemplateDataItem("您好,以下流程处理进度需要您关注!", "#FF0000"), keyword1 = new TemplateDataItem(NotifyRec.FLOWNO), keyword2 = new TemplateDataItem(String.Format("{0}/{1}", NotifyRec.PROCNAME, NotifyRec.NODENAME)), keyword3 = new TemplateDataItem(String.Format("{0} ({1})", NotifyRec.OWNERNAME, NotifyRec.OWNERCOUNT)), keyword4 = new TemplateDataItem(Convert.ToString(NotifyRec.RECEIVEAT)), keyword5 = new TemplateDataItem(String.Format("本流程节点已设置标准处理时间{0}WH,现已超时", NotifyRec.NOTIFYHOUR)), remark = new TemplateDataItem("请关注该流程处理进度,并在适当时给予协助!") }; URL = String.Format("{0}?Joson={1}&isweixin=1", ConnectioniAnyWhere, NotifyRec.NTYPE == 2 ? NotifyRec.OWNERCOUNT : NotifyRec.NOTIFYUSER); result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessage(accessToken, OpenID, templateId, "#FFFF00", URL, testData); if (ReturnCode.请求成功.Equals(result.errcode)) { #region 已封装 // 已封装 //result = new SendTemplateMessageResult(); //JosonEntity.Entity EntityJoson = new JosonEntity.Entity(); //NotifyRecHis = EntityJoson.CopyFromEntity<BPMProcNotifyRec, BPMProcNotifyRecHis>(NotifyRec); //同源拷贝 // NotifyRec.CopyEntity<BPMProcNotifyRec>(NotifyRec); #endregion // JosonEntity.JosonReflection JosonEntity = new JosonEntity.JosonReflection(); NotifyRecHis = JosonReflection.CopyFromEntity <BPMProcNotifyRec, BPMProcNotifyRecHis>(NotifyRec); NotifyRecHis.LASTTIME = DateTime.Now; if (_IBPMProcNotifyRecService.DeleteEntity(NotifyRec)) { _IBPMProcNotifyRecHisService.AddEntity(NotifyRecHis); } } else { LogHelper log = new LogHelper(); log.Info(result.errcode); log.Warning(result.errcode); log.Error(result.errcode); //LogHelpers.Warning(result.errcode); //LogHelpers.Info(result.errcode); //LogHelpers.Error(result.errcode); //LogHelpers.Debug(result.errcode); } System.Threading.Thread.Sleep(1000); } } #endif break; case Template.微信解绑通知: //微信解绑通知 templateId = "V49ETtdeEd_4zGvE0EOj7giugOo-DBpiLEg2dR5ppPE"; testData = new TemplateData() { first = new TemplateDataItem("【消息提醒】您好,你的账号已解绑", "#FF0000"), keyword1 = new TemplateDataItem("SDT03982"), keyword2 = new TemplateDataItem("该微信已不能用作 iAnyWhere 登录"), remark = new TemplateDataItem("你的账号已经被解绑,不能继续使用相关功能!哈哈,") }; break; case Template.用户登录提醒: //用户登录提醒 templateId = "GMEPM-Wg2Bsb3FhpZoBwOCp5WMAR4rEOW4gx58Y5JHk"; testData = new TemplateData() { first = new TemplateDataItem("【温馨提示】您好,你的账号SDTXXXX移动客户端在别处已登录!", "#FF0000"), time = new TemplateDataItem(DateTime.Now.ToString(), "#FF3300"), ip = new TemplateDataItem("202.1.5.8"), reason = new TemplateDataItem("登录可能存在异常,如果本次登录不是您本人所为,说明您的帐号已经被盗!请点击本条消息,立即锁定帐号。"), remark = new TemplateDataItem("测试信息,不要当真") }; break; } return(ReturnCode.请求成功.Equals(result == null ? ReturnCode.POST的数据包为空 : result.errcode)); //Assert.AreEqual(ReturnCode.请求成功, result.errcode); }
public static void SendTemplateToSSWeUser(string access_token, string openId, OrderTemplateData templateData) { var linkUrl = string.Format("http://weixin.shoushouto.com/about.html"); SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, openId, "74XYb4pyEyruCGWAqQch2qhTcQjfIRyxjixU6-3cbUA", linkUrl, templateData); }
public override void Execute(SendWeiXinMessageJobArgs args) { Logger.Error("\r\n\r\nstart"); //JObject jo = (JObject)JsonConvert.DeserializeObject(args.ExtendInfo); var tenantId = args.DataId; //Supplier. tenantId var arr = args.ExtendInfo.Split(new string[] { "test123" }, StringSplitOptions.None); var taskIds = arr[0]; var currentTenantId = arr[1]; var totalFee = arr[2]; var processSNs = arr[3]; var q = TenantManager.GetAll().Where(o => o.Id == Convert.ToInt32(currentTenantId)).SingleOrDefault(); var currentUser = q.TenancyName; var partUrl = ProcessTaskManager.SaveAccountingSheetToImage(taskIds, currentTenantId, tenantId.ToString()).GetAwaiter().GetResult(); partUrl = $"/sheets/{currentTenantId}/CountingPic/{tenantId}/{partUrl}.png"; var config = _hostingEnvironment.GetAppConfiguration(); var baseurl = $"{config["base:url"]}"; //var url = $"{_hostingEnvironment.GetAppConfiguration()["base:url"]}/MES/CountingView?ids={taskIds}&tenantId={tenantId}¤tTenantId={currentTenantId}&partUrl={partUrl}"; var url = $"{_hostingEnvironment.GetAppConfiguration()["base:url"]}/MES/CountingView?ids={taskIds}&partUrl={partUrl}&signUrl="; //var openids = await MESUnitManager.FindUnitOpenId(tenantId); var templateId = "dE83qStBxfAAAFMAnn_0t6EknJ8B97L_A7A03LdiYkk"; //master: B2CWkuQKyZDqE4EreiQHqitAYbfU_Njxelremw546lk if (!string.IsNullOrEmpty(config["TemplateId:SendCounting"])) { templateId = config["TemplateId:SendCounting"]; } //var tenantId = AbpSession.GetTenantId(); //demo:dE83qStBxfAAAFMAnn_0t6EknJ8B97L_A7A03LdiYkk //currentUser = AbpSession.GetTenantId(); //var q = await TenantManager.GetByIdAsync(AbpSession.GetTenantId()); //var currentUser = q.TenancyName; //var url = ""; var message = new { first = new TemplateDataItem("您好,收到" + currentUser + "发来的核算信息"), keyword1 = new TemplateDataItem("核算单号:" + processSNs), keyword2 = new TemplateDataItem(DateTime.Now.ToString()), keyword3 = new TemplateDataItem(totalFee.ToString()), keyword4 = new TemplateDataItem(currentUser), remark = new TemplateDataItem("总核算金额为:" + totalFee.ToString() + "元") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } }
public override void Execute(SendWeiXinMessageJobArgs args) { var report = ProcessTaskReportRepository.GetAll().Include(o => o.ProcessTask) .ThenInclude(o => o.Part) .ThenInclude(o => o.Project) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (report != null) { var config = _hostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/ReportView?id=" + report.Id; var reporter = _personRepository.Get(report.ReporterId); var templateId = "wVpgBt0ziOXX3DwWvqosHb7K2G43G61Xj40aS7iY3R4";//master //var templateId= "dltvm7BNLgK9d6KxxMn_Sl6uVuaPkV1ywMdZTiudHkk"//demo if (!string.IsNullOrEmpty(config["TemplateId:ReportRemind"])) { templateId = config["TemplateId:ReportRemind"]; } var message = new { first = new TemplateDataItem("加工进度提醒"), keyword1 = new TemplateDataItem(report.ProcessTask.Part.Project.ProjectSN), keyword2 = new TemplateDataItem(report.ProcessTask.Part.PartName + report.ProcessTask.ProcessType.ProcessTypeName + report.ReportType.ToString()), keyword3 = new TemplateDataItem(reporter.Name), keyword4 = new TemplateDataItem(report.ReportTime.ToString("yyyy-MM-dd HH:mm:ss")), remark = new TemplateDataItem(report.Remarks) }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; Logger.Error(ex.Message, ex); } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); CurrentUnitOfWork.SaveChanges(); } //如果是失败状态,抛出异常,使后台作业自动重试 if (sendResult.ErrorCodeValue != 0) { throw new Exception("SendError:" + sendResult.ErrorCodeValue); } } }
public override void Execute(SendTacticBindWeiXinMessageJobArgs args) { var config = _hostingEnvironment.GetAppConfiguration(); var tactic = TacticManager.Repository.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.TacticId && o.IsActive && !o.IsDeleted).SingleOrDefault(); var person = _personRepository.Single(o => o.Id == args.PersonId); if (tactic != null && person != null) { string templateId; object message; if (args.BindType == 1) { templateId = "h3S7JP_4Okm52Kwn-9aOgkeoKdXKh0cNKuorU2vR_QI"; if (!string.IsNullOrEmpty(config["TemplateId:SendTacticBindWeiXinBind"])) { templateId = config["TemplateId:SendTacticBindWeiXinBind"]; } message = new { first = new TemplateDataItem("提醒策略绑定成功"), keyword1 = new TemplateDataItem(person.Name), keyword2 = new TemplateDataItem($"您已成功绑定策略\"{tactic.TacticName}\""), remark = new TemplateDataItem("欢迎使用模来模往") }; } else { templateId = "uOBfBNq_dDCW99glamDGqcdekP3qeJxJGyCJu5Ipnko"; if (!string.IsNullOrEmpty(config["TemplateId:SendTacticBindWeiXinUnBind"])) { templateId = config["TemplateId:SendTacticBindWeiXinUnBind"]; } message = new { first = new TemplateDataItem($"您已成功解除策略\"{tactic.TacticName}\"的绑定"), keyword1 = new TemplateDataItem(person.Name), keyword2 = new TemplateDataItem(""), remark = new TemplateDataItem("欢迎使用模来模往") }; } SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(person.GetPropertyValue <string>("OpenId"), templateId, "", message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public override void Execute(SendWeiXinMessageJobArgs args) { var task = ProcessTaskManager.GetAll() .Include(o => o.Supplier) .Include(o => o.ProcessType) .Include(o => o.Part) .ThenInclude(o => o.Project) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (task != null) { var remark = ""; var delayType = Enum.Parse <DelayType>(args.ExtendInfo); switch (delayType) { case DelayType.DelayStart: remark = $"预约日期:{task.AppointDate.Value.ToString("yyyy-MM-dd")},任务已延期{(DateTime.Now-task.AppointDate.Value).Days}天未上机"; break; case DelayType.DelayEnd: remark = $"要求完成日期:{task.RequireDate.Value.ToString("yyyy-MM-dd")},任务已延期{(DateTime.Now - task.RequireDate.Value).Days}天未下机"; break; case DelayType.ReceiveNotStart: remark = $"到料日期:{task.ReceiveDate.Value.ToString("yyyy-MM-dd")},任务已到料{(DateTime.Now - task.ReceiveDate.Value).Days}天尚未上机"; break; } var templateId = "wVpgBt0ziOXX3DwWvqosHb7K2G43G61Xj40aS7iY3R4"; var message = new { first = new TemplateDataItem("延期提醒"), keyword1 = new TemplateDataItem(task.Part.Project.ProjectSN), keyword2 = new TemplateDataItem(task.Part.PartName + task.ProcessType.ProcessTypeName), keyword3 = new TemplateDataItem(task.Supplier?.UnitName), //keyword4 = new TemplateDataItem(report.ReportTime.ToString("yyyy-MM-dd HH:mm:ss")), remark = remark }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, "", message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public static void SendTemplateToWeUser(string access_token, string openId, string orderId, OrderTemplateData templateData) { var linkUrl = string.Format("http://weixin.shoushouto.com/Order/Detail?orderId={0}", orderId); SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, openId, "cogrr5tjx2GK_FGqFj1ty5A0Q1I80iIjyTOpkQlU-Qk", linkUrl, templateData); }
/// <summary> /// 处理文字请求 /// </summary> /// <returns></returns> public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { //说明:实际项目中这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs #region 书中例子 //if (requestMessage.Content == "你好") //{ // var responseMessage = base.CreateResponseMessage<ResponseMessageNews>(); // var title = "Title"; // var description = "Description"; // var picUrl = "PicUrl"; // var url = "Url"; // responseMessage.Articles.Add(new Article() // { // Title = title, // Description = description, // PicUrl = picUrl, // Url = url // }); // return responseMessage; //} //else if (requestMessage.Content == "Senparc") //{ // //相似处理逻辑 //} //else //{ // //... //} #endregion #region 历史方法 //方法一(v0.1),此方法调用太过繁琐,已过时(但仍是所有方法的核心基础),建议使用方法二到四 //var responseMessage = // ResponseMessageBase.CreateFromRequestMessage(RequestMessage, ResponseMsgType.Text) as // ResponseMessageText; //方法二(v0.4) //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(RequestMessage); //方法三(v0.4),扩展方法,需要using Senparc.Weixin.MP.Helpers; //var responseMessage = RequestMessage.CreateResponseMessage<ResponseMessageText>(); //方法四(v0.6+),仅适合在HandlerMessage内部使用,本质上是对方法三的封装 //注意:下面泛型 ResponseMessageText 即返回给客户端的类型,可以根据自己的需要填写ResponseMessageNews等不同类型。 #endregion var defaultResponseMessage = base.CreateResponseMessage <ResponseMessageText>(); var requestHandler = requestMessage.StartHandler() //关键字不区分大小写,按照顺序匹配成功后将不再运行下面的逻辑 .Keyword("约束", () => { defaultResponseMessage.Content = @"您正在进行微信内置浏览器约束判断测试。您可以: <a href=""http://sdk.weixin.senparc.com/FilterTest/"">点击这里</a>进行客户端约束测试(地址:http://sdk.weixin.senparc.com/FilterTest/),如果在微信外打开将直接返回文字。 或: <a href=""http://sdk.weixin.senparc.com/FilterTest/Redirect"">点击这里</a>进行客户端约束测试(地址:http://sdk.weixin.senparc.com/FilterTest/Redirect),如果在微信外打开将重定向一次URL。"; return(defaultResponseMessage); }) .Keyword("绑定", () => { defaultResponseMessage.Content = "<a href=\"http://www.qq.com\">点击跳转绑定地址</a>"; return(defaultResponseMessage); }). //匹配任一关键字 Keywords(new[] { "托管", "代理" }, () => { //开始用代理托管,把请求转到其他服务器上去,然后拿回结果 //甚至也可以将所有请求在DefaultResponseMessage()中托管到外部。 DateTime dt1 = DateTime.Now; //计时开始 var agentXml = RequestDocument.ToString(); #region 暂时转发到SDK线上Demo agentUrl = "http://sdk.weixin.senparc.com/weixin"; //agentToken = WebConfigurationManager.AppSettings["WeixinToken"];//Token //修改内容,防止死循环 var agentDoc = XDocument.Parse(agentXml); agentDoc.Root.Element("Content").SetValue("代理转发文字:" + requestMessage.Content); agentDoc.Root.Element("CreateTime").SetValue(DateTimeHelper.GetWeixinDateTime(DateTime.Now)); //修改时间,防止去重 agentDoc.Root.Element("MsgId").SetValue("123"); //防止去重 agentXml = agentDoc.ToString(); #endregion var responseXml = MessageAgent.RequestXml(this, agentUrl, agentToken, agentXml); //获取返回的XML //上面的方法也可以使用扩展方法:this.RequestResponseMessage(this,agentUrl, agentToken, RequestDocument.ToString()); /* 如果有WeiweihiKey,可以直接使用下面的这个MessageAgent.RequestWeiweihiXml()方法。 * WeiweihiKey专门用于对接www.weiweihi.com平台,获取方式见:https://www.weiweihi.com/ApiDocuments/Item/25#51 */ //var responseXml = MessageAgent.RequestWeiweihiXml(weiweihiKey, RequestDocument.ToString());//获取Weiweihi返回的XML DateTime dt2 = DateTime.Now; //计时结束 //转成实体。 /* 如果要写成一行,可以直接用: * responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString()); * 或 * */ var msg = string.Format("\r\n\r\n代理过程总耗时:{0}毫秒", (dt2 - dt1).Milliseconds); var agentResponseMessage = responseXml.CreateResponseMessage(this.MessageEntityEnlightener); if (agentResponseMessage is ResponseMessageText) { (agentResponseMessage as ResponseMessageText).Content += msg; } else if (agentResponseMessage is ResponseMessageNews) { (agentResponseMessage as ResponseMessageNews).Articles[0].Description += msg; } return(agentResponseMessage); //可能出现多种类型,直接在这里返回 }) .Keywords(new[] { "测试", "退出" }, () => { /* * 这是一个特殊的过程,此请求通常来自于微微嗨(http://www.weiweihi.com)的“盛派网络小助手”应用请求(https://www.weiweihi.com/User/App/Detail/1), * 用于演示微微嗨应用商店的处理过程,由于微微嗨的应用内部可以单独设置对话过期时间,所以这里通常不需要考虑对话状态,只要做最简单的响应。 */ if (defaultResponseMessage.Content == "测试") { //进入APP测试 defaultResponseMessage.Content = "您已经进入【盛派网络小助手】的测试程序,请发送任意信息进行测试。发送文字【退出】退出测试对话。10分钟内无任何交互将自动退出应用对话状态。"; } else { //退出APP测试 defaultResponseMessage.Content = "您已经退出【盛派网络小助手】的测试程序。"; } return(defaultResponseMessage); }) .Keyword("AsyncTest", () => { //异步并发测试(提供给单元测试使用) #if NET45 DateTime begin = DateTime.Now; int t1, t2, t3; System.Threading.ThreadPool.GetAvailableThreads(out t1, out t3); System.Threading.ThreadPool.GetMaxThreads(out t2, out t3); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(4)); DateTime end = DateTime.Now; var thread = System.Threading.Thread.CurrentThread; defaultResponseMessage.Content = string.Format("TId:{0}\tApp:{1}\tBegin:{2:mm:ss,ffff}\tEnd:{3:mm:ss,ffff}\tTPool:{4}", thread.ManagedThreadId, HttpContext.Current != null ? HttpContext.Current.ApplicationInstance.GetHashCode() : -1, begin, end, t2 - t1 ); #endif return(defaultResponseMessage); }) .Keyword("OPEN", () => { var openResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageNews>(); openResponseMessage.Articles.Add(new Article() { Title = "开放平台微信授权测试", Description = @"点击进入Open授权页面。 授权之后,您的微信所收到的消息将转发到第三方(盛派网络小助手)的服务器上,并获得对应的回复。 测试完成后,您可以登陆公众号后台取消授权。", Url = "http://sdk.weixin.senparc.com/OpenOAuth/JumpToMpOAuth" }); return(openResponseMessage); }) .Keyword("错误", () => { var errorResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); //因为没有设置errorResponseMessage.Content,所以这小消息将无法正确返回。 return(errorResponseMessage); }) .Keyword("容错", () => { Thread.Sleep(4900); //故意延时1.5秒,让微信多次发送消息过来,观察返回结果 var faultTolerantResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>(); faultTolerantResponseMessage.Content = string.Format("测试容错,MsgId:{0},Ticks:{1}", requestMessage.MsgId, DateTime.Now.Ticks); return(faultTolerantResponseMessage); }) .Keyword("TM", () => { var openId = requestMessage.FromUserName; var checkCode = Guid.NewGuid().ToString("n").Substring(0, 3); //为了防止openId泄露造成骚扰,这里启用验证码 TemplateMessageCollection[checkCode] = openId; defaultResponseMessage.Content = string.Format(@"新的验证码为:{0},请在网页上输入。网址:https://sdk.weixin.senparc.com/AsyncMethods", checkCode); return(defaultResponseMessage); }) .Keyword("OPENID", () => { var openId = requestMessage.FromUserName; //获取OpenId var userInfo = Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(appId, openId, Language.zh_CN); defaultResponseMessage.Content = string.Format( "您的OpenID为:{0}\r\n昵称:{1}\r\n性别:{2}\r\n地区(国家/省/市):{3}/{4}/{5}\r\n关注时间:{6}\r\n关注状态:{7}", requestMessage.FromUserName, userInfo.nickname, (WeixinSex)userInfo.sex, userInfo.country, userInfo.province, userInfo.city, DateTimeHelper.GetDateTimeFromXml(userInfo.subscribe_time), userInfo.subscribe); return(defaultResponseMessage); }) .Keyword("EX", () => { var ex = new WeixinException("openid:" + requestMessage.FromUserName + ":这是一条测试异常信息"); //回调过程在global的ConfigWeixinTraceLog()方法中 defaultResponseMessage.Content = "请等待异步模板消息发送到此界面上(自动延时数秒)。\r\n当前时间:" + DateTime.Now.ToString(); return(defaultResponseMessage); }) .Keyword("MUTE", () => //不回复任何消息 { //方案一: return(new SuccessResponseMessage()); //方案二: var muteResponseMessage = base.CreateResponseMessage <ResponseMessageNoResponse>(); return(muteResponseMessage); //方案三: base.TextResponseMessage = "success"; return(null); //方案四: return(null); //在 Action 中结合使用 return new FixWeixinBugWeixinResult(messageHandler); }) .Keyword("JSSDK", () => { defaultResponseMessage.Content = "点击打开:http://sdk.weixin.senparc.com/WeixinJsSdk"; return(defaultResponseMessage); }) .Keyword("Oauth网页授权", () => { string redirectUrl = AgentUrl + "/WeiXin/OAuth"; string oAuthUrl = OAuthApi.GetAuthorizeUrl(AppId, redirectUrl, "123", OAuthScope.snsapi_base); Log.Info("1.oAuthUrl地址", oAuthUrl, null); defaultResponseMessage.Content = oAuthUrl.ToString(); return(defaultResponseMessage); }) .Keyword("消费", () => { //模版消息 string access_token = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); //AccessToken string openId = requestMessage.FromUserName; //用户openId string templateId = "YdCnLUZGJATUv5POmdg4cTBpEWe8CGm8nkuoa9hJnjc"; //模版id string linkUrl = "http://www.baidu.com"; //点击详情后跳转后的链接地址,为空则不跳转 var templateData = new ProductTemplateData() { first = new TemplateDataItem("您好,您的订单已支付成功!", "#000000"), product = new TemplateDataItem("旺旺大礼包", "#000000"), price = new TemplateDataItem("99.8元", "#000000"), time = new TemplateDataItem("2016-11-09 16:50:38", "#000000"), remark = new TemplateDataItem("感谢您的光临~", "#000000") }; SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage( access_token, openId, templateId, linkUrl, templateData); if (sendResult.errcode.ToString() == "请求成功") { //这里操作数据库,不返回数据。 //defaultResponseMessage.Content = sendResult.errmsg; } else { defaultResponseMessage.Content = "模版消息出现错误" + sendResult.errmsg; Log.Info("模版消息出现错误", sendResult.errmsg, null); } return(defaultResponseMessage); }) //Default不一定要在最后一个 .Default(() => { var result = new StringBuilder(); result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); if (CurrentMessageContext.RequestMessages.Count > 1) { result.AppendFormat("您刚才还发送了如下消息({0}/{1}):\r\n", CurrentMessageContext.RequestMessages.Count, CurrentMessageContext.StorageData); for (int i = CurrentMessageContext.RequestMessages.Count - 2; i >= 0; i--) { var historyMessage = CurrentMessageContext.RequestMessages[i]; result.AppendFormat("{0} 【{1}】{2}\r\n", historyMessage.CreateTime.ToString("HH:mm:ss"), historyMessage.MsgType.ToString(), (historyMessage is RequestMessageText) ? (historyMessage as RequestMessageText).Content : "[非文字类型]" ); } result.AppendLine("\r\n"); } result.AppendFormat("如果您在{0}分钟内连续发送消息,记录将被自动保留(当前设置:最多记录{1}条)。过期后记录将会自动清除。\r\n", GlobalMessageContext.ExpireMinutes, GlobalMessageContext.MaxRecordCount); result.AppendLine("\r\n"); result.AppendLine( "您还可以发送【位置】【图片】【语音】【视频】等类型的信息(注意是这几种类型,不是这几个文字),查看不同格式的回复。\r\nSDK官方地址:http://sdk.weixin.senparc.com"); defaultResponseMessage.Content = result.ToString(); return(defaultResponseMessage); }) //“一次订阅消息”接口测试 .Keyword("订阅", () => { defaultResponseMessage.Content = "点击打开:https://sdk.weixin.senparc.com/SubscribeMsg"; return(defaultResponseMessage); }) //正则表达式 .Regex(@"^\d+#\d+$", () => { defaultResponseMessage.Content = string.Format("您输入了:{0},符合正则表达式:^\\d+#\\d+$", requestMessage.Content); return(defaultResponseMessage); }); return(requestHandler.GetResponseMessage() as IResponseMessageBase); }