备注:测试基于微信公众平台测试号编写,真实开发环境基本适用

微信公众号在进行视频群发的时候有一个坑,大家可以先看一下文档描述:

意思就是说要先把视频素材的media_id通过这个接口post一下,于是我下意识的就认为是在永久素材上传那里得到的media_id,但是后面总是返回40007错误,提示media_id不合法。

最后测试了很长时间,才发现视频发送的这里和文章群发一样有一个坑,这里说的media_id并不是通过永久素材上传接口那里获得的,而是要使用下面这个接口:

https://api.weixin.qq.com/cgi-bin/media/upload?access_token=access_token&type=TYPE

然后再用这个获取到的media_id去post才对,最后再用得到的最终的media_id进行群发。

下面是实现代码

注意:

1、因为测试号没有群发功能,所以使用的预览功能,在实际环境中替换一下即可

2、获取access_token的方法(即代码中的getaccess())使用自己的获取方法即可

    /*** 上传视频方法*/public static String postFile(String url, String filePath,String title,String introduction) {File file = new File(filePath);if(!file.exists()){return null;}String result = null;try {URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection();conn.setConnectTimeout(5000);conn.setReadTimeout(30000);  conn.setDoOutput(true);  conn.setDoInput(true);  conn.setUseCaches(false);  conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive");conn.setRequestProperty("Cache-Control", "no-cache");String boundary = "-----------------------------"+System.currentTimeMillis();conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);OutputStream output = conn.getOutputStream();output.write(("--" + boundary + "\r\n").getBytes());output.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n", file.getName()).getBytes());  output.write("Content-Type: video/mp4 \r\n\r\n".getBytes());byte[] data = new byte[1024];int len =0;FileInputStream input = new FileInputStream(file);while((len=input.read(data))>-1){output.write(data, 0, len);}output.write(("--" + boundary + "\r\n").getBytes());output.write("Content-Disposition: form-data; name=\"description\";\r\n\r\n".getBytes());output.write(String.format("{\"title\":\"%s\", \"introduction\":\"%s\"}",title,introduction).getBytes());output.write(("\r\n--" + boundary + "--\r\n\r\n").getBytes());output.flush();output.close();input.close();InputStream resp = conn.getInputStream();StringBuffer sb = new StringBuffer();while((len= resp.read(data))>-1){sb.append(new String(data,0,len,"utf-8"));}resp.close();result = sb.toString();System.out.println(result);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return result;}
    /*** 请求接口*/public static String connectWeiXinInterface(String action,String json){URL url;try {url = new URL(action);HttpURLConnection http = (HttpURLConnection) url.openConnection();http.setRequestMethod("POST");http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒http.connect();OutputStream os = http.getOutputStream();os.write(json.getBytes("UTF-8"));// 传入参数InputStream is = http.getInputStream();int size = is.available();byte[] jsonBytes = new byte[size];is.read(jsonBytes);String result = new String(jsonBytes, "UTF-8");System.out.println("请求返回结果:"+result);os.flush();os.close();return result;} catch (Exception e) {e.printStackTrace();return null;}}
    /*** 发送预览视频*/@RequestMapping("/sendvideo")@ResponseBodypublic String sendvideo(String id) throws KeyManagementException, NoSuchAlgorithmException, IOException{//获取access_tokenString access_token = getaccess();//上传视频到微信服务器获取media_idString path = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" + access_token + "&type=video";String postresult = postFile(path, "视频地址", "视频标题", "视频描述");Map maps = (Map)JSON.parse(postresult);String media1 = maps.get("media_id").toString();//通过media_id获取发送media_idString url = "https://api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token="+access_token;String twString="{\"media_id\": \""+media1+"\","+"\"title\": \"视频标题\","+"\"description\": \"视频描述\"}";String result = connectWeiXinInterface(url, twString);Map maps2 = (Map)JSON.parse(result);String media2 = maps2.get("media_id").toString();//根据media_id进行发送String url2 = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token="+access_token;String twString2="{\"touser\":\"okmRs6WO-DSlzVwiqwF3gfc3-pmk\","+"\"mpvideo\":{\"media_id\":\""+media2+"\"},"+"\"msgtype\":\"mpvideo\"}";String result2 = connectWeiXinInterface(url2, twString2);return result2;}

微信公众平台开发JAVA(四)公众号进行视频发送相关推荐

  1. 微信发ascii_微信公众平台开发(107) 分享到朋友圈和发送给好友

    关键字:微信公众平台 JSSDK 发送给朋友 分享到朋友圈 onMenuShareTimeline onMenuShareAppMessage 作者:方倍工作室 原文:http://www.cnblo ...

  2. 微信公众平台开发(四)——微信支付

    一.JS-SDK 公众号中的微信支付需要通过JS来实现.微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.点击查看在线文档. 1)引入JS脚本文件 <script s ...

  3. 微信公众平台开发-java

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,首先我们登录微信公众平台,通过其后台可以设置一些基础服务,如菜单设置.消息自动回复,但由于企业服务具有复杂性.通过微信公众平台后台设置一般 ...

  4. 1:新浪云SAE搭建微信公众平台开发-java

    从微信调用API中可以看出个大概流程,如下图 通过上图的了解,可知要想做微信公众平台第二次开发 必须搭建一个自定义服务器,自定义服务器上面部署相应的逻辑代码,搭建自定义服务器的方式有很多种 比如百度云 ...

  5. 微信公众平台开发1--微信公众账号开发者模式

    1 申请公众账号 地址mp.weixin.qq.com //注册微信公众平台 需要身份证信息 和 手机号码 下面是注册完成的微信界面 选择高级功能 关闭编辑模式  选择开发模式 开启 点击进入 2 申 ...

  6. 微信公众平台开发(103) 四六级成绩查询

    全国大学英语四.六级考试.日语四级.日语六级.德语四级.德语六级.俄语四级.俄语六级以及法语四级考试成绩于2015年8月20日上午9时发布 我们提供微信查询方法 1.关注微信公众账号 二.回复&quo ...

  7. 微信公众平台开发入门教程[2019版]

    关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公 ...

  8. 微信公众平台开发问答 【转发】

    微信公众平台开发问答 微信公众平台开发问答是一个微信知识问答区,专注于提供微信应用及开发技术知识的整理.归类和检索. 主题:新手常见问题 问:我是新手,没有开发基础,应该如何学习微信公众平台的开发? ...

  9. 微信公众平台开发入门教程[2020版]

    在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见左侧 ...

最新文章

  1. Sqli-labs less 62
  2. LeetCode Find Minimum in Rotated Sorted Array II
  3. 利用JS实现复制/粘贴功能
  4. 儿童节礼包!10 后都开始学编程了,你需要这个阿里技术电子书大全
  5. 蓝桥杯嵌入式第七届模拟题 代码
  6. 《黑客秘笈——渗透测试实用指南》—第2章2.3节 外部或内部的主动式信息收集...
  7. 二叉树前序,中序,后序遍历的迭代实现,实现思路及代码
  8. pythonturtle绘图代码 四叶草_python绘图四叶草
  9. 《软件需求模式》05
  10. 为什么用preparedStatement 而不是statement
  11. PAIP.paip.手机离线ROOT过程总结
  12. 外贸最全出口流程,外贸必看基础知识
  13. 关于RPN中proposal的坐标回归参数的一点理解及Faster R-CNN的学习资料
  14. bootloader的两种启动模式
  15. 华雨欢:多日震荡趋势明显,本周即将结束要开启每周大行情了
  16. Win10蓝牙突然消失的解决办法
  17. ubunutu个人配置
  18. 【ftp】725本电子书下载
  19. TextView 去除默认内边距
  20. [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(六)文件包含相关面试题

热门文章

  1. App跳转到与手机版QQ公众服务号聊天界面
  2. 2022最新Java学习路线,对标阿里P6
  3. 常用编码说明-ASCIIISO
  4. 谷歌浏览器导出书签、导入书签,html 格式 。QQ浏览器导出书签、导入书签,html 格式
  5. KMS激活方案(二)
  6. 智能检测与智能制造第0章 传感器与检测技术
  7. wx小程序录音并上传到后端保存[后端PHP]
  8. (附源码)计算机毕业设计SSM基于的服装商城系统
  9. MySQL8认证插件—LDAP Pluggable Authentication
  10. 为什么全网都在劝你在学PG,而不是MySQL?