先讲回复图片,语音类似。

这个发送图片,并不是点击输入框右侧的“➕”,去选择本地照片,而是要把图片上传的公众号的服务器。

按照开发文档https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html,被动回复图片消息格式如下:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[media_id]]></MediaId></Image>
</xml>

大厂的定义也是够不正规的,多种图片消息格式竟然不统一,这里的MediaId节点是在Image(注意首字母大写)节点之下的,其他图片消息MediaId节点是一级节点,注意一下啊!

增加菜单“看图”,并定义key值。参照《创建菜单》

{"button":[{"type":"click","name":"Hello","key":"mh001"},{"type":"click","name":"看图","key":"mh002"}
}

根据开发文档,对之前的WXMessgeBean进行修改,增加一个字段和一个ImageMessage的Bean

package com.myweb.demo.bean;import javax.xml.bind.annotation.*;@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class WXMessgeBean {......private ImageMessage Image;......public ImageMessage getImage() {return Image;}public void setImage(ImageMessage image) {Image = image;}public static class ImageMessage{private String mediaId;public String getMediaId() {return mediaId;}
//注意这里,设置MediaId节点名称,一定是首字母大写@XmlElement(name = "MediaId")public void setMediaId(String mediaId) {this.mediaId = mediaId;}}
}

设置MediaId节点名称,一定是首字母大写!!!

另外这个MediaId从哪里来呢,通过微信公众平台接口调试工具,将图片提交到服务器(当然还要先获取accessToken)

按照图示的样子,填写信息,点击“检查问题”,成功后,就会在下方显示MediaID。

回复消息的代码如下:

    @PostMapping(value = "/checktoken", produces = MediaType.APPLICATION_XML_VALUE)public String receiveWX(HttpServletRequest request, HttpServletResponse response  ){try {Marshaller marshaller;Unmarshaller unmarshal;//你要解析成哪个bean对象,newInstance的参数就是哪个对象JAXBContext jaxbContext = JAXBContext.newInstance(WXMessgeBean.class);unmarshal = jaxbContext.createUnmarshaller();//xml解码成bean对象WXMessgeBean wxMessgeBean = (WXMessgeBean) unmarshal.unmarshal(request.getInputStream());//准备返回文字信息WXMessgeBean bean = new WXMessgeBean();bean.setFromUserName(wxMessgeBean.getToUserName());bean.setToUserName(wxMessgeBean.getFromUserName());bean.setCreateTime(new Date().getTime());//通过比对菜单项的key值if (wxMessgeBean.getEventKey().equals("mh001")) {......}else if (wxMessgeBean.getEventKey().equals("mh002")){bean.setMsgType("image");bean.setImage(new WXMessgeBean.ImageMessage());bean.getImage().setMediaId("DSUR_MT-pbZTA7gf6CITwK3RtCnxwB_K5zUKUWAZNgbKbGB1HS3n3hyGNJZPWbFD");}else{......}//把bean对象组装成xml格式,并返回marshaller = jaxbContext.createMarshaller();StringWriter writer = new StringWriter();marshaller.marshal(bean,writer);return writer.toString();} catch (Exception e) {e.printStackTrace();}return null;}

把之前获得的MediaId填进去就是了。启动服务,点击“看图”按钮,就会看到了。

回复图像搞定之后,语音的就简单了,所有步骤都一样,唯一不同的就是MsgType=video。

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

微信公众号开发(四)——点击菜单回复图片和语音相关推荐

  1. java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...

    本实例是为了实现在管理后台实现微信菜单的添加删除管理. 1.首先我们需要新建一个数据库表用于存放menu菜单项 可包含的字段有id.父类id.name.排序.是否显示.类型(view.click).链 ...

  2. 微信公众号开发--图文消息发送不显示图片的问题

    使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...

  3. java微信公众号开发四步完成

    一.公众号注册 此处比较简单不做过多陈述(个人需要身份证号和300RMB,企业需要企业注册证书和企业法人证件),公众号每年一审,每次年审需要300RMB,提交信息自己官网一步步点击就可知道. 二.公众 ...

  4. 实例:用C#.NET手把手教你做微信公众号开发(9)--菜单设置

    一.菜单定义 先看个直观的图,菜单在公众号的底部,当一个公众号没有设置菜单时是看不到的,设置之后就是下面的样子. 注意事项: 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜 ...

  5. 微信公众号开发笔记(八)发送图片消息

    发送图片消息 上一篇我们已经上传一个图片素材,并且微信服务器也返回给我们一个media_id,接下来我们使用media_id来构造图片消息 代码实现功能 在Message.Util工具类添加代码 1. ...

  6. JAVA微信公众号开发第5篇菜单发布

    说明 菜单数据库表设计 菜单数据拼装与发布 数据拼装和接口调用 Mapper设计 效果展示 说明 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能.开启自定义菜单后,公众号界面如图所 ...

  7. 微信公众号开发账号申请以及菜单配置。

    一.微信公众平台接口测试帐号申请 1. 账号申请地址:账号申请地址 二.微信公众平台接口测试帐号配置 1. 测试号基本信息appid 2. 配置JS接口安全域名名(页面域名) 注意:不要加上http或 ...

  8. 微信公众号开发(二)---验证服务与回复消息

    经过第一个阶段的工作,公众号服务器方面的配置已经完成,接下来就是开发环境的搭建了. 准备工作请看上一篇文章: 0. 消息的传递路径 1. 启动XShell,开启端口转发 按照上一篇文章对XShell进 ...

  9. 微信公众号开发【一】 菜单获取与设置

    首先一点点准备工作, 本地开发时,需要将本地ip 写攻到白名单中,不然无法获取token. 知道自己的appid 和appSecret 微信的助手类.提供获取token 向api 请求等功能封装.用法 ...

最新文章

  1. 华为9.0以上系统如何没root激活XPOSED框架的流程
  2. python安装某些库失败的问题解决方案
  3. map-reduce的八个流程
  4. Java学习笔记12——JVM入门
  5. bzoj 1596 电话网络
  6. 上海交大计算机网络课程作业,上海交大计算机网络第四次作业详解.doc
  7. 安装虚拟机Centos系统并安装Docker过程记录
  8. linux 无法启动matlab,在具有 jre 1.7.0 _05的科学linux上,无法启动 MATLAB gui ( 指南)_matlab_开发99编程知识库...
  9. mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源或结果
  10. 小程序实现“类吸顶”效果交流处
  11. Ubuntu18.04-albert编译安装记录
  12. python贪吃蛇的实验报告_贪吃蛇游戏程序设计实验报告.doc
  13. 压缩包文件打开密码如何破解
  14. 积分变现|积分变现如何效益最大化?信用卡积分如何快速变现?
  15. Java中cvc是什么意思_什么叫自然拼读cvc组合- cvc和cvce单词的区别
  16. Python手册(Machine Learning)--statsmodels(Regression)
  17. Linux查看所有子文件夹及文件的数量
  18. Redis key键命令
  19. 苹果CMS V10仿韩剧TV主题模板源码 | 苹果CMS主题
  20. Matplotlib.pyplot 常用方法(一)

热门文章

  1. 将禾赛激光雷达在rviz中采集的点云保存成pcd格式
  2. 基于微信小程序的二手交易平台
  3. RxJS 6 —— Subscription
  4. xcode9创建git分支
  5. matlab曲线拟合详解(含fit、fittype函数及fitoptions设置)
  6. 大学计算机考试知识点归纳总结,大学计算机基础重点归纳.doc
  7. 2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛)F osu
  8. 【广告计算】互联网控制舆论的三个方法
  9. 微信小程序制作天气查询系统
  10. 用跨进程子类化技术实现对其它进程消息的拦载