微信公眾號開發之新增永久其他(圖片、聲音、視頻)素材(九)


對於常用的素材,開發者可通過本接口上傳到微信服務器,永久使用。新增的永久素材也可以在公眾平台官網素材管理模塊中查詢管理。

請注意:

1、最近更新:永久圖片素材新增后,將帶有URL返回給開發者,開發者可以在騰訊系域名內使用(騰訊系域名外使用,圖片將被屏蔽)。

2、公眾號的素材庫保存總數量有上限:圖文消息素材、圖片素材上限為100000,其他類型為1000。

3、素材的格式大小等要求與公眾平台官網一致:

圖片(image): 2M,支持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、圖文消息支持正文中插入自己帳號和其他公眾號已群發文章鏈接的能力。

一、新增其他類型永久素材

接口調用請求說明

通過POST表單來調用接口,表單id為media,包含需要上傳的素材內容,有filename、filelength、content-type等信息。請注意:圖片素材將進入公眾平台官網素材管理模塊中的默認分組。

http請求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE 調用示例(使用curl命令,用FORM表單方式新增一個其他類型的永久素材,curl命令的使用請自行查閱資料)

參數說明

參數 是否必須 說明
access_token 調用接口憑證
type 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)
media form-data中媒體文件標識,有filename、filelength、content-type等信息

新增永久視頻素材需特別注意

在上傳視頻素材時需要POST另一個表單,id為description,包含素材的描述信息,內容格式為JSON,格式如下: 

{ "title":VIDEO_TITLE, "introduction":INTRODUCTION }

新建一個MaterialUtil在其中新增一個addMaterialFilePath方法用作上傳永久素材,包括四個參數

/** * 添加永久素菜 * 新增永久視頻素材需特別注意,在上傳視頻素材時需要POST另一個表單,包含素材的描述信息,內容格式為JSON */ public String addMaterialFilePath(String filePath, String type, String title, String introduction) { String accessToken = accessTokenUtil.getAccessToken(); if (accessToken != null) { String url = URIConstant.ADD_MATERIAL_URL.replace("ACCESS_TOKEN", accessToken) .replace("TYPE", type); log.info("ADD_MATERIAL_URL:{}",url); //設置請求體,注意是LinkedMultiValueMap MultiValueMap<String, Object> data = new LinkedMultiValueMap<>(); if("vedio".equalsIgnoreCase(type)){ if(!StringUtils.isEmpty(title) && !StringUtils.isEmpty(introduction)){ data.add("title", title); data.add("introduction", introduction); } } //設置上傳文件 FileSystemResource fileSystemResource = new FileSystemResource(filePath); data.add("media", fileSystemResource); //上傳文件,設置請求頭 HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); httpHeaders.setContentLength(fileSystemResource.getFile().length()); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(data, httpHeaders); try{ //這里RestTemplate請求返回的字符串直接轉換成JSONObject會報異常,后續深入找一下原因 String resultString = restTemplate.postForObject(url, requestEntity, String.class); log.info("上傳返回的信息是:{}",resultString); return resultString; }catch (Exception e){ log.error(e.getMessage()); } } return null; }

 

我們編寫一個Controller,在里面寫一個方法用在swagger里測試一下

 /** * 添加永久素材列表 */ @ApiOperation(value = "添加永久素材FilePath") @RequestMapping(value = "/addMaterialFilePath", method = RequestMethod.POST) @ApiImplicitParams({ @ApiImplicitParam(name="filePath",value="文件路徑", paramType="query",dataType="String"), @ApiImplicitParam(name="title",value="視頻素材的標題", paramType="query",dataType="String"), @ApiImplicitParam(name="introduction",value="視頻素材的描述", paramType="query",dataType="String"), @ApiImplicitParam(name="type",value="素材的類型,圖片(image)、視頻(video)、語音 (voice)、圖文(news)", paramType="query",dataType="String") }) public Object addMaterialFilePath(String filePath, String type, String title, String introduction) { String tempString = materialUtil.addMaterialFilePath(filePath, type, title, introduction); return tempString; }

在swagger中提交一個圖片,測試一下

 可以看到,我們成功獲取到了上傳素材文件的media_id

二、獲取(下載) 永久素材

再寫一個獲取(下載)永久素材的方法downloadMaterialImage

/** * 根據mediaId獲取永久素菜 */ public ResponseEntity<byte[]> downloadMaterialImage(String mediaId){ String accessToken = accessTokenUtil.getAccessToken(); if(accessToken != null) { String url = URIConstant.GET_MATERIAL_URL.replace("ACCESS_TOKEN", accessToken); log.info("GET_MATERIAL_URL:{}", url); String fileName = mediaId+ ".jpg"; JSONObject data = new JSONObject(); data.put("media_id", mediaId); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); try { fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } headers.setContentDispositionFormData("attachment", fileName);// 文件名稱 ResponseEntity<byte[]> responseEntity = restTemplate.postForEntity(url, data, byte[].class); return responseEntity; } return null; }

 

我們在swagger里再寫一個獲取(下載)永久素材的方法

在swagger中測試我們的獲取(下載)永久素材

點擊Download file下載文件

打開這個文件看看,確認是我們上傳的永久素材圖片

另外,我們還有幾個接口,比如

1、getMaterialcount【統計每種永久素材的數量】

 

/** * 獲取素菜數量 * @return */ public String getMaterialcount(){ String accessToken = accessTokenUtil.getAccessToken(); if(accessToken != null){ String url = URIConstant.GET_MATERIALCOUNT_URL.replace("ACCESS_TOKEN", accessToken); //發起GET請求 String resultString = restTemplate.getForObject(url, String.class); return resultString; } return null; }

2、batchgetMaterial(String type, Integer offset, Integer count)【獲取素菜列表】

/** * 獲取素菜列表 * @return */ public String batchgetMaterial(String type, Integer offset, Integer count){ String accessToken = accessTokenUtil.getAccessToken(); if(accessToken != null){ String url = URIConstant.BATCHGET_MATERIAL_URL.replace("ACCESS_TOKEN", accessToken); log.info("BATCHGET_MATERIAL_URL:{}",url); JSONObject jsonObject = new JSONObject(); //素材的類型,圖片(image)、視頻(video)、語音 (voice)、圖文(news) jsonObject.put("type", type); //從全部素材的該偏移位置開始返回,0表示從第一個素材 返回 jsonObject.put("offset", offset); //返回素材的數量,取值在1到20之間 jsonObject.put("count", count); //發起POST請求 String resultString = restTemplate.postForObject(url, jsonObject.toJSONString(),String.class); return resultString; } return null; }

 

本篇先到這里,我們下回再見!

 

如果您覺得此文有幫助,可以小小打賞一下,持續更新更有動力喲!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM