コード例 #1
0
        public async Task <Result <string> > PrevAutoPush([FromBody] WxAutoPushShow item)
        {
            if (!string.IsNullOrEmpty(item.OpenID))
            {
                return(await wxAutoPushHelper.AutoRespond(item, item.OpenID));
            }
            else
            {
                if (string.IsNullOrEmpty(item.PrevNick))
                {
                    return(new Result <string> {
                        Message = "请输入要预览的微信用户昵称!"
                    });
                }

                // 用户信息
                var wxUser = await repo.FirstOrDefaultAsync <WxUserInfo>(x => x.NickName == item.PrevNick && x.IsSubscribe == 1);

                if (wxUser == null)
                {
                    return(new Result <string> {
                        Message = "昵称对应的微信用户不存在!"
                    });
                }

                return(await wxAutoPushHelper.AutoRespond(item, wxUser.OpenId));
            }
        }
コード例 #2
0
        /// <summary>
        /// 构造自动推送消息
        /// </summary>
        /// <param name="push"></param>
        /// <param name="baseMsg"></param>
        /// <param name="apMsgType"></param>
        /// <returns></returns>
        private async Task <PubKfBaseMsg> GetAutoPushMsg(WxAutoPushShow push, PubKfBaseMsg baseMsg, Enum_ApMsgType apMsgType)
        {
            switch (apMsgType)
            {
            // 文本(昵称)和红包消息需要单独发送
            case Enum_ApMsgType.Image:
                baseMsg = new PubKfImgMsg {
                    image = new PubKfImgContent {
                        media_id = push.MediaId
                    }
                };
                break;

            case Enum_ApMsgType.Voice:
                baseMsg = new PubKfVoiceMsg {
                    voice = new PubKfVoiceContent {
                        media_id = push.MediaId
                    }
                };
                break;

            case Enum_ApMsgType.Video:
                baseMsg = new PubKfVideoMsg {
                    video = new PubKfVideoContent {
                        media_id = push.MediaId, thumb_media_id = push.VideoThumbMediaId, title = push.VideoTitle, description = push.VideoDescription
                    }
                };
                break;

            case Enum_ApMsgType.News:
                baseMsg = new PubKfMpNewsMsg {
                    mpnews = new PubKfMpnewsContent {
                        media_id = push.MediaId
                    }
                };
                break;

            case Enum_ApMsgType.BackNews:
                var lstArts = await wxAutoConvertHelper.GetAutoPushBackNews(push);

                baseMsg = new PubKfNewsMsg {
                    news = new PubKfNewsContent {
                        articles = lstArts
                    }
                };
                break;

            default:
                break;
            }

            return(baseMsg);
        }
コード例 #3
0
        public async Task <Result <string> > SaveAutoPush([FromBody] WxAutoPushShow item)
        {
            try
            {
                // 多图文
                if (item.LstSelArtIds != null && item.LstSelArtIds.Count > 0)
                {
                    item.ArtIds = string.Join(",", item.LstSelArtIds);
                }

                // 性别
                if (item.LstSelSex != null && item.LstSelSex.Count > 0)
                {
                    item.PushingSex = string.Join(",", item.LstSelSex);
                }

                // 视频
                if (item.ContentType == Enum_ApMsgType.Video.ToString())
                {
                    var vedio = await repo.FirstOrDefaultAsync <WxMediaShow>(x => x.MediaId == item.MediaId);

                    if (vedio != null)
                    {
                        item.VideoTitle       = vedio.Title;
                        item.VideoDescription = vedio.Introduction;
                    }
                }

                var dtNow = DateTime.Now;
                var user  = currentUser.UserName;
                if (!item.CreateTime.HasValue)
                {
                    item.Creater    = user;
                    item.CreateTime = dtNow;
                }

                item.Updater    = user;
                item.UpdateTime = dtNow;
                await repo.SaveAsync(item);

                return(new Result <string> {
                    IsSucc = true, Message = "保存自动推送配置成功!"
                });
            }
            catch (Exception ex)
            {
                logHelper.Error("SaveAutoPush:保存自动推送配置失败:" + ex.Message + "     " + ex.StackTrace);
            }

            return(new Result <string> {
                Message = "保存自动推送配置失败!"
            });
        }
コード例 #4
0
        /// <summary>
        /// 发送红包消息(定时推送)
        /// </summary>
        /// <param name="item"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public async Task <Result <string> > SendAutoPushRedPack(WxAutoPushShow item, string openId)
        {
            // 判断红包个数
            var sendCount = repo.SqlQuerySingle <int>(" SELECT COUNT(1) FROM WxAutoPushDetail WHERE AutoId = @Id ", new { Id = item.Id });

            if (sendCount >= item.RedCount)
            {
                return(new Result <string> {
                    Message = "很抱歉,你来晚了,红包已经发送完毕!"
                });
            }
            // 判断用户是否领取过
            var exist = await repo.FirstOrDefaultAsync <WxAutoPushDetail>(x => x.PushId == item.Id && x.Opend == openId);

            if (exist != null)
            {
                return(new Result <string> {
                    Message = "你已经领取过了,请勿重复领取,把机会留给没有参与的用户!"
                });
            }
            // 发送红包
            var redRes = RedpackApi.SendPack(openId, item.RedAmount, item.RedAct, item.RedWish, item.RedWish, "");

            logHelper.Debug("SendPack:发送红包结果:" + ComHelper.JsonSerialize(redRes));
            if (redRes.IsSucc)
            {
                //红包发送成功
                var autoHis = await SaveAutoPushHis(item.Id, openId);

                logHelper.Debug("SendPack:发送红包成功:" + autoHis.JsonSerialize());
                return(new Result <string> {
                    IsSucc = true, Message = "发送红包成功!"
                });
            }
            else
            {
                var msg = "红包发送失败:" + redRes.err_code + "    " + redRes.err_code_des;
                logHelper.Error("SendPack:" + msg);
                return(new Result <string> {
                    Message = msg
                });
            }
        }
コード例 #5
0
        /// <summary>
        /// 后台图文转换成客服图文消息(定时推送)
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public async Task <List <PubKfArticle> > GetAutoPushBackNews(WxAutoPushShow item)
        {
            var lstArts = new List <PubKfArticle>();

            if (!string.IsNullOrEmpty(item.ArtIds))
            {
                // 选定的图文ids
                item.LstSelArtIds = item.ArtIds.StrSplitList().Select(x => Convert.ToInt64(x)).ToList();
                if (item.LstSelArtIds != null && item.LstSelArtIds.Count > 0)
                {
                    // 最终发送的图文列表
                    var lstBackAftNews = new List <WxBackNewsShow>();
                    // 选定的图文列表
                    var lstBackNews = await repo.QueryAsync <WxBackNewsShow>(x => x.IsDel == 0 && item.LstSelArtIds.Contains(x.Id));

                    if (item.IsMul == 0)
                    {
                        // 随机图文
                        var temp = ComHelper.GetRandomVal(lstBackNews);
                        lstBackAftNews.Add(temp);
                    }
                    else
                    {
                        // 多图文
                        lstBackAftNews = lstBackNews;
                    }
                    // 转换图文
                    foreach (var news in lstBackAftNews)
                    {
                        var temp = new PubKfArticle();
                        temp.title       = news.Name;
                        temp.description = news.SecondName;
                        temp.url         = ComHelper.UpdImgAbsPath(WebRoot, news.ArticleUrl);
                        temp.picurl      = ComHelper.UpdImgAbsPath(WebRoot, news.ImgUrlVir);
                        lstArts.Add(temp);
                    }
                }
            }

            return(lstArts);
        }
