コード例 #1
0
        /// <summary>
        /// 修改审核状态 ,拒绝
        /// </summary>
        /// <param name="args"></param>
        public NormalResult PictureVoteItemRejected(DomainContext domainContext, Campaign_PictureVoteItemRejectedArgs args)
        {
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@id", args.ItemId));
            parameterList.Add(new CommandParameter("@approveStatus", EnumCampaignPictureVoteItemApproveStatus.Rejected));
            parameterList.Add(new CommandParameter("@rejectedMessage", args.Message));

            _campaignManager.DataBase.ExecuteNonQuery(
                "UPDATE [Campaign_PictureVoteItem] SET [ApproveStatus] = @approveStatus,[RejectedMessage] = @rejectedMessage WHERE [Id] = @id",
                parameterList);

            return(new NormalResult());
        }
コード例 #2
0
        public int GetTotalCount(DomainContext domainContext)
        {
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));

            int intCount = 0;

            _dataBase.ExecuteScalar <int>(
                "SELECT Count(1) FROM [ScenicQRCode] WHERE [Domain] = @domainId AND [AppId] = @appId",
                parameterList, (scalarValue) => { intCount = scalarValue; });

            return(intCount);
        }
コード例 #3
0
        public void SaveAutoReplyOnMessage(DomainContext domainContext, AutoReplyOnMessageEntity args)
        {
            if (args == null)
            {
                return;
            }

            lock (domainContext)
            {
                _dataBase.Remove(args);
                _dataBase.Insert(args);

                _domainManager.UpdateLastUpdateTime(domainContext.Domain.Id);
            }
        }
コード例 #4
0
        private ButtonClick GetClickButton(JToken json, DomainContext domainContext)
        {
            ButtonClick button = new ButtonClick();

            button.Name = json["name"].ToString();
            string key = json["key"].ToString();

            switch (json["clickType"].ToString())
            {
            case "MemberQRCode":
                key = "MemberQRCode:" + key;
                break;
            }

            return(button);
        }
コード例 #5
0
        /// <summary>
        /// 获取购物车中的商品 种类 数量
        /// </summary>
        /// <returns></returns>
        public int GetShoppingCartPointCommodityCount(DomainContext domainContext, Guid memberId)
        {
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));
            parameterList.Add(new CommandParameter("@memberId", memberId));

            int intCount = 0;

            _dataBase.ExecuteScalar <int>(
                "SELECT Count(1) FROM [PointCommodityShoppingCart] WHERE [Domain] = @domainId AND [AppId] = @appId AND [Member] = @memberId",
                parameterList, (scalarValue) => { intCount = scalarValue; });

            return(intCount);
        }
コード例 #6
0
        public RecommendUrlEntity Get(DomainContext domainContext, Guid memberId)
        {
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));
            parameterList.Add(new CommandParameter("@memberId", memberId));

            List <RecommendUrlEntity> list = _dataBase.Select <RecommendUrlEntity>(
                "SELECT * FROM [RecommendUrl] WHERE [Domain] = @domainId AND [AppId] = @appId AND [Member] = @memberId", parameterList);

            if (list.Count > 0)
            {
                return(list[0]);
            }

            Guid id = Guid.NewGuid();

            string url = "{0}Function/RecommendUrl/{1}?id={2}";

            url = String.Format(url, _settingsManager.GetClientAddress(domainContext.AppId), domainContext.Domain.Id, id);
            string shortUrl = String.Empty;
            RequestApiResult <WeixinCreateShortUrlResult> getShortUrlResult = ShortUrlApiWrapper.GetShortUrl(domainContext, url);

            if (getShortUrlResult.Success)
            {
                shortUrl = getShortUrlResult.ApiResult.ShortUrl;
            }

            parameterList.Add(new CommandParameter("@id", id));
            parameterList.Add(new CommandParameter("@url", url));
            parameterList.Add(new CommandParameter("@shortUrl", shortUrl));

            _dataBase.ExecuteNonQuery(CommandType.StoredProcedure, "CreateRecommendUrl", parameterList);

            RecommendUrlEntity recommendUrl = new RecommendUrlEntity()
            {
                Id       = id,
                Domain   = domainContext.Domain.Id,
                AppId    = domainContext.AppId,
                Member   = memberId,
                Url      = url,
                ShortUrl = shortUrl
            };

            return(recommendUrl);
        }
