/// <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); }
public static RequestApiResult UpdateArticleMaterial(DomainContext domainContext, WeixinUpdateArticleMaterialArgs args) { string accessToken = domainContext.AccessToken; RequestApiResult result = MaterialApi.UpdateArticleMaterial(accessToken, args); if (result.Success == false) { if (result.Retry) { if (result.ApiError.ErrorCode == 40001) { accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken); } result = MaterialApi.UpdateArticleMaterial(accessToken, args); if (result.Success == false) { _log.Write("MaterialApi.UpdateArticleMaterial 失败", result.GetDetail(), TraceEventType.Warning); } } else { _log.Write("MaterialApi.UpdateArticleMaterial 失败", result.GetDetail(), TraceEventType.Warning); } } return(result); }