/// <summary>
        /// 获取素材的默认格式
        /// </summary>
        /// <param name="mType"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        private string GetMediaExtension(PubMediaType mType, WxMediaShow item)
        {
            var extension = Path.GetExtension(item.Title);

            if (string.IsNullOrEmpty(extension))
            {
                switch (mType)
                {
                case PubMediaType.image:
                    extension = ".jpg";
                    break;

                case PubMediaType.voice:
                    extension = ".mp3";
                    break;

                case PubMediaType.video:
                    extension = ".mp4";
                    break;

                case PubMediaType.thumb:
                    extension = ".jpg";
                    break;

                default:
                    break;
                }
            }

            return(extension);
        }
Example #2
0
 /// <summary>
 /// 读取永久素材列表
 /// </summary>
 /// <param name="type">类型 不能为news</param>
 /// <param name="offset">从全部素材的该偏移位置开始返回,0表示从第一个素材 默认0</param>
 /// <param name="count">返回素材的数量,取值在1到20之间,默认20</param>
 /// <returns></returns>
 public static PubMeterialResult GetMaterialList(PubMediaType type, int offset, int count = 20)
 {
     if (type == PubMediaType.news)
     {
         throw new Exception("news请使用GetMaterialNewsList");
     }
     return(GetMaterialList <PubMeterialResult>(new { type = type.ToString(), offset = offset, count = count }));
 }
Example #3
0
        /// <summary>
        /// 新增临时素材
        /// </summary>
        /// <param name="file">文件流</param>
        /// <param name="fileName">文件名称</param>
        /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param>
        /// <returns></returns>
        public static PubMediaResult AddMedia(string fileName, Stream file, PubMediaType type)
        {
            var url = string.Format(ADD_MEDIA_URL, PubInterface.AccessToken, type.ToString());

            var content = PubInterface.BuildFromContent(fileName, file);
            var res     = WebApiHelper.PostHttpContent <PubMediaResult>(url, content);

            return(res);
        }
        /// <summary>
        /// 下载微信永久素材
        /// </summary>
        /// <param name="lstWxMedia"></param>
        /// <param name="mType"></param>
        /// <param name="virPath"></param>
        /// <param name="phyPath"></param>
        private void DownWxMedia(List <WxMediaShow> lstWxMedia, PubMediaType mType, string virPath, string phyPath)
        {
            var client   = new WebClient();
            var dtNow    = DateTime.Now;
            var userName = currentUser.UserName;

            foreach (var item in lstWxMedia)
            {
                string extension   = GetMediaExtension(mType, item);
                var    fileName    = item.MediaId + extension;
                var    filePhyPath = phyPath + fileName;
                // 判断路径是否存在
                var fi = new FileInfo(filePhyPath);
                if (!fi.Directory.Exists)
                {
                    fi.Directory.Create();
                }

                // 视频特殊处理
                if (mType == PubMediaType.video)
                {
                    var vRes = PubMediaApi.GetMaterialVedio(item.MediaId, mType);
                    logHelper.Debug("DownWxMedia:下载视频素材结果:" + vRes.JsonSerialize());
                    if (vRes.IsSuss)
                    {
                        item.WxUrl        = vRes.down_url;
                        item.Title        = vRes.title;
                        item.Introduction = vRes.description;
                        item.Updater      = userName;
                        item.UpdateTime   = dtNow;
                        repo.Update(item, new List <string> {
                            "WxUrl", "Title", "Introduction", "Updater", "UpdateTime"
                        });
                    }
                }

                // 下载微信永久素材
                if (!string.IsNullOrEmpty(item.WxUrl))
                {
                    // 有返回url链接的
                    client.DownloadFile(item.WxUrl, filePhyPath);
                }
                else
                {
                    // 其他素材直接下载
                    PubMediaApi.GetMaterial(item.MediaId, filePhyPath, mType);
                }

                // 更新永久素材路径
                item.LocalUrl   = virPath + fileName;
                item.Updater    = userName;
                item.UpdateTime = dtNow;
                repo.Update(item, new List <string> {
                    "LocalUrl", "Updater", "UpdateTime"
                });
            }
        }
Example #5
0
        /// <summary>
        /// 自行处理 有可能是下载 有可能是返回值
        /// </summary>
        public static void GetMaterial(string mediaID, string filePath, PubMediaType mType)
        {
            var data = SerializeHelper.JsonSerialize(new { media_id = mediaID });
            var url  = string.Format(GET_MATERIAL_URL, PubInterface.AccessToken);

            if (mType == PubMediaType.video)
            {
                WechatHelper.Log.Error("GetMaterial:请使用GetMaterialVedio接口下载:" + mediaID);
            }
            else
            {
                DownloadFilePost(url, data, filePath);
            }
        }
