Beispiel #1
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);
        }
        //WeixinAddArticleMaterialArgs
        public static RequestApiResult <WeixinAddArticleMaterialResult> AddArticleMaterial(DomainContext domainContext, WeixinAddArticleMaterialArgs args)
        {
            string accessToken = domainContext.AccessToken;
            RequestApiResult <WeixinAddArticleMaterialResult> result = MaterialApi.AddArticleMaterial(accessToken, args);

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

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

            return(result);
        }