コード例 #6
0
        /// <summary>
        /// 推送消息
        /// </summary>
        /// <param name="push"></param>
        /// <param name="lstWxUser"></param>
        /// <returns></returns>
        private async Task PushMsgToUser(WxAutoPushShow push, List <WxUserInfo> lstWxUser)
        {
            // 构造消息
            var baseMsg   = new PubKfBaseMsg();
            var apMsgType = ComHelper.GetEnumValueByStr <Enum_ApMsgType>(push.ContentType);

            // 构造自动推送消息
            baseMsg = await GetAutoPushMsg(push, baseMsg, apMsgType);

            logHelper.Debug("AutoPushJob:即将发送的消息为:" + baseMsg.JsonSerializeNoNull());
            // 遍历发送客服消息
            foreach (var user in lstWxUser)
            {
                try
                {
                    await SendAutoPushMsg(push, baseMsg, apMsgType, user);
                }
                catch (Exception ex)
                {
                    logHelper.Error("AutoPushJob:发送消息给用户失败:" + user.OpenId + "      " + ex.Message + "      " + ex.StackTrace);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// 定时推送消息
        /// </summary>
        /// <param name="push"></param>
        /// <param name="baseMsg"></param>
        /// <param name="apMsgType"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        private async Task SendAutoPushMsg(WxAutoPushShow push, PubKfBaseMsg baseMsg, Enum_ApMsgType apMsgType, WxUserInfo user)
        {
            // 文本消息 昵称赋值
            if (apMsgType == Enum_ApMsgType.Text)
            {
                var txt = push.TextContent.Replace("{nickname}", user.NickName);
                baseMsg = new PubKfTextMsg {
                    text = new PubKfTextContent {
                        content = txt
                    }
                };
            }

            // 红包单独发送
            if (apMsgType == Enum_ApMsgType.RedBag)
            {
                var apiRes = await wxAutoConvertHelper.SendAutoPushRedPack(push, user.OpenId);

                logHelper.Debug("AutoPushJob:发送红包用户:" + user.OpenId + "     结果:" + apiRes);
            }
            else
            {
                // 非红包消息发送
                var apiRes = PubKfApi.SendMsg(baseMsg, user.OpenId);
                if (apiRes.IsSuss)
                {
                    await wxAutoConvertHelper.SaveAutoPushHis(push.Id, user.OpenId);
                }
                else
                {
                    logHelper.Error("AutoPushJob:发送消息给" + user.OpenId + "失败:" + apiRes.errcode + "      " + apiRes.errmsg);
                }

                logHelper.Debug("AutoPushJob:发送消息用户:" + user.OpenId + "     结果:" + apiRes.JsonSerialize());
            }
        }
コード例 #8
0
        public async Task <Result <string> > UpdAutoPush([FromBody] WxAutoPushShow item)
        {
            try
            {
                item.IsDel      = 1 - item.IsDel;
                item.Updater    = currentUser.UserName;
                item.UpdateTime = DateTime.Now;
                await repo.UpdateAsync(item, new List <string> {
                    "IsDel", "Updater", "UpdateTime"
                });

                return(new Result <string> {
                    IsSucc = true, Message = "更新自动推送状态成功!"
                });
            }
            catch (Exception ex)
            {
                logHelper.Error("UpdAutoPush:更新自动推送状态失败:" + ex.Message + "     " + ex.StackTrace);
            }

            return(new Result <string> {
                Message = "更新自动推送状态失败!"
            });
        }
コード例 #9
0
        /// <summary>
        /// 定时推送(客服消息)
        /// </summary>
        /// <param name="item"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public async Task <Result <string> > AutoRespond(WxAutoPushShow item, string openId)
        {
            try
            {
                // 自动推送类型
                var type = ComHelper.GetEnumValueByStr <Enum_ApMsgType>(item.ContentType);
                // 发送客服消息预览
                var apiRes = new PubApiResult();
                switch (type)
                {
                case Enum_ApMsgType.Text:
                    item.TextContent = item.TextContent.Replace("{nickname}", string.Empty);
                    apiRes           = PubKfApi.SendTextMsg(openId, item.TextContent);
                    break;

                case Enum_ApMsgType.Image:
                    apiRes = PubKfApi.SendImageMsg(openId, item.MediaId);
                    break;

                case Enum_ApMsgType.Voice:
                    apiRes = PubKfApi.SendVoiceMsg(openId, item.MediaId);
                    break;

                case Enum_ApMsgType.News:
                    apiRes = PubKfApi.SendMpNewsMsg(openId, item.MediaId);
                    break;

                case Enum_ApMsgType.Video:
                    apiRes = PubKfApi.SendVideoMsg(openId, item.MediaId, item.VideoThumbMediaId, item.VideoTitle, item.VideoDescription);
                    break;

                case Enum_ApMsgType.BackNews:
                    var lstArts = await wxAutoConvertHelper.GetAutoPushBackNews(item);

                    apiRes = PubKfApi.SendNewsMsg(openId, lstArts);
                    break;

                case Enum_ApMsgType.RedBag:
                    return(await wxAutoConvertHelper.SendAutoPushRedPack(item, openId));

                default:
                    break;
                }

                logHelper.Debug("PrevKeyword:预览返回结果:" + ComHelper.JsonSerialize(apiRes));
                if (!apiRes.IsSuss)
                {
                    var msg = "预览出错:" + apiRes.errcode + "    " + apiRes.errmsg;
                    logHelper.Error("PrevKeyword:" + msg);
                    return(new Result <string> {
                        Message = msg
                    });
                }

                return(new Result <string> {
                    IsSucc = true, Message = "发送预览消息成功!"
                });
            }
            catch (Exception ex)
            {
                logHelper.Error("PrevKeyword:发送预览消息失败:" + ex.Message + "     " + ex.StackTrace);
            }

            return(new Result <string> {
                Message = "发送预览消息失败!"
            });
        }