Example #6
0
        /// <summary>
        /// 下载视频素材
        /// </summary>
        /// <param name="mediaID"></param>
        /// <param name="mType"></param>
        /// <returns></returns>
        public static PubVedioMeterialResult GetMaterialVedio(string mediaID, PubMediaType mType)
        {
            var data = SerializeHelper.JsonSerialize(new { media_id = mediaID });
            var url  = string.Format(GET_MATERIAL_URL, PubInterface.AccessToken);

            if (mType != PubMediaType.video)
            {
                WechatHelper.Log.Error("GetMaterialVedio:请使用GetMaterial接口下载:" + mediaID);
                return(null);
            }

            var vRes = WebApiHelper.PostAsync <PubVedioMeterialResult>(url, data);

            return(vRes);
        }
Example #7
0
        /// <summary>
        /// 根据素材类型和id获取素材下拉列表
        /// </summary>
        /// <param name="type"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private async Task <dynamic> GetMediaInfoByTypeId(PubMediaType type, string id)
        {
            // todo orm如果直接用linq x.type == type.ToString() 无法查询数据
            var mediaType = type.ToString();
            var media     = await repo.FirstOrDefaultAsync <WxMediaShow>(x => x.Type == mediaType && x.MediaId == id);

            if (media != null)
            {
                var optTemp = new { id = media.MediaId, text = media.Title };
                return(new List <dynamic> {
                    optTemp
                });
            }

            return(null);
        }
        /// <summary>
        /// 保存同步的素材和下载
        /// </summary>
        /// <param name="mType"></param>
        /// <param name="syncRes"></param>
        private void SyncMedias(PubMediaType mType, PubMeterialResult syncRes)
        {
            try
            {
                // 保存永久素材记录
                var dtNow      = DateTime.Now;
                var lstWxMedia = new List <WxMediaShow>();
                var userName   = currentUser.UserName;
                foreach (var media in syncRes.item)
                {
                    // 判断是否存在
                    var exist = repo.FirstOrDefault <WxMediaShow>(x => x.MediaId == media.media_id);
                    if (exist == null)
                    {
                        exist            = new WxMediaShow();
                        exist.Creater    = userName;
                        exist.CreateTime = dtNow;
                        exist.Title      = media.name;
                    }

                    exist.MediaId    = media.media_id;
                    exist.Type       = mType.ToString();
                    exist.WxUrl      = media.url;
                    exist.Updater    = userName;
                    exist.UpdateTime = dtNow;
                    exist.IsDel      = 0;
                    repo.Save(exist);
                    lstWxMedia.Add(exist);
                }

                // 下载附件
                var upVirPath = UpPathHelper.GetUploadVirPath("wxmedia", dtNow);
                var upPhyPath = UpPathHelper.GetUploadPhyPath("wxmedia", dtNow);
                DownWxMedia(lstWxMedia, mType, upVirPath, upPhyPath);
            }
            catch (Exception ex)
            {
                logHelper.Error("SyncMedias:保存永久素材失败:" + ex.Message + "     " + ex.StackTrace);
            }
        }
Example #9
0
        /// <summary>
        /// 新增永久素材
        /// </summary>
        /// <param name="type"></param>
        /// <param name="fileName"></param>
        /// <param name="file"></param>
        /// <param name="title">视频时有效</param>
        /// <param name="introduction">视频时有效</param>
        /// <returns></returns>
        public static PubMediaResult AddMaterial(PubMediaType type, Stream file, string fileName, string title, string introduction)
        {
            MultipartFormDataContent form = new MultipartFormDataContent();

            form.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");//重要,一定要标明
            if (type == PubMediaType.video)
            {
                var video        = "{\"title\":\"" + title + "\", \"introduction\":\"" + introduction + "\"}";
                var videoContent = new StringContent(video);
                videoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "\"description\"",
                };
                form.Add(videoContent);
            }

            form.Add(PubInterface.BuildStreamContent(fileName, file));
            var url = string.Format(ADD_MATERIAL_URL, PubInterface.AccessToken, type.ToString());
            var res = WebApiHelper.PostHttpContent <PubMediaResult>(url, form);

            return(res);
        }
Example #10
0
 /// <summary>
 /// 新增临时素材
 /// </summary>
 /// <param name="filePath"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public static PubMediaResult AddMedia(string filePath, PubMediaType type)
 {
     return(AddMedia(Path.GetFileName(filePath), File.OpenRead(filePath), type));
 }
Example #11
0
 /// <summary>
 /// 新增永久素材
 /// </summary>
 /// <param name="type"></param>
 /// <param name="filePath"></param>
 /// <param name="title"></param>
 /// <param name="introduction"></param>
 /// <returns></returns>
 public static PubMediaResult AddMaterial(PubMediaType type, string filePath, string title, string introduction)
 {
     return(AddMaterial(type, File.OpenRead(filePath), Path.GetFileName(filePath), title, introduction));
 }