コード例 #7
0
        private ButtonView GetWxcCampaignButton(JToken json, DomainContext domainContext)
        {
            string clientAddress = _clientAddress.Replace("$APPID$", domainContext.AppId);

            EnumCampaignType type = (EnumCampaignType)Enum.Parse(typeof(EnumCampaignType), json["campaignType"].ToString());

            ButtonView button = new ButtonView();

            button.Name = json["name"].ToString();
            //http://wx8c36b3c0000a0a49.wxc.shengxunwei.com/Campaign/PictureVote/2a58d820-de07-4c8f-80b9-b5cb5a1028b4?id=16bc2e8e-8dbd-405a-85cc-34fb1879fd8a
            string campaignUri = null;

            switch (type)
            {
            case EnumCampaignType.PictureVote:
                campaignUri = "PictureVote";
                break;

            case EnumCampaignType.MemberQRCode:
                campaignUri = "MemberQRCode";
                break;

            case EnumCampaignType.Lottery:
                campaignUri = "Lottery";
                break;

            case EnumCampaignType.LuckyTicket:
                campaignUri = "LuckyTicket";
                break;

            case EnumCampaignType.ShakingLottery:
                campaignUri = "ShakingLottery";
                break;

            default:
                Debug.Assert(false, "未知的活动类型");
                _log.Write("发布菜单时遇到未知的活动类型", type.ToString(), TraceEventType.Error);
                break;
            }

            button.Url = String.Format(clientAddress + "Campaign/{0}/{1}?campaignId={2}",
                                       campaignUri, domainContext.Domain.Id, json["campaign"].ToString());

            return(button);
        }
コード例 #8
0
        /// <summary>
        /// 用户管理-获取用户列表
        /// 未认证订阅号 未认证服务号 没有此权限
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="next_openid"></param>
        /// <returns></returns>
        public static RequestApiResult <WeixinGetUserListResult> GetUserList(DomainContext domainContext, string next_openid)
        {
            RequestApiResult <WeixinGetUserListResult> result;

            if (domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedService ||
                domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedSubscription)
            {
                result                       = new RequestApiResult <WeixinGetUserListResult>();
                result.ApiError              = new WeixinApiErrorResult();
                result.ApiError.ErrorCode    = -1;
                result.ApiError.ErrorMessage = "未认证订阅号 及 未认证服务号 没有获取用户列表权限。";
                return(result);
            }

            string accessToken = domainContext.AccessToken;

            result = UserApi.GetUserList(accessToken, next_openid);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = UserApi.GetUserList(accessToken, next_openid);
                    if (result.Success == false)
                    {
                        string logMessage = result.GetDetail() + Environment.NewLine + new StackTrace().ToString();
                        _log.Write("UserApi.GetUserList 失败", logMessage, TraceEventType.Warning);
                    }
                }
                else
                {
                    string logMessage = result.GetDetail() + Environment.NewLine + new StackTrace().ToString();
                    _log.Write("UserApi.GetUserList 失败", logMessage, TraceEventType.Warning);
                }
            }

            return(result);
        }
