Exemple #1
0
        public static RequestApiResult <WeixinGroupMessageSendAllResult> SendAll(DomainContext domainContext, WeixinGroupMessageSendAllArgs args)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinGroupMessageSendAllResult> result = GroupMessageApi.SendAll(accessToken, args);

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

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

            return(result);
        }
        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);
        }