一、說明
公衆號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用接口特別是發送消息時,對多媒體文件、多媒體消息的獲取和調用等操作,是通過media_id來進行的。素材管理接口對所有認證的訂閱號和服務號開放。通過本接口,公衆號可以新增臨時素材(即上傳臨時多媒體文件)。使用接口過程中有任何問題,可以前往微信開放社區 #公衆號 專區發帖交流
注意點:
1、臨時素材media_id是可複用的。
2、媒體文件在微信後臺保存時間爲3天,即3天后media_id失效。
3、上傳臨時素材的格式、大小限制與公衆平臺官網一致。
圖片(image): 10M,支持PNG\JPEG\JPG\GIF格式
語音(voice):2M,播放長度不超過60s,支持AMR\MP3格式
視頻(video):10MB,支持MP4格式
縮略圖(thumb):64KB,支持 JPG 格式
二、新增臨時素材
詳情看中.Net6+Furion+Sqlsugar+SenparcSdk開發微信公衆號系列之六:普通消息處理 的視頻消息處理,就是上傳臨時素材實現的
三、獲取臨時素材
先上傳個臨時素材,拿到mediaId,,再在MaterialService新建接口
/// <summary>
/// 獲取臨時素材
/// </summary>
/// <param name="mediaId"></param>
/// <returns></returns>
[HttpGet("/material/temp/get")]
public async Task<dynamic> GetTemp(string mediaId)
{
var result = await MediaApi.GetAsync(AppId, mediaId, App.HostEnvironment.ContentRootPath);
return result;
}
調用接口測試下
四、新增永久素材
4.1、說明
對於常用的素材,開發者可通過本接口上傳到微信服務器,永久使用。新增的永久素材也可以在公衆平臺官網素材管理模塊中查詢管理。
請注意:
1、最近更新:永久圖片素材新增後,將帶有 URL 返回給開發者,開發者可以在騰訊系域名內使用(騰訊系域名外使用,圖片將被屏蔽)。
2、公衆號的素材庫保存總數量有上限:圖文消息素材、圖片素材上限爲100000,其他類型爲1000。
3、素材的格式大小等要求與公衆平臺官網一致:
圖片(image): 10M,支持bmp/png/jpeg/jpg/gif格式
語音(voice):2M,播放長度不超過60s,mp3/wma/wav/amr格式
視頻(video):10MB,支持MP4格式
縮略圖(thumb):64KB,支持 JPG 格式
4、圖文消息的具體內容中,微信後臺將過濾外部的圖片鏈接,圖片 url 需通過"上傳圖文消息內的圖片獲取URL"接口上傳圖片獲取。
5、"上傳圖文消息內的圖片獲取URL"接口所上傳的圖片,不佔用公衆號的素材庫中圖片數量的100000個的限制,圖片僅支持jpg/png格式,大小必須在1MB以下。
6、圖文消息支持正文中插入自己帳號和其他公衆號已羣發文章鏈接的能力。
4.2、上傳圖文消息內的圖片獲取URL
新建接口
/// <summary>
/// 上傳圖文消息內的圖片獲取URL
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/upload/image")]
public async Task<dynamic> UploadImage([FromForm] MaterialAddInput input)
{
var file = await GetPath(input.File);
var uploadResult = await MediaApi.UploadImgAsync(AppId, file);
return uploadResult;
}
測試下看下效果,調用成功
4.3、新增其他類型永久素材
MaterialAddInput.cs新建入參實體類
public class ForeverAddInput
{
/// <summary>
/// 文件類型
/// </summary>
[Required(ErrorMessage = "文件類型不能爲空")]
public UploadForeverMediaType? UploadForeverMediaType { get; set; }
/// <summary>
/// 文件
/// </summary>
[Required(ErrorMessage = "文件不存在")]
public IFormFile File { get; set; }
/// <summary>
/// 標題
/// </summary>
public string Title { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Introduction { get; set; }
}
新建接口
/// <summary>
/// 上傳永久素材
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/upload/temp")]
public async Task<dynamic> UploadForever([FromForm] ForeverAddInput input)
{
var file = await GetPath(input.File);
var uploadResult = await MediaApi.UploadForeverMediaAsync(AppId, file, input.UploadForeverMediaType.Value);
return uploadResult;
}
測試接口,上傳成功
上傳視頻的話需要單獨的接口
/// <summary>
/// 上傳永久視頻素材
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/upload/video")]
public async Task<dynamic> UploadForeverVideo([FromForm] ForeverAddInput input)
{
var file = await GetPath(input.File);
var uploadResult = await MediaApi.UploadForeverVideoAsync(AppId, file, input.Title, input.Introduction);
return uploadResult;
}
測試接口
五、獲取素材總數
新建接口
/// <summary>
/// 素材總數
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/material/total")]
public async Task<dynamic> Total()
{
var result = await MediaApi.GetMediaCountAsync(AppId);
return result;
}
測試一下
六、獲取素材列表
MaterialAddInput.cs新建實體類
public class ForeverPageInput
{
/// <summary>
/// 媒體類型
/// </summary>
public UploadMediaFileType UploadMediaFileType { get; set; }
/// <summary>
/// 從全部素材的該偏移位置開始返回,0表示從第一個素材 返回
/// </summary>
public int Offset { get; set; }
/// <summary>
/// 返回素材的數量,取值在1到20之間
/// </summary>
public int Count { get; set; } = 20;
}
新建接口
/// <summary>
/// 素材列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/material/page")]
public async Task<dynamic> Page([FromQuery] ForeverPageInput input)
{
var result = await MediaApi.GetOthersMediaListAsync(AppId, input.UploadMediaFileType, input.Offset, input.Count);
return result;
}
測試
七、刪除素材
新建接口
/// <summary>
/// 刪除素材
/// </summary>
/// <param name="mediaId"></param>
/// <returns></returns>
[HttpPost("/upload/delete/{mediaId}")]
public async Task<dynamic> Delete(string mediaId)
{
var result = await MediaApi.DeleteForeverMediaAsync(AppId, mediaId);
return result;
}
測試