微信测试账号 (5)-素材管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangb_java/article/details/74795968

前面只讲了文本消息,如果要发图片或语音视频等消息,则需要先将相关文件如图片上传到微信,之后可以将其作为素材,在消息中引用它,实现图片消息。

新增图片素材

	@GetMapping("/addMaterial")
	public void addMaterial(){  
	    String url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={1}&type=image"; 
		//微信要求以form表单形式提交图片文件,需使用MultiValueMap
	    MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
	    //微信指定的文件参数名为media
	    form.add("media", new FileSystemResource("e://1.jpg"));
	    
	    Map<String,Object> map = restTemplate.postForObject(url, form, Map.class,"你的access_token");
	

以上即可将e盘的1.jpg文件上传到,返回结果中有两个参数:

media_id:素材id,如果要发图片消息,直接在消息参数中配置这个id即可,以后会讲。这个id需要自行保存到数据库。

url:上传图片的外网可访问地址。

text/plain转json

微信大多数返回的json类型的接口,都能自动转换json。而有少部分接口比如上面这个,返回的数据是json格式,但是响应头确是text/plain。后台会报一个异常:no suitable HttpMessageConverter found for response type [interface java.util.Map] and content type [text/plain],无法将text/plain类型转化为map对象。通过以下配置可增加对text/plain类型数据的转换,排除异常。

	@Bean
	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
		MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =new MappingJackson2HttpMessageConverter();
		List<MediaType> mediaTypes = new ArrayList<MediaType>();
	    mediaTypes.add(MediaType.TEXT_PLAIN);
	    mappingJackson2HttpMessageConverter.setSupportedMediaTypes(mediaTypes);
	    return mappingJackson2HttpMessageConverter;
	}

新增语音和视频素材

基本和图片一样,只是请求url的参数type不一样,语音type=voice,视频type=video。另视频需要添加一些额外的参数,标题和介绍,参数代码如下:

	    MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
	    form.add("media", new FileSystemResource("e://1.mp4"));
	    Map description = new HashMap();
	    description.put("title","标题");
	    description.put("introduction","介绍");
	    form.add("description", description);

文件格式和大小

以下源自微信官网

图片(image): 2M,支持bmp/png/jpeg/jpg/gif格式

语音(voice):2M,播放长度不超过60s,mp3/wma/wav/amr格式

视频(video):10MB,支持MP4格式

缩略图(thumb):64KB,支持JPG格式

删除素材

只需传入你要删除的素材id即可。

		String url = "https://api.weixin.qq.com/cgi-bin/material/del_material?access_token={1}"; 
		Map body = new HashMap();
		body.put("media_id", "素材id");
	    Map<String,Object> map = restTemplate.postForObject(url, body, Map.class,"你的access_token");

获取素材列表

要查看当前的素材情况,如下。可查到批量的素材id,及其url等相关信息,自行打印查看结果,不多说了。

		String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token={1}"; 
		Map body = new HashMap();
		body.put("type", "imiage");	//素材类型
		body.put("offset", 0);		//从0即第1个素材开始查找 
		body.put("count", 10);		//一共10个,最多20
	    
	    Map<String,Object> map = restTemplate.postForObject(url, body, Map.class,"你的access_token");
	    System.out.println(map);

猜你喜欢

转载自blog.csdn.net/wangb_java/article/details/74795968