コード例 #9
0
        public string RemoveNormalMaterial(DomainContext domainContext, Guid id, string mediaId)
        {
            RequestApiResult requestApiResult = MaterialApiWrapper.RemoveMaterial(domainContext, mediaId);

            if (requestApiResult.Success == false)
            {
                return(requestApiResult.Message);
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@id", id));
            parameterList.Add(new CommandParameter("@mediaId", mediaId));

            _dataBase.ExecuteNonQuery("DELETE FROM [NormalMaterial] WHERE [Id] = @id AND [MediaId] = @mediaId",
                                      parameterList);

            return(null);
        }
コード例 #10
0
        /// <summary>
        /// 修改审核状态 ,通过
        /// </summary>
        /// <param name="args"></param>
        public NormalResult PictureVoteItemApprove(DomainContext domainContext, Campaign_PictureVoteItemApproveArgs args)
        {
            //判断是否达到最大可参与人数
            if (PictureVoteIsFullParticipant(args.CampaignId))
            {
                return(new NormalResult("该活动已达最大允许参与人数,如需调整允许参与的人数,请编辑此活动基本信息。"));
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@id", args.ItemId));
            parameterList.Add(new CommandParameter("@approveStatus", EnumCampaignPictureVoteItemApproveStatus.Approved));

            _campaignManager.DataBase.ExecuteNonQuery("UPDATE [Campaign_PictureVoteItem] SET [ApproveStatus] = @approveStatus WHERE [Id] = @id",
                                                      parameterList);

            //奖励参与者积分
            if (args.MemberId.HasValue)
            {
                Campaign_PictureVoteEntity campaignPictureVote = GetPictureVote(args.CampaignId);
                if (campaignPictureVote.ApprovedPoint > 0)
                {
                    CampaignEntity campaign = _campaignManager.GetCampaign(args.CampaignId);

                    PointTrackArgs pointTrackArgs = new PointTrackArgs();
                    pointTrackArgs.DomainId = campaign.Domain;
                    pointTrackArgs.MemberId = args.MemberId.Value;
                    pointTrackArgs.Quantity = campaignPictureVote.ApprovedPoint;
                    pointTrackArgs.Type     = MemberPointTrackType.Campaign;
                    pointTrackArgs.TagName  = campaign.Name;
                    pointTrackArgs.TagId    = campaign.Id;

                    _campaignManager.MemberManager.PointTrack(pointTrackArgs);
                }
            }

            return(new NormalResult());
        }
コード例 #11
0
        public NormalResult CreatePointCommodity(DomainContext domainContext, PointCommodityEntity pointCommodity)
        {
            if (pointCommodity == null)
            {
                Debug.Assert(false, "pointCommodity 为空");
                return(new NormalResult("参数错误"));
            }

            //if (domainContext.Domain.Type == EnumDomainType.Free)
            //{
            //    //最大数量不允许超过10个
            //    if (GetTotalCount(domainContext) >= 10)
            //    {
            //        return new NormalResult("免费帐户创建积分商品最多不可超过10个。");
            //    }
            //}

            pointCommodity.CreateTime = DateTime.Now;
            pointCommodity.Sort       = _domainManager.GetSort(pointCommodity.Domain, "PointCommodity");
            _dataBase.Insert(pointCommodity);

            return(new NormalResult());
        }
コード例 #12
0
        public string UpdateMemberGroup(DomainContext domainContext, MemberGroupEntity group)
        {
            if (group == null)
            {
                return("参数错误。");
            }

            //先往微信后台更新,成功后写数据库
            WeixinGroup apiArgs = new WeixinGroup();

            apiArgs.Group.Id   = group.GroupId;
            apiArgs.Group.Name = group.Name;
            RequestApiResult updateResult = GroupApiWrapper.Update(domainContext, apiArgs);

            if (updateResult.Success == false)
            {
                return(updateResult.Message);
            }

            _dataBase.Update(group);

            return(null);
        }
コード例 #13
0
        public MemberEntity AddMember(DomainContext domainContext, AddMemberArgs args)
        {
            if (args == null)
            {
                Debug.Assert(false, "AddMember args == null");
                return(null);
            }

            MemberEntity member = new MemberEntity();

            member.Domain          = domainContext.Domain.Id;
            member.AppId           = domainContext.AppId;
            member.OpenId          = args.WeixinUser.OpenId;
            member.NickName        = args.WeixinUser.Nickname;
            member.Sex             = args.WeixinUser.Sex;
            member.City            = args.WeixinUser.City;
            member.Country         = args.WeixinUser.Country;
            member.Province        = args.WeixinUser.Province;
            member.Language        = args.WeixinUser.Language;
            member.Headimgurl      = args.WeixinUser.Headimgurl;
            member.SubscribeTime   = args.WeixinUser.SubscribeTime;
            member.Remark          = args.WeixinUser.Remark;
            member.GroupId         = args.WeixinUser.GroupId;
            member.TagList         = args.WeixinUser.GetTagListString();
            member.ScenicQRCodeId  = args.ScenicQRCodeId;
            member.RefereeMemberId = args.RefereeMemberId;
            member.Attention       = true;
            member.Point           = domainContext.InitialMemberPoint;
            member.CardNumber      = GetMemberCardNumber(domainContext.Domain.Id, domainContext.AppId);
            member.SyncFlag        = args.SyncFlag;

            //TODO:初始积分要写记录表

            _dataBase.Insert(member);

            return(member);
        }
コード例 #14
0
        public NormalResult RemoveMemberTag(DomainContext domainContext, Guid id)
        {
            NormalResult result = new NormalResult(false);

            MemberTagEntity memberTag = GetMemberTag(id);

            if (memberTag == null)
            {
                result.Message = "分组不存在。";
                return(result);
            }

            //先往微信后台更新,成功后写数据库
            RequestApiResult removeResult = TagsApiWrapper.Remove(domainContext, memberTag.TagId);

            if (removeResult.Success == false)
            {
                result.Message = removeResult.Message;
                return(result);
            }

            //移除此标签下的用户的这个标签
            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id));
            parameterList.Add(new CommandParameter("@appId", domainContext.AppId));
            parameterList.Add(new CommandParameter("@tagId", memberTag.TagId.ToString() + ","));

            _dataBase.ExecuteNonQuery(
                "UPDATE [Member] SET [TagList] =  REPLACE([TagList],@tagId,'') WHERE [Domain] = @domain AND [AppId] = @appId AND CHARINDEX(@tagId,[TagList]) > 0",
                parameterList);

            _dataBase.Remove(memberTag);

            result.Success = true;
            return(result);
        }
