在上一节课程中,我们学习了图片消息的回复功能。根据微信公众平台的消息类型显示,微信共支持文本、图片、语音、视频、音乐、图文等6种消息类型的回复:

其中,我们已经实现了文本、图文、图片等消息的回复处理,而语音、视频两种消息类型的功能与图片消息完全一样。均需使用我们写好的文件上传接口,上传文件并获得MediaID,从而使用MediaID推送图片、语音、视频。没有学习过的同学,可进入杰瑞教育博客园继续学习:http://www.cnblogs.com/jerehedu/p/6781456.html

今天,我们来学习最后一种消息类型——音乐消息的回复功能。

      一、音乐消息数据结构

按照国际惯例,在学习一种新的消息回复的时候,我们都需要首先了解这种消息的数据结构以及XML 包结构。那么,让我们进入微信开发帮助文档看一下:

http://mp.weixin.qq.com/wiki/1/6239b44c206cab9145b1d52c67e6c551.html

我们可以清晰的看到这样一段XML数据结构:

<xml>

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

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

<CreateTime>12345678</CreateTime>

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

<Music>

<Title><![CDATA[TITLE]]></Title>

<Description><![CDATA[DESCRIPTION]]></Description>

<MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>

<HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>

<ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>

</Music>

</xml>

官方给出的解释如下:

在这当中,我们看到发送音乐消息,除了必备的标题、描述、链接等。还需要一张缩略图id,那么聪明的同学应该知道怎么处理了……

    二、上传缩略图并取得ID

上周我们已经实现了图片的上传功能,其中在测试类中上传图片是,我们选择的上传的类型为image:

根据上传的媒体文件类型【媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)】我们只需要把image修改为thumb,即可实现缩略图的上传,并取得MediaID:

