#region Apache License Version 2.0 /*---------------------------------------------------------------- Copyright 2023 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md ----------------------------------------------------------------*/ #endregion Apache License Version 2.0 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using Microsoft.VisualStudio.TestTools.UnitTesting; using Senparc.Weixin.MP.AdvancedAPIs; using Senparc.Weixin.MP.AdvancedAPIs.GroupMessage; using Senparc.Weixin.MP.AdvancedAPIs.Media; using Senparc.Weixin.MP.CommonAPIs; using Senparc.Weixin.MP.Containers; using Senparc.Weixin.MP.Test.CommonAPIs; using Senparc.CO2NET.Extensions; namespace Senparc.Weixin.MP.Test.AdvancedAPIs { //已测试通过 [TestClass] public class MediaTest : CommonApiTest { private string mediaId = null; [TestMethod] public void UploadTemporaryMediaTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var type = UploadMediaFileType.image; #if NETCOREAPP2_0_OR_GREATER || NET6_0_OR_GREATER var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\qr.jpg"); #else var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\qr.jpg"); #endif var result = MediaApi.UploadTemporaryMedia(accessToken, type, file); Assert.AreEqual(type, result.type); Assert.IsNotNull(result.media_id); mediaId = result.media_id; } [TestMethod] public void UploadTemporaryNewsTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = @"E:\1.jpg"; var mediaId = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.thumb, file).thumb_media_id; Assert.IsNotNull(mediaId); var new1 = new NewsModel() { author = "test", content = "test", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var new2 = new NewsModel() { author = "test", content = "test111", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var result = MediaApi.UploadTemporaryNews(accessToken, 10000, new1, new2); Assert.IsNotNull(result.media_id); } [TestMethod] public void GetStreamTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); UploadTemporaryMediaTest();//上传 using (MemoryStream ms = new MemoryStream()) { MediaApi.Get(accessToken, mediaId, ms); Assert.IsTrue(ms.Length > 0); //保存到文件 #if NETCOREAPP2_0_OR_GREATER || NET6_0_OR_GREATER var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\testpic_{0}.core20.jpg".FormatWith(SystemTime.Now.ToString("yyyyMMddHHmmss"))); #else var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\testpic_{0}.net45.jpg".FormatWith(SystemTime.Now.ToString("yyyyMMddHHmmss"))); #endif using (FileStream fs = new FileStream(fileName, FileMode.Create)) { ms.Position = 0; byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) != 0) { fs.Write(buffer, 0, bytesRead); } fs.Flush(); } Assert.IsTrue(File.Exists(fileName)); } } [TestMethod] public void GetDirTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); UploadTemporaryMediaTest();//上传 #if NETSTANDARD2_0_OR_GREATER || NETCOREAPP2_1_OR_GREATER || NET6_0_OR_GREATER var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\"); #else var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\"); #endif var fileName = MediaApi.Get(accessToken, mediaId, dir); Assert.IsTrue(File.Exists(fileName)); Console.WriteLine("原始文件:" + fileName); } [TestMethod()] public void GetVoiceTest() { string serverId = "IT41QWoGSnkt5fj01mK2ByhgRACBgvRW6fGP3bt9QAjH8vwqsra9qYJkj8LCXzNS"; var file = SystemTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".speex"; //ServerUtility.ContentRootMapPath("~/../") using (MemoryStream ms = new MemoryStream()) { MediaApi.Get(base._appId, serverId, ms); //保存到文件 ms.Position = 0; byte[] buffer = new byte[1024]; int bytesRead = 0; //判断是否上传成功 byte[] topBuffer = new byte[1]; ms.Read(topBuffer, 0, 1); if (topBuffer[0] == '{') { //写入日志 ms.Position = 0; byte[] logBuffer = new byte[1024]; ms.Read(logBuffer, 0, logBuffer.Length); string str = System.Text.Encoding.Default.GetString(logBuffer); Console.WriteLine(str); Assert.Fail(); } else { ms.Position = 0; //创建目录 using (FileStream fs = new FileStream(file, FileMode.Create)) { while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) != 0) { fs.Write(buffer, 0, bytesRead); } fs.Flush(); } } } } private string UploadForeverMediaTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = GetParentRootRelativePath() + @"AdvancedAPIs\Media\test.jpg"; var result = MediaApi.UploadForeverMediaAsync(accessToken, file, UploadForeverMediaType.image).GetAwaiter().GetResult(); Assert.IsNotNull(result.media_id); Console.WriteLine("上传永久素材成功,mediaId:" + result.media_id); mediaId = result.media_id; return mediaId; } [TestMethod] public void UploadForeverVideoTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = @"E:\Test.mp4"; var result = MediaApi.UploadForeverVideo(accessToken, file, "测试", "测试", UploadForeverMediaType.video); Assert.IsNotNull(result.media_id); mediaId = result.media_id; } //[TestMethod] private string UploadAndUpdateNewsTest(string accessToken) { //var file = @"E:\1.jpg"; //var result = MediaApi.UploadForeverMedia(accessToken, file, UploadForeverMediaType.image); //Assert.IsNotNull(result.media_id); var mediaId = UploadForeverMediaTest(); var new1 = new NewsModel() { author = "test", content = "test", content_source_url = "https://weixin.senparc.com/Content/Images/2019/logo-community-two-lines.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var new2 = new NewsModel() { author = "test", content = "test111", content_source_url = "https://weixin.senparc.com/Content/Images/2019/logo-community-two-lines.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var result = MediaApi.UploadNewsAsync(accessToken, 10000, new1, new2).GetAwaiter().GetResult(); Assert.IsNotNull(result.media_id); Console.WriteLine("上传图文素材成功,mediaId:" + result.media_id); //var result2 = MediaApi.UpdateForeverNews(accessToken, result1.media_id, 0, 10000, new2); //Assert.AreEqual(result2.errcode, ReturnCode.请求成功); return result.media_id; } [TestMethod] public void GetForeverMediaTest() { var mediaId = UploadForeverMediaTest(); var accessToken = AccessTokenContainer.GetAccessToken(_appId); using (MemoryStream stream = new MemoryStream()) { MediaApi.GetForeverMedia(accessToken, mediaId, stream); Assert.IsTrue(stream.Length > 0); var fileName = GetParentRootRelativePath() + @"AdvancedAPIs\Media\test.download." + SystemTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".jpg"; using (var fs = new FileStream(fileName, FileMode.CreateNew)) { stream.Seek(0, SeekOrigin.Begin); stream.CopyTo(fs); fs.Flush(); } } } //[TestMethod] private void GetForeverNewsTest(string accessToken, string mediaId) { var result = MediaApi.GetForeverNews(accessToken, mediaId); Assert.IsTrue(result.news_item.Count > 0); Assert.AreEqual(result.news_item[0].content, "test"); Console.WriteLine($"获取图文素材成功,文章数量:{result.news_item.Count}"); Console.WriteLine("图文信息:"); Console.WriteLine(result.news_item.ToJson(true)); } //[TestMethod] private void DeleteForeverMediaTest(string accessToken, string mediaId) { var result = MediaApi.DeleteForeverMedia(accessToken, mediaId); Assert.AreEqual(result.errcode, ReturnCode.请求成功); Console.WriteLine("图文素材已删除"); } [TestMethod] public void ForeverNewsTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); string mediaId = UploadAndUpdateNewsTest(accessToken); GetForeverNewsTest(accessToken, mediaId); DeleteForeverMediaTest(accessToken, mediaId); } [TestMethod] public void GetMediaListTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var result = MediaApi.GetNewsMediaList(accessToken, 0, 5); Assert.IsNotNull(result.item_count); } [TestMethod] public void GetNewsMediaListTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var result = MediaApi.GetNewsMediaList(accessToken, 0, 3); Assert.AreEqual(result.errcode, ReturnCode.请求成功); Assert.AreEqual(result.item_count, 3); } [TestMethod] public void GetOthersMediaListTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var result = MediaApi.GetOthersMediaList(accessToken, UploadMediaFileType.image, 0, 3); Assert.AreEqual(result.errcode, ReturnCode.请求成功); Assert.AreEqual(result.item_count, 3); } [TestMethod] public void AfterDeleteImgTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = @"..\..\AdvancedAPIs\Media\test.jpg"; var result = MediaApi.UploadForeverMedia(accessToken, file, UploadForeverMediaType.image); Assert.IsNotNull(result.media_id); CustomApi.SendImage(accessToken, "o3IHxjrPzMVZIJOgYMH1PyoTW_Tg", result.media_id); MediaApi.DeleteForeverMedia(accessToken, result.media_id); } [TestMethod] public void AfterDeleteNewsTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = @"E:\1.jpg"; var result = MediaApi.UploadForeverMedia(accessToken, file, UploadForeverMediaType.image); Assert.IsNotNull(result.media_id); var new1 = new NewsModel() { author = "test", content = "test", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = result.media_id, title = "test" }; var new2 = new NewsModel() { author = "test", content = "test111", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = result.media_id, title = "test" }; var result1 = MediaApi.UploadNews(accessToken, 10000, new1, new2); Assert.IsNotNull(result1.media_id); var clientMsgId = SystemTime.Now.Ticks.ToString(); GroupMessageApi.SendGroupMessageByOpenId(accessToken, GroupMessageType.mpnews, result1.media_id, clientMsgId, 10000, "o3IHxjrPzMVZIJOgYMH1PyoTW_Tg", "o3IHxjrPzMVZIJOgYMH1PyoTW_Tg"); //var result2 = MediaApi.UpdateForeverNews(accessToken, result1.media_id, 0, 10000, new2); MediaApi.DeleteForeverMedia(accessToken, result1.media_id); //Assert.AreEqual(result2.errcode, ReturnCode.请求成功); } [TestMethod] public void AfterDeleteVideoTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var file = @"E:\Test.mp4"; var result = MediaApi.UploadForeverVideo(accessToken, file, "测试", "测试", UploadForeverMediaType.video, 100000); Assert.IsNotNull(result.media_id); CustomApi.SendVideo(accessToken, "o3IHxjrPzMVZIJOgYMH1PyoTW_Tg", result.media_id, "测试", "测试"); MediaApi.DeleteForeverMedia(accessToken, result.media_id); } } }