コード例 #15
0
        public string RemoveArticleMaterial(DomainContext domainContext, Guid id, string mediaId)
        {
            //未发布的素材无 mediaId
            if (String.IsNullOrEmpty(mediaId) == false)
            {
                RequestApiResult requestApiResult = MaterialApiWrapper.RemoveMaterial(domainContext, mediaId);
                if (requestApiResult.Success == false)
                {
                    return(requestApiResult.Message);
                }
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@id", id));

            _dataBase.ExecuteNonQuery("DELETE FROM [ArticleMaterial] WHERE [Id] = @id",
                                      parameterList);

            _dataBase.ExecuteNonQuery("DELETE FROM [ArticleMaterialItem] WHERE [ArticleMaterial] = @id",
                                      parameterList);

            return(null);
        }
コード例 #16
0
        /// <summary>
        /// 发布指定的图文素材到微信后台
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public PublishArticleMaterialResult PublishArticleMaterial(DomainContext domainContext, Guid id)
        {
            PublishArticleMaterialResult result = new PublishArticleMaterialResult();

            ArticleMaterialEntity args = GetArticleMaterial(id);

            if (args == null || args.ArticleList == null)
            {
                result.Message = "参数错误。";
                return(result);
            }

            if (args.WeixinStatus == 0)
            {
                //向微信后台发送
                string addToWeixin = AddArticleMaterialToWeixin(domainContext, args);
                if (String.IsNullOrEmpty(addToWeixin))
                {
                    result.Success = true;
                    result.MediaId = args.MediaId;
                }
                else
                {
                    result.Message = addToWeixin;
                }
            }
            else if (args.WeixinStatus == 1)
            {
                //TODO:取回URL
            }
            else if (args.WeixinStatus == 2)
            {
                result.Message = "该图文消息已经发布过了。";
            }
            return(result);
        }
コード例 #17
0
        public string CreateMemberGroup(DomainContext domainContext, MemberGroupEntity group)
        {
            if (group == null)
            {
                return("参数错误。");
            }

            //先往微信后台添加,成功后写数据库
            WeixinCreateGroupArgs apiArgs = new WeixinCreateGroupArgs();

            apiArgs.Group.Name = group.Name;
            RequestApiResult <WeixinGroup> createResult = GroupApiWrapper.Create(domainContext, apiArgs);

            if (createResult.Success == false)
            {
                return(createResult.Message);
            }

            group.Domain  = domainContext.Domain.Id;
            group.GroupId = createResult.ApiResult.Group.Id;
            _dataBase.Insert(group);

            return(null);
        }
コード例 #18
0
 /// <summary>
 /// 授权完成
 /// </summary>
 /// <param name="domainContext"></param>
 protected virtual void OnDocking(DomainContext domainContext)
 {
     _logService.Write("DomainPool.OnDocking",
                       JsonHelper.Serializer(domainContext.Domain), TraceEventType.Verbose);
 }
コード例 #19
0
 /// <summary>
 /// 获取客户端URL地址
 /// http://$APPID$.wxc.shengxunwei.com/
 /// </summary>
 /// <param name="domainContext"></param>
 /// <returns></returns>
 public string GetClientAddress(DomainContext domainContext)
 {
     return(_clientAddress.Replace("$APPID$", domainContext.AppId));
 }
コード例 #20
0
        /// <summary>
        /// 发布图文消息到微信后台
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        private string AddArticleMaterialToWeixin(DomainContext domainContext, ArticleMaterialEntity args)
        {
            //向微信后台发送
            WeixinAddArticleMaterialArgs weixinArgs = new WeixinAddArticleMaterialArgs();

            weixinArgs.ArticleList = new List <WeixinArticleMaterial>();
            for (int i = 0; i < args.ArticleList.Count; i++)
            {
                ArticleMaterialItemEntity item = args.ArticleList[i];
                item.Index = i;

                //替换其中的图片地址为上传到微信服务器的地址
                if (item.ImgMappingList != null)
                {
                    foreach (var imgMappingItem in item.ImgMappingList)
                    {
                        if (String.IsNullOrEmpty(imgMappingItem.FileUrl) || String.IsNullOrEmpty(imgMappingItem.WeixinUrl))
                        {
                            continue;
                        }

                        item.Content =
                            item.Content.Replace(imgMappingItem.FileUrl, imgMappingItem.WeixinUrl);
                    }
                }

                weixinArgs.ArticleList.Add(item);
            }

            RequestApiResult <WeixinAddArticleMaterialResult> addArticleMaterialResult =
                MaterialApiWrapper.AddArticleMaterial(domainContext, weixinArgs);

            if (addArticleMaterialResult.Success)
            {
                //得到图文素材的MediaId
                string mediaId = addArticleMaterialResult.ApiResult.MediaId;
                args.MediaId = mediaId;

                //更新图文素材表中的MediaId字段
                List <CommandParameter> parameterList = new List <CommandParameter>();
                parameterList.Add(new CommandParameter("@id", args.Id));
                parameterList.Add(new CommandParameter("@mediaId", mediaId));

                _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterial] SET [MediaId] = @mediaId,[WeixinStatus] = 1 WHERE [Id] = @id",
                                          parameterList);

                //因为微信API在添加图文后不返回URL,所以需要通过获取素材接口再次获取以便得到URL
                //GetArticleMaterial
                RequestApiResult <WeixinArticleMaterialListItemContent> getArticleMaterialResult =
                    MaterialApiWrapper.GetArticleMaterial(domainContext, mediaId);

                if (getArticleMaterialResult.Success)
                {
                    for (int i = 0; i < getArticleMaterialResult.ApiResult.ItemList.Count; i++)
                    {
                        WeixinArticleMaterial item = getArticleMaterialResult.ApiResult.ItemList[i];

                        parameterList = new List <CommandParameter>();
                        parameterList.Add(new CommandParameter("@articleMaterial", args.Id));
                        parameterList.Add(new CommandParameter("@index", i));
                        parameterList.Add(new CommandParameter("@url", item.Url));

                        _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterialItem] SET [Url] = @url WHERE [ArticleMaterial] = @articleMaterial AND [Index] = @index",
                                                  parameterList);
                    }

                    _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterial] SET [WeixinStatus] = 2 WHERE [Id] = @articleMaterial",
                                              parameterList);
                }
                else
                {
                    return(getArticleMaterialResult.Message);
                }
            }
            else
            {
                return(addArticleMaterialResult.Message);
            }

            return(null);
        }
