音乐消息的回复

也是通过新增临时素材那个接口上传语音文件或者是视频文件就可以获取MediaId,但是要注意微信对语音文件或者是视频文件以及上节所说的图片文件做了大小的限制

 直接在上一节的基础上修改媒体文件的类型为thumb,然后还是把D盘那张imooc.jpg图片作为缩略图上传,结果报错了:不合法的文件大小

 他妹的缩略图的大小不可以超过64KB

而我的本地图片大小是72KB

 再次运行WeixinTest.java,报了另外一种错误

上传媒体文件之后微信后台新增临时素材接口返回的JSON格式的数据中的一个字段不是media_id而是thumb_media_id.这就很有问题了,这也是微信公众号开发文档的一个坑吧。因为开发文档也没有说明根据上传的媒体文件类型的不同它这个media_id也会不同

 修改WeixinUtil.java中的代码再次运行WeixinTest.java

就拿到这个缩略图的media_id(其实是thumb_media_id)。下一步就可以进行音乐消息的组装了。

 音乐消息的组装根据回复音乐消息返回的一段XML格式的数据的字段来创建对应的Java Bean

输入4是无法提供服务

遇到提示“无法提供服务,请稍后再试”,这个的。先看看url写的对不对,在网页上能不能播放。重点来了在开发文档表格里面“MusicURL”这个元素和"<MusicUrl>"(xml中)是不一样的,如果你是MusicURL这么写的就会报“无法提供服务,请稍后再试”,所以要是确定url没有问题就把MusicURL改成MusicUrl,就没有问题了

首先我的项目里面的音乐文件在浏览器是可以播放的

后来发现Music.java中的一个字段(描述)写错了

修改之后重新提交代码果然是这个错误

下面贴一下主要的代码吧:

WexinTest.java

package com.imooc.test;

import java.io.IOException;

import com.imooc.po.AccessTocken;
import com.imooc.util.WeixinUtil;

public class WeixinTest {
public static void main(String[] args) {
AccessTocken token = WeixinUtil.getAccessTocken();
System.out.println("票据:"+token.getToken());
System.out.println("有效时间:"+token.getExpiresIn());

String path = "D:/imooc.jpg";
try {
//String mediaId = WeixinUtil.upload(path,token.getToken(),"image");
String mediaId = WeixinUtil.upload(path,token.getToken(),"thumb");//在上一节的基础上把媒体文件的类型修改一下就可以了
//上传图片的缩略图,图片还是这张图片
//因为这张图片的大小也没有超过微信后台对缩略图的限制
System.out.println(mediaId);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Music.java

package com.imooc.po;

public class Music {
private String Title;
//private String Descripption;//描述写错了
private String Description;
private String MusicUrl;
private String ThumbMediaId;
private String HQMusicUrl;
public String getHQMusicUrl() {
return HQMusicUrl;
}
public void setHQMusicUrl(String hQMusicUrl) {
HQMusicUrl = hQMusicUrl;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescripption() {
return Description;
}
public void setDescription(String descripption) {
Description = descripption;
}
public String getMusicUrl() {
return MusicUrl;
}
public void setMusicUrl(String musicUrl) {
MusicUrl = musicUrl;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}

}

MusicMessage.java

package com.imooc.po;

public class MusicMessage extends BaseMessage{//把公用的四个参数继承过来:CreateTime FromUserName ToUserName MsgType
private Music Music;

public Music getMusic() {
return Music;
}

public void setMusic(Music music) {
Music = music;
}

}

WexinUtil.java

MessageUtil.java

/**
* 把实体对象(音乐消息)转成XML
* @param musicMessage
* @return
*/
public static String musicMessageToXml(MusicMessage musicMessage){
XStream xstream = new XStream();
xstream.alias("xml", musicMessage.getClass());
return xstream.toXML(musicMessage);
}

/**
* 音乐消息的组装
* @param toUserName
* @param fromUserName
* @return
*/
public static String initMusicMessage(String toUserName,String fromUserName){
String message = null;
Music music = new Music();
music.setThumbMediaId("NxoU0P6ioUUvmVmK-ibhbjH6cnGi5gxbIvP3Q-cA3_wW7oTID-iGoyHs4O8zH9Ei");
music.setTitle("see you again");//设置标题
music.setDescription("速7片尾曲");//描述
music.setMusicUrl("http://wx2017.duapp.com/beifeng/resource/李健-贝加尔湖畔.mp3");//部署在百度云的完整的服务器文件路径
//要确认一下这个音乐文件的路径在浏览器可以播放
music.setHQMusicUrl("http://wx2017.duapp.com/beifeng/resource/李健-贝加尔湖畔.mp3");
MusicMessage musicMessage = new MusicMessage();
musicMessage.setCreateTime(new Date().getTime());
musicMessage.setFromUserName(toUserName);
musicMessage.setToUserName(fromUserName);
musicMessage.setMsgType(MESSAGE_MUSIC);//消息回复的类型是音乐消息
musicMessage.setMusic(music);
message = musicMessageToXml(musicMessage);
return message;

}

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6285793.html