之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复【普通消息类型消息】,这里将讲述多媒体消息的回复方法,【多媒体消息】包含回复图片消息/回复语音消息/回复视频消息/回复音乐消息,这里以图片消息的回复为例进行讲解!

还记得之前将消息分类的标准就是一种是不需要上传多媒体资源到腾讯服务器的而另外一种是需要的,所以在这里我们所需要做的第一步就是上传资源到腾讯服务器,这里我们调用【素材管理】接口(后面将会有专门的章节讲述)进行图片的上传,同样的这个接口可以提供我们对语音、视频、音乐等消息的管理,这里以图片为例(文档地址:http://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449290dfd43d006.html )。在文档中我们可以发现这里上传的方式是模拟表单的方式上传,然后返回给我们我们需要在回复消息中需要用到的参数:media_id!
(一)素材接口图片上传
按照之前我们的约定将接口请求的url写入到配置文件interface_url.properties中:
#获取token的url tokenUrl=https://api.weixin.qq.com/cgi-bin/token #永久多媒体文件上传url mediaUrl=http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=
然后我在这里写了一个模拟表单上传的工具类HttpPostUploadUtil.java,如下:
package com.cuiyongzhi.wechat.util;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import javax.activation.MimetypesFileTypeMap;
import com.cuiyongzhi.web.util.GlobalConstants;
/**
* ClassName: HttpPostUploadUtil
* @Description: 多媒体上传
* @author dapengniao
* @date 2016年3月14日 上午11:56:55
*/
public class HttpPostUploadUtil {
public String urlStr;
public HttpPostUploadUtil(){
urlStr = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token="+GlobalConstants.getInterfaceUrl("access_token")+"&type=image";
}
/**
* 上传图片
*
* @param urlStr
* @param textMap
* @param fileMap
* @return
*/
@SuppressWarnings("rawtypes")
public String formUpload(Map<String, String> textMap,
Map<String, String> fileMap) {
String res = "";
HttpURLConnection conn = null;
String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.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("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator<?> iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\""
+ inputName + "\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes());
}
// file
if (fileMap != null) {
Iterator<?> iter = fileMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
File file = new File(inputValue);
String filename = file.getName();
String contentType = new MimetypesFileTypeMap()
.getContentType(file);
if (filename.endsWith(".jpg")) {
contentType = "image/jpg";
}
if (contentType == null || contentType.equals("")) {
contentType = "application/octet-stream";
}
StringBuffer strBuf = new StringBuffer();
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\""
+ inputName + "\"; filename=\"" + filename
+ "\"\r\n");
strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
out.write(strBuf.toString().getBytes());
DataInputStream in = new DataInputStream(
new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
}
}
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
// 读取返回数据
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append("\n");
}
res = strBuf.toString();
reader.close();
reader = null;
} catch (Exception e) {
System.out.println("发送POST请求出错。" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
return res;
}
}
我们将工具类写好之后就需要在我们消息回复中加入对应的响应代码,这里为了测试我将响应代码加在【关注事件】中!
(二)图片回复
这里我们需要修改的是我们的【事件消息业务分发器】的代码,这里我们将我们的回复加在【关注事件】中,简单代码如下:
String openid = map.get("FromUserName"); // 用户openid
String mpid = map.get("ToUserName"); // 公众号原始ID
ImageMessage imgmsg = new ImageMessage();
imgmsg.setToUserName(openid);
imgmsg.setFromUserName(mpid);
imgmsg.setCreateTime(new Date().getTime());
imgmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_Image);
if (map.get("Event").equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { // 关注事件
System.out.println("==============这是关注事件!");
Image img = new Image();
HttpPostUploadUtil util=new HttpPostUploadUtil();
String filepath="H:\\1.jpg";
Map<String, String> textMap = new HashMap<String, String>();
textMap.put("name", "testname");
Map<String, String> fileMap = new HashMap<String, String>();
fileMap.put("userfile", filepath);
String mediaidrs = util.formUpload(textMap, fileMap);
System.out.println(mediaidrs);
String mediaid=JSONObject.fromObject(mediaidrs).getString("media_id");
img.setMediaId(mediaid);
imgmsg.setImage(img);
return MessageUtil.imageMessageToXml(imgmsg);
}
到这里代码基本就已经完成整个的图片消息回复的内容,同样的不论是语音回复、视频回复等流程都是一样的,所以其他的就不在做过多的讲述了,最后的大致效果如下:
正常的消息回复的内容我们就讲述的差不多了,下一篇我们讲述基于消息回复的一些应用【关键字回复及超链接回复】的实现,感谢你的翻阅,如有疑问可以留言讨论!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java微信多媒体消息回复
# java微信图片回复
# java微信素材接口图片上传
# Java微信公众平台开发(15) 微信JSSDK的使用
# Java微信公众平台开发(14) 微信web开发者工具使用
# Java微信公众平台开发(12) 微信用户信息的获取
# Java微信公众平台开发(10) 微信自定义菜单的创建实现
# Java微信公众平台开发(9) 关键字回复以及客服接口实现
# Java微信公众平台开发(7) 公众平台测试帐号的申请
# Java微信公众平台开发(5) 文本及图文消息回复的实现
# Java微信公众平台之素材管理
# Java微信公众平台之获取地理位置
# Java微信公众平台之群发接口(高级群发)
# 上传
# 腾讯
# 为例
# 表单
# 加在
# 的是
# 这是
# 文档
# 在这里
# 也有
# 会有
# 不需要
# 如有
# 其他的
# 给我们
# 所需
# 我们可以
# 要做
# 写了
# 我将
相关文章:
海南网站制作公司有哪些,海口网是哪家的?
建站之星免费模板:自助建站系统与智能响应式一键生成
广州建站公司哪家好?十大优质服务商推荐
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何将凡科建站内容保存为本地文件?
股票网站制作软件,网上股票怎么开户?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
北京制作网站的公司,北京铁路集团官方网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
建站之星代理如何优化在线客服效率?
建站之星安装提示数据库无法连接如何解决?
如何在宝塔面板中修改默认建站目录?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何在宝塔面板创建新站点?
如何在阿里云香港服务器快速搭建网站?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何在云服务器上快速搭建个人网站?
成都网站制作报价公司,成都工业用气开户费用?
如何通过VPS建站无需域名直接访问?
网站图片在线制作软件,怎么在图片上做链接?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
制作门户网站的参考文献在哪,小说网站怎么建立?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
,石家庄四十八中学官网?
图册素材网站设计制作软件,图册的导出方式有几种?
建站之星3.0如何解决常见操作问题?
定制建站如何定义?其核心优势是什么?
建站之星后台密码遗忘?如何快速找回?
建站之星展会模板:智能建站与自助搭建高效解决方案
山东网站制作公司有哪些,山东大源集团官网?
建站之星如何优化SEO以实现高效排名?
如何通过服务器快速搭建网站?完整步骤解析
微课制作网站有哪些,微课网怎么进?
完全自定义免费建站平台:主题模板在线生成一站式服务
教学网站制作软件,学习*后期制作的网站有哪些?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
行程制作网站有哪些,第三方机票电子行程单怎么开?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
高防服务器租用指南:配置选择与快速部署攻略
建站之星客服服务时间及联系方式如何?
网站制作需要会哪些技术,建立一个网站要花费多少?
如何用免费手机建站系统零基础打造专业网站?
h5在线制作网站电脑版下载,h5网页制作软件?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
制作网站怎么制作,*游戏网站怎么搭建?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
*请认真填写需求信息,我们会在24小时内与您取得联系。