コード例 #21
0
        /// <summary>
        /// 对于已经提交微信后台的图文素材,只能按篇更新现有文章
        /// </summary>
        /// <param name="domainContext"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public string UpdateArticleMaterialItem(DomainContext domainContext, ArticleMaterialEntity args)
        {
            //受限于微信接口,更新图文素材只能删除原素材重新添加
            //因为重新添加会导致media_id发生变化,所以本地在使用时,要用自己的ID并维护不变
            //但是!如果把微信素材库的素材删除,会导致已经发送给关注者的连接失效,打不开
            //所以这里只删除本地的,微信后台的保持不删除
            //但是这种方式还有一个问题,就是修改是假修改,已经发给用户的素材事实上不会变化
            //而在微信后台修改图文内容是可以实现真修改的。
            //目前只能把本地保存和发布微信后台分开,一旦发布了微信后台,就不再允许添加删除文章

            if (args == null || args.ArticleList == null)
            {
                return("参数错误");
            }

            for (int i = 0; i < args.ArticleList.Count; i++)
            {
                ArticleMaterialItemEntity article = args.ArticleList[i];
                article.Index = i;
                if (article.ImgMappingList != null)
                {
                    article.ImgMapping = JsonHelper.Serializer(article.ImgMappingList);
                }
                _dataBase.Update(article);
            }

            //发布微信后台
            for (int i = 0; i < args.ArticleList.Count; i++)
            {
                ArticleMaterialItemEntity article = args.ArticleList[i];

                //替换其中的图片地址为上传到微信服务器的地址
                if (article.ImgMappingList != null)
                {
                    foreach (var imgMappingItem in article.ImgMappingList)
                    {
                        if (String.IsNullOrEmpty(imgMappingItem.FileUrl) || String.IsNullOrEmpty(imgMappingItem.WeixinUrl))
                        {
                            continue;
                        }

                        article.Content =
                            article.Content.Replace(imgMappingItem.FileUrl, imgMappingItem.WeixinUrl);
                    }
                }

                WeixinUpdateArticleMaterialArgs weixinArgs = new WeixinUpdateArticleMaterialArgs();
                weixinArgs.MediaId = args.MediaId;
                weixinArgs.Index   = i;
                weixinArgs.Article = article;

                RequestApiResult updateArticleMaterialResult =
                    MaterialApiWrapper.UpdateArticleMaterial(domainContext, weixinArgs);

                if (updateArticleMaterialResult.Success == false)
                {
                    return(updateArticleMaterialResult.Message);
                }
            }

            return(null);
        }
