/// <summary> /// 仅未发布的素材才使用此方法 /// 发布过的素材只能单图文更新 /// </summary> /// <param name="domainContext"></param> /// <param name="args"></param> /// <returns></returns> public string UpdateArticleMaterial(DomainContext domainContext, ArticleMaterialEntity args) { //受限于微信接口,更新图文素材只能删除原素材重新添加 //因为重新添加会导致media_id发生变化,所以本地在使用时,要用自己的ID并维护不变 //但是!如果把微信素材库的素材删除,会导致已经发送给关注者的连接失效,打不开 //所以这里只删除本地的,微信后台的保持不删除 //但是这种方式还有一个问题,就是修改是假修改,已经发给用户的素材事实上不会变化 //而在微信后台修改图文内容是可以实现真修改的。 //目前只能把本地保存和发布微信后台分开,一旦发布了微信后台,就不再允许添加删除文章 if (args == null || args.ArticleList == null) { return("参数错误"); } //先确保保存本地数据库,防止微信后台发布失败编辑的文章全部丢失 //主表可UPDATE相关子段 List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", args.Id)); parameterList.Add(new CommandParameter("@name", args.Name)); //parameterList.Add(new CommandParameter("@weixinStatus", 0)); //[WeixinStatus] = @weixinStatus _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterial] SET [Name] = @name WHERE [Id] = @id", parameterList); //子表删除重新添加 _dataBase.ExecuteNonQuery("DELETE FROM [ArticleMaterialItem] WHERE [ArticleMaterial] = @id", parameterList); for (int i = 0; i < args.ArticleList.Count; i++) { ArticleMaterialItemEntity article = args.ArticleList[i]; article.Index = i; article.Domain = domainContext.Domain.Id; article.ArticleMaterial = args.Id; if (article.ImgMappingList != null) { article.ImgMapping = JsonHelper.Serializer(article.ImgMappingList); } _dataBase.Insert(article); } return(null); //调用微信接口删除现有素材 //if (String.IsNullOrEmpty(args.MediaId) == false) //{ // RequestApiResult requestApiResult = MaterialApiWrapper.RemoveMaterial(domainContext, args.MediaId); // if (requestApiResult.Success == false) // { // return requestApiResult.Message; // } //} //调用微信添加素材接口重新添加 //string addToWeixin = AddArticleMaterialToWeixin(domainContext, args); //return addToWeixin; }
public ArticleMaterialEntity GetArticleMaterial(Guid id) { ArticleMaterialEntity articleMaterial = new ArticleMaterialEntity(); articleMaterial.Id = id; if (_dataBase.Fill <ArticleMaterialEntity>(articleMaterial) == false) { return(null); } List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", articleMaterial.Id)); List <ArticleMaterialItemEntity> itemList = _dataBase.Select <ArticleMaterialItemEntity>( "SELECT * FROM [ArticleMaterialItem] WHERE [ArticleMaterial] = @id ORDER BY [Index]", parameterList); foreach (ArticleMaterialItemEntity item in itemList) { if (String.IsNullOrEmpty(item.ImgMapping) == false) { item.ImgMappingList = JsonHelper.Deserialize <List <MaterialImgMapping> >(item.ImgMapping); } } articleMaterial.ArticleList = itemList; return(articleMaterial); }
public ActionResult UpdateArticleMaterial() { ArticleMaterialEntity args = RequestArgs <ArticleMaterialEntity>(); if (args == null) { return(RespondResult(false, "参数无效。")); } args.Domain = DomainContext.Domain.Id; args.OperatorUser = UserContext.User.Id; string result = null; if (args.WeixinStatus == 0) { result = _materialManager.UpdateArticleMaterial(DomainContext, args); } else if (args.WeixinStatus == 1 || args.WeixinStatus == 2) { result = _materialManager.UpdateArticleMaterialItem(DomainContext, args); } else { Debug.Assert(false, "未知 args.WeixinStatus"); } ApiResult apiResult = new ApiResult(); if (String.IsNullOrEmpty(result)) { apiResult.Success = true; } else { apiResult.Message = result; } #region 操作日志 _operatedLogManager.Create(new OperatedLogEntity() { Domain = DomainContext.Domain.Id, AppId = DomainContext.AppId, User = UserContext.User.Id, IP = Request.UserHostAddress, Module = EnumModule.Material, Description = "更新图文素材" }); #endregion return(RespondResult(apiResult)); }
public ActionResult GetArticleMaterial() { string id = Request.QueryString["id"]; if (String.IsNullOrEmpty(id)) { return(RespondResult(false, "参数无效。")); } ArticleMaterialEntity articleMaterial = _materialManager.GetArticleMaterial(Guid.Parse(id)); return(RespondDataResult(articleMaterial)); }
public ActionResult AddArticleMaterial() { ArticleMaterialEntity args = RequestArgs <ArticleMaterialEntity>(); if (args == null) { return(RespondResult(false, "参数无效。")); } args.Domain = DomainContext.Domain.Id; args.AppId = DomainContext.AppId; args.OperatorUser = UserContext.User.Id; AddArticleMaterialResult result = _materialManager.AddArticleMaterial(DomainContext, args); ApiResult <AddArticleMaterialResult> apiResult = new ApiResult <AddArticleMaterialResult>(); apiResult.Success = result.Success; apiResult.Message = result.Message; apiResult.Data = result; #region 操作日志 _operatedLogManager.Create(new OperatedLogEntity() { Domain = DomainContext.Domain.Id, AppId = DomainContext.AppId, User = UserContext.User.Id, IP = Request.UserHostAddress, Module = EnumModule.Material, Description = "添加图文素材" }); #endregion return(RespondResult(apiResult)); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 仅保存在不地,不发送到微信后台 /// </summary> /// <param name="domainContext"></param> /// <param name="args"></param> /// <returns></returns> public AddArticleMaterialResult AddArticleMaterial(DomainContext domainContext, ArticleMaterialEntity args) { AddArticleMaterialResult result = new AddArticleMaterialResult(); if (args == null || args.ArticleList == null) { result.Message = "参数错误。"; return(result); } //保存本地数据库 args.WeixinStatus = 0; _dataBase.Insert(args); for (int i = 0; i < args.ArticleList.Count; i++) { ArticleMaterialItemEntity article = args.ArticleList[i]; article.Index = i; article.Domain = domainContext.Domain.Id; article.ArticleMaterial = args.Id; if (article.ImgMappingList != null) { article.ImgMapping = JsonHelper.Serializer(article.ImgMappingList); } _dataBase.Insert(article); } result.Success = true; result.Id = args.Id; return(result); }