Esempio n. 1
0
 /// <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);
     }
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        //标题委托房源通知
        //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);
        }
Esempio n. 5
0
        /// <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);
            }
        }
Esempio n. 6
0
        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();
                }
            }
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 11
0
        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();
                }
            }
        }
Esempio n. 12
0
        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();
                }
            }
        }
Esempio n. 13
0
 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);
     });
 }
Esempio n. 14
0
        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("");
        }
Esempio n. 15
0
        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();
                }
            }
        }
Esempio n. 16
0
        /// <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();
                }
            }
        }
Esempio n. 18
0
        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);
            }
        }
Esempio n. 19
0
        /// <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);
            }
        }
Esempio n. 20
0
 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);
 }
Esempio n. 21
0
        /// <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);
        }
Esempio n. 22
0
 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);
 }
Esempio n. 23
0
        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}&currentTenantId={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();
            }
        }
Esempio n. 24
0
        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);
                }
            }
        }
Esempio n. 25
0
        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();
                }
            }
        }
Esempio n. 26
0
        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();
                }
            }
        }
Esempio n. 27
0
 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);
        }