コード例 #22
0
        public string SendGroupMessage(DomainContext domainContext, SendGroupMessageArgs args)
        {
            if (args == null)
            {
                return("参数错误。");
            }

            GroupMessageEntity groupMessage = new GroupMessageEntity();

            groupMessage.AppId = domainContext.AppId;

            if (args.GroupId >= 0)
            {
                groupMessage.IsToAll = false;
                groupMessage.GroupId = args.GroupId;
            }
            else
            {
                groupMessage.IsToAll = true;
            }

            groupMessage.Type      = args.Type;
            groupMessage.Content   = args.Content;
            groupMessage.Url       = args.Url;
            groupMessage.Name      = args.Name;
            groupMessage.MediaId   = args.MediaId;
            groupMessage.ArticleId = args.ArticleId;

            WeixinGroupMessageSendAllArgs apiArgs = null;

            switch (groupMessage.Type)
            {
            case EnumGroupMessageType.Text:
                WeixinGroupMessageSendAllArgs_Text textMsg = new WeixinGroupMessageSendAllArgs_Text();
                textMsg.Content.Content = groupMessage.Content;
                apiArgs = textMsg;
                break;

            case EnumGroupMessageType.Image:
                WeixinGroupMessageSendAllArgs_Image imageMsg = new WeixinGroupMessageSendAllArgs_Image();
                imageMsg.Image.MediaId = groupMessage.MediaId;
                apiArgs = imageMsg;
                break;

            case EnumGroupMessageType.Article:
                string mediaId = _materialManager.GetArticleMaterialMediaId(args.ArticleId.Value);
                if (String.IsNullOrEmpty(mediaId) == false)
                {
                    WeixinGroupMessageSendAllArgs_Mpnews articleMsg = new WeixinGroupMessageSendAllArgs_Mpnews();
                    articleMsg.Mpnews.MediaId = mediaId;
                    apiArgs = articleMsg;
                }
                break;

            default:
                break;
            }

            if (apiArgs == null)
            {
                return("参数错误。");
            }

            //先往微信后台添加,成功后写数据库
            apiArgs.Filter.IsToAll = groupMessage.IsToAll;
            if (groupMessage.GroupId.HasValue && groupMessage.GroupId >= 0)
            {
                apiArgs.Filter.GroupId = groupMessage.GroupId.ToString();
            }
            // apiArgs.MsgType
            RequestApiResult <WeixinGroupMessageSendAllResult> sendAllResult =
                GroupMessageApiWrapper.SendAll(domainContext, apiArgs);

            if (sendAllResult.Success == false)
            {
                return(sendAllResult.Message);
            }

            groupMessage.MsgId     = sendAllResult.ApiResult.MsgId;
            groupMessage.MsgDataId = sendAllResult.ApiResult.MsgDataId;
            groupMessage.Domain    = domainContext.Domain.Id;
            _dataBase.Insert(groupMessage);

            return(null);
        }
