/// <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); }