首先,应该建立一个消息与图片的实体,看一下微信公众号的文档:

回复文本消息

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName>

<FromUserName><![CDATA[fromUser]]></FromUserName>

<CreateTime>12345678</CreateTime>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[你好]]></Content>

</xml>

参数 是否必须 描述
ToUserName 接收方帐号(收到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType text
Content 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

回复图片消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>
参数 是否必须 说明
ToUserName 接收方帐号(收到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType image
MediaId

通过素材管理中的接口上传多媒体文件,得到的id。

之后组装实体,用户发来消息或者事件时候给微信服务器发送请求,服务器把消息返回给在公众号配置的服务器域名处,然后再进行逻辑判断,给微信服务器返回消息,发给用户。

下面给出一般的消息类型:

public static final String MESSAGE_SCAN="SCAN";//未关注公众号扫描二维码
public static final String MESSAGE_TEXT="text";//文本
public static final String MESSAGE_IMAGE="image";//图片
public static final String MESSAGE_VOICE="voice";//语音
public static final String MESSAGE_VIDEO="video";//视频
public static final String MESSAGE_LINK="link";//连接
public static final String MESSAGE_LOCATION="location";//地理位置事件
public static final String MESSAGE_EVENT="event";//事件
public static final String MESSAGE_SUBSCRIBE="subscribe";//关注
public static final String MESSAGE_UNSUBSCRIBE="unsubscribe";//取消关注
public static final String MESSAGE_CLICK="CLICK";//点击
public static final String MESSAGE_VIEW="VIEW";//t跳转链接url

需要注意的是,发送图片需要先把图片上传到微信服务器获取MediaId,才能发给用户。

/*** xml转为map集合* @MethodName:xmlToMap*@author:maliran*@ReturnType:Map<String,String>*@param req*@return*@throws IOException*@throws DocumentException*/public static Map<String,String> xmlToMap(HttpServletRequest req) throws IOException, DocumentException{Map<String,String> map = new HashMap<String,String>();SAXReader reader = new SAXReader();//log4j.jarInputStream ins = req.getInputStream();Document doc = reader.read(ins);Element root = doc.getRootElement();List<Element> list = root.elements();for(Element e:list){map.put(e.getName(), e.getText());}ins.close();return map;}/*** 文本转换为xml* @MethodName:textMessageToXml*@author:maliran*@ReturnType:String*@param textMessage*@return*/public static String textMessageToXml(TextMessage textMessage){XStream xstream = new XStream();//xstream.jar,xmlpull.jarxstream.alias("xml", textMessage.getClass());//置换根节点System.out.println(xstream.toXML(textMessage));return xstream.toXML(textMessage);}/*** 图片转成xml* @MethodName:textMessageToXml*@author:maliran*@ReturnType:String*@param textMessage*@return*/public static String imageMessageToXml(ImageMessage imageMessage){XStream xstream = new XStream();//xstream.jar,xmlpull.jarxstream.alias("xml", imageMessage.getClass());//置换根节点//System.out.println(xstream.toXML(imageMessage));return xstream.toXML(imageMessage);}/*** 组装图片xml* @MethodName:initImageMessage*@author:maliran*@ReturnType:String*@param MediaId*@param toUserName*@param fromUserName*@return*/public static String initImageMessage(String MediaId,String toUserName,String fromUserName){        String message = null;Image image = new Image();ImageMessage imageMessage = new ImageMessage();image.setMediaId(MediaId);imageMessage.setFromUserName(toUserName);imageMessage.setToUserName(fromUserName);imageMessage.setCreateTime(new Date().toString());imageMessage.setImage(image);imageMessage.setMsgType(MESSAGE_IMAGE);message = imageMessageToXml(imageMessage);return message;}public static String initTextMessage(String content,String toUserName,String fromUserName){      String message = null;TextMessage textMessage = new TextMessage();textMessage.setFromUserName(toUserName);textMessage.setToUserName(fromUserName);textMessage.setCreateTime(new Date().toString());textMessage.setContent(content);textMessage.setMsgType(MESSAGE_TEXT);message = textMessageToXml(textMessage);return message;}
/*** 上传本地文件到微信获取mediaId*/public static String upload(String filePath, String accessToken,String type) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {File file = new File(filePath);if (!file.exists() || !file.isFile()) {throw new IOException("文件不存在");}String url = ConfigUtil.UPLOAD_URL.replace("ACCESS_TOKEN", accessToken).replace("TYPE",type);URL urlObj = new URL(url);//连接HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();con.setRequestMethod("POST"); con.setDoInput(true);con.setDoOutput(true);con.setUseCaches(false); //设置请求头信息con.setRequestProperty("Connection", "Keep-Alive");con.setRequestProperty("Charset", "UTF-8");//设置边界String BOUNDARY = "----------" + System.currentTimeMillis();con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);StringBuilder sb = new StringBuilder();sb.append("--");sb.append(BOUNDARY);sb.append("\r\n");sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");sb.append("Content-Type:application/octet-stream\r\n\r\n");byte[] head = sb.toString().getBytes("utf-8");//获得输出流OutputStream out = new DataOutputStream(con.getOutputStream());//输出表头out.write(head);//文件正文部分//把文件已流文件的方式 推入到url中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[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");//定义最后数据分隔线out.write(foot);out.flush();out.close();StringBuffer buffer = new StringBuffer();BufferedReader reader = null;String result = null;try {//定义BufferedReader输入流来读取URL的响应reader = new BufferedReader(new InputStreamReader(con.getInputStream()));String line = null;while ((line = reader.readLine()) != null) {buffer.append(line);}if (result == null) {result = buffer.toString();}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {reader.close();}}JSONObject jsonObj = JSONObject.fromObject(result);System.out.println(jsonObj);String typeName = "media_id";if(!"image".equals(type)){typeName = type + "_media_id";}String mediaId = jsonObj.getString(typeName);return mediaId;}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String serverPath="";serverPath = req.getServletContext().getRealPath("/").replace("\\", "/");  //Servlet初始化时执行,如果上传文件目录不存在则自动创建  if(!new File(serverPath+"qrimage").isDirectory()){  new File(serverPath+"qrimage").mkdirs();  }   PrintWriter out = resp.getWriter();//String openId = GetCookie.getCookie(req,resp);Map<String, String> map;try {map = MessageUtil.xmlToMap(req);String fromUserName = map.get("FromUserName");System.out.println(fromUserName);String toUserName = map.get("ToUserName");String msgType = map.get("MsgType");//String content = map.get("Content");String message = "";if(MessageUtil.MESSAGE_EVENT.equals(msgType)){        System.out.println("事件");String eventType = map.get("Event");System.out.println(eventType);String eventKey = map.get("EventKey");System.out.println(map.get("EventKey"));if(MessageUtil.MESSAGE_CLICK.equals(eventType)){String key = map.get("EventKey");if(key.equals("1")){String filePath = serverPath+"qrimage"+"\\"+fromUserName+".jpg";  //String url = "WebContent/qrimage/"+fromUserName+".jpg";String ticket = wxQRCodeService.createForeverStrTicket(fromUserName);    //System.out.println(url);//获取access_token             String content = "123456";String mediaId = MyImageUtil.upload(filePath, accessToken,MessageUtil.MESSAGE_IMAGE);String imageMessage = MessageUtil.initImageMessage(mediaId, toUserName, fromUserName);System.out.println(imageMessage);out.print(imageMessage);out.close();}}}else{return;  }} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}    

最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的

JAVA微信公众号开发之自动回复消息与图片相关推荐

  1. java微信自动回复开发,Java微信公众号开发----关键字自动回复消息

    在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有 ...

  2. JAVA微信公众号开发第8篇JSSDK图片上传预览

    简介 博主微信JSSDK&图片上传预览基于微信分享做拓展,所以一些配置操作请点击查阅JAVA微信公众号开发第7篇JSSDK&微信分享博文 页面 <html><head ...

  3. 微信公众号php编程,PHP编程:微信公众号开发之文本消息自动回复php代码

    搜索热词 <微信公众号开发之文本消息自动回复PHP代码>要点: 本文介绍了微信公众号开发之文本消息自动回复PHP代码,希望对您有用.如果有疑问,可以联系我们. 本文实例为大家分享了PHP微 ...

  4. 微信公众 php代码,微信公众号开发之文本消息自动回复php代码_php实例

    本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下 1.PHP示例代码下载 下载地址1:http://xiazai.php.net/201608/yuanma/phpwx ...

  5. Java微信公众号开发(一:接入平台,验证token)

    Java微信公众号开发(一:接入平台,验证token) 开发环境: 环境:JDK1.8 框架:springBoot 首先,在我们接入微信公众平台之前,我们需要注册微信公众号的开发者账号,获取开发者ID ...

  6. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  7. Java微信公众号开发梳理

    Java微信公众号开发梳理 现在微信公众平台的开发已经越来越普遍,这次开发需要用到微信公众平台.因此做一个简单的记录,也算是给那些没踩过坑的童鞋一些启示吧.我将分几块来简单的描述一下,之后会做详细的说 ...

  8. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  9. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

最新文章

  1. SpringBoot使用笔记
  2. 在线作图丨数据降维方法⑥——消除趋势对应分析(Detrended correspondence analysis, DCA)
  3. 吴琦:AI研究一路走到“黑”, 从VQA到VLN
  4. JVM学习笔记(一)------的基本结构
  5. matlab画图函数plot
  6. Java 原子变量类
  7. python如何导入txt数据集-终于找到python入门到实践数据集
  8. R语言实战应用精讲50篇(十四)-R语言构建层次分析模型
  9. 如何上传file对象
  10. python多线程_python多线程:控制线程数量
  11. 如何在ubuntu中编写python_在ubuntu下编写python(python入门)
  12. magic_quotes_gpc合magic_quotes_runtime的区别!
  13. QT接收Linux内核,QT界面程序经过网路与普通的linux应用程序进行数据传送的情况...
  14. css垂直居中怎么设?文字上下居中和图片垂直居中
  15. Nodemailer 使用Gmail发送邮件
  16. 情绪文本的时空可视化分析
  17. Windows如何查看IIS访问IP记录
  18. VM未能关闭虚拟机电源
  19. 虚拟opc服务器软件,几个OPC服务器开发工具比较
  20. 51JOB:根据HR处理简历的一般流程,简历投递后会有如下几种状态出现

热门文章

  1. python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果
  2. JS事件监听手机屏幕触摸事件 Touch
  3. 【动画消消乐 】HTML+CSS 吃豆豆动画 073
  4. python怎么编写流氓软件_Python恶意软件分析入门
  5. html做一个聊天输入框,js实现简易聊天对话框
  6. 7-2 然后是几点 (15 分) (C语言)
  7. Codeforces 892 A.Greed
  8. 嘘,你抢的不是红包而是云
  9. shell-login-session-环境设置流程
  10. 整车控制器(VCU)的功能