コード例 #23
0
        public static RequestApiResult <WeixinGetNormalMaterialListResult> GetNormalMaterialList(DomainContext domainContext, WeixinGetMaterialListArgs args)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinGetNormalMaterialListResult> result = MaterialApi.GetNormalMaterialList(accessToken, args);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = MaterialApi.GetNormalMaterialList(accessToken, args);
                    if (result.Success == false)
                    {
                        _log.Write("MaterialApi.GetNormalMaterialList 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("MaterialApi.GetNormalMaterialList 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
コード例 #24
0
        private ButtonView GetWxcFunctionButton(JToken json, DomainContext domainContext)
        {
            string clientAddress = _clientAddress.Replace("$APPID$", domainContext.AppId);

            ButtonView button = new ButtonView();

            button.Name = json["name"].ToString();
            string uri = null;

            switch (json["function"].ToString())
            {
            case "portal":
                uri = "Home/Portal";
                break;

            case "memberCenter":
                uri = "Home/MemberCenter";
                break;

            case "pointCommodity":
                uri = "PointCommodity/PointCommodity";
                break;

            case "pointCommodityOrderList":
                uri = "PointCommodity/OrderList";
                break;

            case "pointAccount":
                uri = "Home/PointAccount";
                break;

            case "cashAccount":
                uri = "Pay/CashAccountTrack";
                break;

            case "oneDollarBuying":
                uri = "Campaign/OneDollarBuying";
                break;

            case "personalInfo":
                uri = "Home/PersonalInfo";
                break;

            case "movieTimes":
                uri = "Home/MovieTimes";
                break;

            case "staff":
                uri = "Staff/Home/Portal";
                break;

            default:
                Debug.Assert(false, "GetWxcFunctionButton:" + json["name"].ToString());
                _log.Write("发布菜单时遇到未知的功能类型", json["function"].ToString(), TraceEventType.Error);
                break;
            }

            button.Url = clientAddress + uri + "/" + domainContext.Domain.Id;

            return(button);
        }
コード例 #25
0
 /// <summary>
 /// 解除授权
 /// </summary>
 /// <param name="domainContext"></param>
 protected virtual void UnDocking(DomainContext domainContext)
 {
 }
コード例 #26
0
        /// <summary>
        /// 摇奖
        /// </summary>
        /// <param name="campaignId"></param>
        /// <param name="memberId"></param>
        /// <param name="domain"></param>
        /// <returns></returns>
        public NormalResult <Campaign_ShakingLotteryGiftEntity> Shake(Guid campaignId, Guid?periodId, Guid memberId, DomainContext domain)
        {
            NormalResult <Campaign_ShakingLotteryGiftEntity> result = new NormalResult <Campaign_ShakingLotteryGiftEntity>();

            CampaignEntity campaign = _campaignManager.GetCampaign(campaignId);

            if (campaign == null)
            {
                result.Message = "指定的活动不存在。";
                result.Success = false;
                return(result);
            }

            //状态是否进行中
            switch (campaign.Status)
            {
            case EnumCampaignStatus.Preparatory:
                result.Message = "活动尚未开始。";
                result.Success = false;
                return(result);

            case EnumCampaignStatus.End:
                result.Message = "活动已结束。";
                result.Success = false;
                return(result);
            }

            Campaign_ShakingLotteryEntity shakingLottery = Get(campaignId);

            if (shakingLottery == null)
            {
                result.Message = "指定的活动不存在。";
                result.Success = false;
                return(result);
            }

            if (shakingLottery.Mode == EnumCampaign_ShakingLotteryMode.Period)
            {
                if (shakingLottery.Period.HasValue == false)
                {
                    result.Message = "摇奖尚未开始~~";
                    result.Success = false;
                    return(result);
                }

                //直接参与最新一期
                periodId = shakingLottery.Period;
            }
            else
            {
                if (shakingLottery.Started == false)
                {
                    result.Message = "摇奖尚未开始~~";
                    result.Success = false;
                    return(result);
                }
            }

            //判断是否摇过了
            int playedTimes = GetMemberPlayedTimes(campaignId, periodId, memberId);

            if (playedTimes >= shakingLottery.ChanceTimes)
            {
                if (shakingLottery.Mode == EnumCampaign_ShakingLotteryMode.Period)
                {
                    result.Message = "您已经用本轮完全部参与机会~";
                }
                else
                {
                    result.Message = "您已经用完全部参与机会~";
                }

                result.Success = false;
                return(result);
            }
            //////

            Campaign_ShakingLotteryLogEntity log = new Campaign_ShakingLotteryLogEntity();

            log.CampaignId = campaignId;
            log.Period     = periodId;
            log.Domain     = domain.Domain.Id;
            log.AppId      = domain.AppId;
            log.Member     = memberId;
            log.Time       = DateTime.Now;

            //判断是否已经中奖了
            if (GetMemberObtainedGiftList(campaignId, memberId).Count > 0)
            {
                //同一个摇奖活动,只允许中一个奖,但是还有次数或新的周期开始时
                //还是允许他继续摇,假装还能参与
                //result.Message = "您已中奖~";
                //扣掉摇奖机会
                log.Win = false;
                _campaignManager.DataBase.Insert(log);

                result.Message = "遗憾您没有摇中,请再接再厉~";
                result.Success = false;
                return(result);
            }

            Campaign_ShakingLotteryGiftPool pool = GetGiftPool(campaignId, periodId);

            if (pool == null)
            {
                _campaignManager.Log.Write("没有取到 GiftPool",
                                           String.Format("campaignId:{0},periodId:{1}", campaignId, periodId), TraceEventType.Error);
                result.Message = "遗憾您没有摇中,请再接再厉~~";
                result.Success = false;
                return(result);
            }

            Campaign_ShakingLotteryGiftEntity gift = pool.GetGift();

            if (gift == null)
            {
                result.Message = "遗憾您没有摇中,请再接再厉!~";
                result.Success = false;
                return(result);
            }

            log.Gift = gift.Id;

            if (gift.IsGift == false || gift.Stock <= 0)
            {
                log.Win = false;
            }
            else
            {
                //尝试扣减库存
                List <CommandParameter> parameterList = new List <CommandParameter>();
                parameterList.Add(new CommandParameter("@giftId", gift.Id));

                DataSet dsResult =
                    _campaignManager.DataBase.ExecuteDataSet(CommandType.StoredProcedure, "DecrementShakingLotteryGiftStock",
                                                             parameterList, new string[] { "result" });

                result.Reason = int.Parse(dsResult.Tables[0].Rows[0]["Result"].ToString());
                if (result.Reason == 0)
                {
                    log.Win = true;
                }
                else
                {
                    log.Win = false;
                }

                if (result.Reason != 2)
                {
                    gift.Stock = int.Parse(dsResult.Tables[0].Rows[0]["Stock"].ToString());
                }
            }

            _campaignManager.DataBase.Insert(log);

            if (log.Win)
            {
                result.Data    = gift;
                result.Success = true;
                return(result);
            }
            else
            {
                result.Message = "遗憾您没有摇中,请再接再厉~";
                result.Success = false;
                return(result);
            }
        }
コード例 #27
0
        public static RequestApiResult <WeixinArticleMaterialListItemContent> GetArticleMaterial(DomainContext domainContext, string mediaId)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinArticleMaterialListItemContent> result = MaterialApi.GetArticleMaterial(accessToken, mediaId);

            if (result.Success == false)
            {
                if (result.Retry)
                {
                    if (result.ApiError.ErrorCode == 40001)
                    {
                        accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken);
                    }

                    result = MaterialApi.GetArticleMaterial(accessToken, mediaId);
                    if (result.Success == false)
                    {
                        _log.Write("MaterialApi.GetArticleMaterial 失败",
                                   result.GetDetail(), TraceEventType.Warning);
                    }
                }
                else
                {
                    _log.Write("MaterialApi.GetArticleMaterial 失败",
                               result.GetDetail(), TraceEventType.Warning);
                }
            }

            return(result);
        }