public static void main(String[] args) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException {

AccessToken token = WeiXinUtil.getAccessToken();

System.out.println("Access_Token为:"+token.getToken());

System.out.println("有效时间为:"+token.getExpiresIn());

String path = "E:/bg.jpg";

String MediaId = WeiXinUtil.upload(path, token.getToken(), "thumb");

注意:上传文件类型只能是JPG且小于64KB。最终,得到thumb_media_id如下:4Ln9zjbEdBjMWS-TtYCmd89stx7CVmmmMGx1wdKul9-g6zOHQYJMukPEsC0pVd4h

得到缩略图的ID以后,我们就可以进行音乐消息的组装了。

    三、组装音乐消息实体对象

    ① 组装Music.java实体

所需属性如下,并提供Get/Set方法

    ② 组装MusicMessage.java实体

所需属性如下,并继承自MusicMessage类。

    四、编写音乐对象转XML方法

回到MessageUtil工具类,撰写音乐对象转XML方法:

public static String musicMessageToXml(MusicMessage musicMessage){

XStream xstream = new XStream();

xstream.alias("xml", musicMessage.getClass());

return xstream.toXML(musicMessage);

}

    五、编写组装音乐消息的方法

继续在MessageUtil类中,进行音乐消息的组装。当然,需要提前准备:缩略图ID、音乐链接。其中,我在WebRoot下的res文件夹中,放了一个MP3音乐文件,因此可得到我自己的音乐链接:http://jerehedu.applinzi.com/res/达康书记不容易.mp3

/**

* 组装音乐消息

*/

public static String initMusicMessage(String toUserName,String fromUserName){

String message = null;

Music music = new Music();

music.setThumbMediaId("4Ln9zjbEdBjMWS-TtYCmd89stx7CVmmmMGx1wdKul9-g6zOHQYJMukPEsC0pVd4h");

music.setTitle("达康书记不同意");

music.setDescription("达康书记不容易——山东工商学院杨军老师作词作曲演唱");

music.setMusicUrl("http://jerehedu.applinzi.com/res/达康书记不容易.mp3");

music.setHQMusicUrl("http://jerehedu.applinzi.com/res/达康书记不容易.mp3");

MusicMessage musicMessage = new MusicMessage();

musicMessage.setFromUserName(toUserName);

musicMessage.setToUserName(fromUserName);

musicMessage.setMsgType(MESSAGE_MUSIC);

musicMessage.setCreateTime(new Date().getTime());

musicMessage.setMusic(music);

message = musicMessageToXml(musicMessage);

return message;

}

    六、测试与运行

上述方法编写完成后,回到Servlet中调用方法,当回复5的时候,接收音乐:

运行效果如下:

使用Java语言开发微信公众平台(七)——音乐消息的回复的更多相关文章

  1. 使用Java语言开发微信公众平台(四)——图文消息的发送与响应

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

  2. 使用Java语言开发微信公众平台(三)——被关注回复与关键词回复

    在上一篇文章中,我们实现了文本消息的接收与响应.可以在用户发送任何内容的时候,回复一段固定的文字.本章节中,我们将对上一章节的代码进行适当的完善,同时实现[被关注回复与关键词回复]功能. 一.微信可提 ...

  3. 使用Java语言开发微信公众平台(五)——被关注回复与关键词回复

      在上一篇文章中,我们实现了文本消息的接收与响应.可以在用户发送任何内容的时候,回复一段固定的文字.本章节中,我们将对上一章节的代码进行适当的完善,同时实现[被关注回复与关键词回复]功能. 一.微信 ...

  4. 使用Java语言开发微信公众平台(五)——获取access_token

    在前四期的文章中,我们分别学习了"环境搭建与开发接入"."文本消息的接收与响应"."被关注回复与关键词回复"."图文消息的发送与响 ...

  5. 使用Java语言开发微信公众平台(六)

    在上一节课程中,我们来学习了微信公众平台最基础的一个接口--access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的access_t ...

  6. 使用Java语言开发微信公众平台(六)——获取access_token

             在前四期的文章中,我们分别学习了“环境搭建与开发接入”.“文本消息的接收与响应”.“被关注回复与关键词回复”.“图文消息的发送与响应”等环节.那么,从本篇博文开始,我们将进去更高级的 ...

  7. 使用Java语言开发微信公众平台(三)

            在上一节课程中,我们来学习了微信公众平台最基础的一个接口——access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的 ...

  8. 使用Java语言开发微信公众平台(八)——自定义菜单功能

    随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能.今天,我们来学习更加高大上,也更加重要的自定义菜单功能. 一.了解自定义菜单 自定义菜单是微信公众平台最常用也是最重要的功能之一.根据微信 ...

  9. PHP语言开发微信公众平台(订阅号)之注册

    1.百度搜索"微信公众平台" 2.选择微信公众平台官网并单击打开 3.进入官网页面,单击 "立即注册" 进入注册页面 4.进入注册页面,单击订阅号 5.进入订阅 ...

随机推荐

  1. Omi架构与React Fiber

    原文链接-https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架在架构设计的时候就决定把update的控制权交给了开发者,视灵 ...

  2. QT Creator 快速入门教程 读书笔记(三)

    一   信号和槽 GUI 程序除了要绘制控件,还要响应系统和用户事件,例如重绘.绘制完成.点击鼠标.敲击键盘等.当事件发生时,UI 会产生相应的变化,让用户直观地看到. 大部分编程(例如Win SDK ...

  3. iOS 应用关于弥补安全优化问题

    1.log输出会被中奖者截获,暴露信息,影响app得性能 在工程里面的pch文件加入以下代码 // 调试状态 #define LMLog(...) NSLog(__VA_ARGS__) #else / ...

  4. Linux环境下的IDE,极大提升编程效率

    "一个真正的程序员是不用IDE(译者注:集成开发环境)的,他们都是用带着某某插件的文本编辑器来写代码."我们总能在某些地方听到此类观点.然 而,尽管越来越多的人同意这样的观点,但是 ...

  5. 数位dp——hud3652

    B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  6. 老李分享:loadrunner 的86401错误

    老李分享:loadrunner 的86401错误   系统和软件配置: os:windows 2003loadruner版本:LoadRunner11loadrunner:协议:SMTP协议并发数:2 ...

  7. Java Level 2 学习的八大名著

    Java Level 2 学习的八大名著 前段时间有几天难得的假期,于是把自己认为Java技术栈中的精华总结了一下,但是一直没有时间写下来,今天终于得空希望本文可以对大家有所启发.通过多个实际项目的沉 ...

  8. JDBC基础学习(二)—PreparedStatement

    一.PreparedStatement介绍     在SQL中包含特殊字符或SQL的关键字(如: ' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用P ...

  9. 微信小程序,前端大梦想(二)

    微信小程序的视图与渲染  今天我们从四个方面来了解小程序:   •组件的基本使用  •数据绑定  •渲染标签  •模板的使用     一.组件的基本使用:  微信小程序为我们的开发提供了丰富的UI组件 ...

  10. 使用点击二分图计算query-document的相关性

    之前的博客中已经介绍了Ranking Relevance的一些基本情况(Click Behavior,和Text Match):http://www.cnblogs.com/bentuwuying/p ...