微信公众号开发(四)——点击菜单回复图片和语音
先讲回复图片,语音类似。
这个发送图片,并不是点击输入框右侧的“➕”,去选择本地照片,而是要把图片上传的公众号的服务器。
按照开发文档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>
微信公众号开发(四)——点击菜单回复图片和语音相关推荐
- java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...
本实例是为了实现在管理后台实现微信菜单的添加删除管理. 1.首先我们需要新建一个数据库表用于存放menu菜单项 可包含的字段有id.父类id.name.排序.是否显示.类型(view.click).链 ...
- 微信公众号开发--图文消息发送不显示图片的问题
使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...
- java微信公众号开发四步完成
一.公众号注册 此处比较简单不做过多陈述(个人需要身份证号和300RMB,企业需要企业注册证书和企业法人证件),公众号每年一审,每次年审需要300RMB,提交信息自己官网一步步点击就可知道. 二.公众 ...
- 实例:用C#.NET手把手教你做微信公众号开发(9)--菜单设置
一.菜单定义 先看个直观的图,菜单在公众号的底部,当一个公众号没有设置菜单时是看不到的,设置之后就是下面的样子. 注意事项: 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜 ...
- 微信公众号开发笔记(八)发送图片消息
发送图片消息 上一篇我们已经上传一个图片素材,并且微信服务器也返回给我们一个media_id,接下来我们使用media_id来构造图片消息 代码实现功能 在Message.Util工具类添加代码 1. ...
- JAVA微信公众号开发第5篇菜单发布
说明 菜单数据库表设计 菜单数据拼装与发布 数据拼装和接口调用 Mapper设计 效果展示 说明 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能.开启自定义菜单后,公众号界面如图所 ...
- 微信公众号开发账号申请以及菜单配置。
一.微信公众平台接口测试帐号申请 1. 账号申请地址:账号申请地址 二.微信公众平台接口测试帐号配置 1. 测试号基本信息appid 2. 配置JS接口安全域名名(页面域名) 注意:不要加上http或 ...
- 微信公众号开发(二)---验证服务与回复消息
经过第一个阶段的工作,公众号服务器方面的配置已经完成,接下来就是开发环境的搭建了. 准备工作请看上一篇文章: 0. 消息的传递路径 1. 启动XShell,开启端口转发 按照上一篇文章对XShell进 ...
- 微信公众号开发【一】 菜单获取与设置
首先一点点准备工作, 本地开发时,需要将本地ip 写攻到白名单中,不然无法获取token. 知道自己的appid 和appSecret 微信的助手类.提供获取token 向api 请求等功能封装.用法 ...
最新文章
- 华为9.0以上系统如何没root激活XPOSED框架的流程
- python安装某些库失败的问题解决方案
- map-reduce的八个流程
- Java学习笔记12——JVM入门
- bzoj 1596 电话网络
- 上海交大计算机网络课程作业,上海交大计算机网络第四次作业详解.doc
- 安装虚拟机Centos系统并安装Docker过程记录
- linux 无法启动matlab,在具有 jre 1.7.0 _05的科学linux上,无法启动 MATLAB gui ( 指南)_matlab_开发99编程知识库...
- mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源或结果
- 小程序实现“类吸顶”效果交流处
- Ubuntu18.04-albert编译安装记录
- python贪吃蛇的实验报告_贪吃蛇游戏程序设计实验报告.doc
- 压缩包文件打开密码如何破解
- 积分变现|积分变现如何效益最大化?信用卡积分如何快速变现?
- Java中cvc是什么意思_什么叫自然拼读cvc组合- cvc和cvce单词的区别
- Python手册(Machine Learning)--statsmodels(Regression)
- Linux查看所有子文件夹及文件的数量
- Redis key键命令
- 苹果CMS V10仿韩剧TV主题模板源码 | 苹果CMS主题
- Matplotlib.pyplot 常用方法(一)