コード例 #28
0
 /// <summary>
 /// 刷新了缓存中的Domain
 /// </summary>
 /// <param name="domainContext"></param>
 protected virtual void OnRefresh(DomainContext domainContext)
 {
     domainContext.Refresh();
 }
コード例 #29
0
        public ApiResult SaveAndPublishMenu(string json, UserContext userContext, DomainContext domainContext)
        {
            MenuEntity menuEntity = new MenuEntity();

            menuEntity.DomainId = userContext.User.Domain;
            menuEntity.Menu     = json;
            _dataBase.Remove(menuEntity);
            _dataBase.Insert(menuEntity);

            ApiResult result = new ApiResult();

            //未认证订阅号没有自定义菜单权限
            if (domainContext.Authorizer == null ||
                domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedSubscription)
            {
                result.Success = false;
                result.Message = "未认证订阅号没有自定义菜单权限。";
                return(result);
            }

            List <ButtonBase> _buttonList = new List <ButtonBase>();

            JObject jObject = JObject.Parse(json);

            #region 解析

            JArray buttonArray = (JArray)jObject["button"];

            foreach (var button in buttonArray)
            {
                if (button["sub_button"] == null || button["sub_button"].Count() == 0)
                {
                    ButtonBase newButton = null;
                    switch (button["type"].ToString())
                    {
                    case "wxc_function":
                        newButton = GetWxcFunctionButton(button, domainContext);
                        break;

                    case "click":
                        newButton = GetClickButton(button, domainContext);
                        break;

                    case "view":
                        newButton = JsonHelper.Deserialize <ButtonView>(button.ToString());
                        break;

                    case "wxc_campaign":
                        newButton = GetWxcCampaignButton(button, domainContext);
                        break;

                    case "wxc_information":
                        newButton = GetWxcInformationButton(button, domainContext);
                        break;

                    case "wxc_customForm":
                        newButton = GetWxcCustomFormButton(button, domainContext);
                        break;

                    case "mediaId":
                        newButton = GetMediaIdButton(button);
                        break;
                    }
                    _buttonList.Add(newButton);
                }
                else
                {
                    ParentButton parentButton = JsonHelper.Deserialize <ParentButton>(button.ToString());
                    parentButton.SubButton = new List <ButtonBase>();

                    JArray subButtonArray = (JArray)button["sub_button"];
                    foreach (var subButton in subButtonArray)
                    {
                        ButtonBase newSubButton = null;
                        switch (subButton["type"].ToString())
                        {
                        case "wxc_function":
                            newSubButton = GetWxcFunctionButton(subButton, domainContext);
                            break;

                        case "click":
                            newSubButton = GetClickButton(subButton, domainContext);
                            break;

                        case "view":
                            newSubButton = JsonHelper.Deserialize <ButtonView>(subButton.ToString());
                            break;

                        case "wxc_campaign":
                            newSubButton = GetWxcCampaignButton(subButton, domainContext);
                            break;

                        case "wxc_information":
                            newSubButton = GetWxcInformationButton(subButton, domainContext);
                            break;

                        case "wxc_customForm":
                            newSubButton = GetWxcCustomFormButton(subButton, domainContext);
                            break;

                        case "mediaId":
                            newSubButton = GetMediaIdButton(subButton);
                            break;
                        }
                        parentButton.SubButton.Add(newSubButton);
                    }

                    _buttonList.Add(parentButton);
                }
            }

            #endregion

            ButtonWrapper menu = new ButtonWrapper();
            menu.Button = _buttonList;

            RequestApiResult apiResult = MenuApi.Create(menu, domainContext.AccessToken);
            result.Success = apiResult.Success;
            result.Message = apiResult.Message;

            return(result);
        }