公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。
1、官方文档
新增临时素材
https://developers./doc/offiaccount/Asset_Management/New_temporary_materials.html
新增永久素材
https://developers./doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html
2、基于WxJava实现素材上传
import me.mon.api.WxConsts;import me.mon.bean.result.WxMediaUploadResult;import me.mon.error.WxErrorException;import me.chanjar.weixin.mp.api.WxMpService;import me.chanjar.weixin.mp.bean.material.WxMpMaterial;import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.File;@RestController@RequestMapping("wx/mp/media")public class WxMpMediaController {@Autowiredprivate WxMpService wxMpService;/*** 上传临时素材** @return* @throws WxErrorException*/@GetMapping("uploadTemp")public String uploadTemp() throws WxErrorException {File file = new File("E:\\图片素材\\logo.png");WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, file);return "上传临时素材成功:mediaId:" + wxMediaUploadResult.getMediaId();}/*** 上传永久素材** @return* @throws WxErrorException*/@GetMapping("uploadPermanent")public String uploadPermanent() throws WxErrorException {File file = new File("E:\\图片素材\\logo.png");WxMpMaterial wxMpMaterial = new WxMpMaterial();wxMpMaterial.setFile(file);wxMpMaterial.setName("logo");WxMpMaterialUploadResult wxMpMaterialUploadResult = wxMpService.getMaterialService().materialFileUpload(WxConsts.MediaFileType.IMAGE, wxMpMaterial);return "上传永久素材成功:mediaId:" + wxMpMaterialUploadResult.getMediaId();}}
素材分为临时素材和永久素材,临时素材在微信后台保存时间为3天,即3天后media_id失效永久素材数量有上限:图文消息素材、图片素材上限为100000,其他类型为1000永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)
3、测试素材上传
1、访问接口上传临时素材:localhost:8080/wx/mp/media/uploadTemp
上传成功,返回了 mediaId,我们可以用 mediaId 给用户发送消息,在下面会介绍
2、访问接口上传永久素材
localhost:8080/wx/mp/media/uploadPermanent
4、使用上传的素材被动回复用户消息
在前面的文章:【微信开发】4、SpringBoot整合WxJava处理微信消息、事件推送 中提到我们会接收到用户发给公众号的消息,其中包括了事件和消息,当用户给我们发送图片的时候,我们也给用户回复一张图片,伪代码如下:
/*** 图片消息*/if (messageType.equals("image")) {WxMpXmlOutImageMessage images = WxMpXmlOutMessage.IMAGE()// 获取上传到微信服务器的临时素材mediaid..mediaId("Qk_d9_yDnYMakjCQopymJmyXewzIhySCyfcEuPNnYkRjboribry9pj22DHLCAuPt").fromUser(touser).toUser(fromUser).build();String result = images.toXml();System.out.println("响应给用户的消息:" + result);return result;}
其中 mediaId 为我们上传的素材 mediaId,永久和临时素材都可以,下面我们进行测试:
可以看到,用户发送图片消息给公众号后,公众号成功返回了图片信息,证明我们的素材已经上传成功了
如您在阅读中发现不足,欢迎留言!!!