diff --git a/README.md b/README.md index 1c336ee1..3a23be02 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ weixin4j 接下来 ------ +* 企业号消息服务 + * 公众号第三方服务应用 * 硬件设备 & 摇一摇周边 diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml index 42e111c0..e62f2e22 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml @@ -899,7 +899,120 @@ 85002 - 包含敏感词 + 包含不合法的词语 + + + + 86001 + 不合法的会话ID + + + 86003 + 不存在的会话ID + + + 86004 + 不合法的会话名 + + + 86005 + 不合法的会话管理员 + + + 86006 + 不合法的成员列表大小 + + + 86007 + 不存在的成员 + + + 86101 + 需要会话管理员权限 + + + 86201 + 缺少会话ID + + + 86202 + 缺少会话名 + + + 86203 + 缺少会话管理员 + + + 86204 + 缺少成员 + + + 86205 + 非法的会话ID长度 + + + 86206 + 非法的会话ID数值 + + + 86207 + 会话管理员不在用户列表中 + + + 86208 + 消息服务未开启 + + + 86209 + 缺少操作者 + + + 86210 + 缺少会话参数 + + + 86211 + 缺少会话类型(单聊或者群聊) + + + 86213 + 缺少发件人 + + + 86214 + 非法的会话类型 + + + 86215 + 会话已存在 + + + 86216 + 非法会话成员 + + + 86217 + 会话操作者不在成员列表中 + + + 86218 + 非法会话发件人 + + + 86219 + 非法会话收件人 + + + 86220 + 非法会话操作者 + + + 86221 + 单聊模式下,发件人与收件人不能为同一人 + + + 86222 + 不允许消息服务访问的API diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Article.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Article.java index 57a815ac..552348f8 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Article.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Article.java @@ -4,6 +4,7 @@ import java.io.Serializable; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -33,7 +34,7 @@ public class Article implements Serializable { /** * 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 */ - @JSONField(name = "picurl") + @JSONField(name = "pic_url") @XmlElement(name = "PicUrl") private String picUrl; /** @@ -42,7 +43,11 @@ public class Article implements Serializable { @XmlElement(name = "Url") private String url; - public Article(String title, String desc, String picUrl, String url) { + @JSONCreator + public Article(@JSONField(name = "title") String title, + @JSONField(name = "description") String desc, + @JSONField(name = "pic_url") String picUrl, + @JSONField(name = "url") String url) { this.title = title; this.desc = desc; this.picUrl = picUrl; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java index f0025547..d62bc5b7 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -32,7 +33,8 @@ public class Card implements MassTuple { @XmlElement(name = "CardId") private String cardId; - public Card(String cardId) { + @JSONCreator + public Card(@JSONField(name = "card_id") String cardId) { this.cardId = cardId; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java index 407edbd2..a6c24055 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -32,7 +33,8 @@ public class File implements NotifyTuple { @XmlElement(name = "MediaId") private String mediaId; - public File(String mediaId) { + @JSONCreator + public File(@JSONField(name = "media_id") String mediaId) { this.mediaId = mediaId; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java index f4e1a0d1..d32e3b67 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -32,7 +33,8 @@ public class Image implements MassTuple, NotifyTuple { @XmlElement(name = "MediaId") private String mediaId; - public Image(String mediaId) { + @JSONCreator + public Image(@JSONField(name = "media_id")String mediaId) { this.mediaId = mediaId; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java index 99b7a7df..95cdec8e 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import java.io.Serializable; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -57,7 +58,10 @@ public class MpArticle implements Serializable { @JSONField(name = "cover_url") private String coverUrl; - public MpArticle(String thumbMediaId, String title, String content) { + @JSONCreator + public MpArticle(@JSONField(name = "thumb_media_id") String thumbMediaId, + @JSONField(name = "title") String title, + @JSONField(name = "content") String content) { this.thumbMediaId = thumbMediaId; this.title = title; this.content = content; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpNews.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpNews.java index 6bafa46f..54670afb 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpNews.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpNews.java @@ -43,7 +43,6 @@ public class MpNews implements MassTuple, NotifyTuple { /** * 图文列表 */ - @JSONField(serialize = false) @XmlTransient private LinkedList articles; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java index 60e76462..4600e6f2 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -32,7 +33,8 @@ public class MpVideo implements MassTuple { @XmlElement(name = "MediaId") private String mediaId; - public MpVideo(String mediaId) { + @JSONCreator + public MpVideo(@JSONField(name = "media_id") String mediaId) { this.mediaId = mediaId; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java index 5dee0a52..de82ba80 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java @@ -2,6 +2,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -39,13 +40,13 @@ public class Music implements NotifyTuple { /** * 音乐链接 */ - @JSONField(name = "musicurl") + @JSONField(name = "music_url") @XmlElement(name = "MusicUrl") private String musicUrl; /** * 高质量音乐链接,WIFI环境优先使用该链接播放音乐 */ - @JSONField(name = "hqmusicurl") + @JSONField(name = "hq_music_url") @XmlElement(name = "HQMusicUrl") private String hqMusicUrl; /** @@ -55,12 +56,16 @@ public class Music implements NotifyTuple { @XmlElement(name = "ThumbMediaId") private String thumbMediaId; - public Music(String thumbMediaId) { + @JSONCreator + public Music(@JSONField(name = "thumb_media_id") String thumbMediaId) { this.thumbMediaId = thumbMediaId; } - public Music(String title, String desc, String musicUrl, String hqMusicUrl, - String thumbMediaId) { + public Music(@JSONField(name = "title") String title, + @JSONField(name = "description") String desc, + @JSONField(name = "music_url") String musicUrl, + @JSONField(name = "hq_music_url") String hqMusicUrl, + @JSONField(name = "thumb_media_id") String thumbMediaId) { this.title = title; this.desc = desc; this.musicUrl = musicUrl; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java index c75744d2..77beabd7 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java @@ -1,5 +1,7 @@ package com.foxinmy.weixin4j.tuple; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; /** * 文本对象 @@ -27,7 +29,8 @@ public class Text implements MassTuple, NotifyTuple { */ private String content; - public Text(String content) { + @JSONCreator + public Text(@JSONField(name = "content") String content) { this.content = content; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java index 4e30195f..2b223d6f 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java @@ -3,6 +3,7 @@ package com.foxinmy.weixin4j.tuple; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; +import com.alibaba.fastjson.annotation.JSONCreator; import com.alibaba.fastjson.annotation.JSONField; /** @@ -50,19 +51,37 @@ public class Video implements NotifyTuple { @XmlElement(name = "Description") private String desc; - public Video(String mediaId) { + @JSONCreator + public Video(@JSONField(name = "media_id") String mediaId) { this.mediaId = mediaId; } + /** + * 公众平台 + * + * @param mediaId + * @param thumbMediaId + */ public Video(String mediaId, String thumbMediaId) { this(mediaId, thumbMediaId, null, null); } + /** + * 企业号 + * + * @param mediaId + * @param title + * @param desc + */ public Video(String mediaId, String title, String desc) { this(mediaId, null, title, desc); } - public Video(String mediaId, String thumbMediaId, String title, String desc) { + @JSONCreator + public Video(@JSONField(name = "media_id") String mediaId, + @JSONField(name = "thumb_media_id") String thumbMediaId, + @JSONField(name = "title") String title, + @JSONField(name = "description") String desc) { this.mediaId = mediaId; this.thumbMediaId = thumbMediaId; this.title = title; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Voice.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Voice.java index bdcb4e09..cfa1bec0 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Voice.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Voice.java @@ -1,5 +1,8 @@ package com.foxinmy.weixin4j.tuple; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; + /** * 语音对象 *

@@ -21,7 +24,8 @@ public class Voice extends Image implements NotifyTuple { return "voice"; } - public Voice(String mediaId) { + @JSONCreator + public Voice(@JSONField(name = "media_id") String mediaId) { super(mediaId); } } diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java index 6be16a98..58f0344e 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java @@ -65,6 +65,9 @@ public class NotifyApi extends MpApi { throws WeixinException { NotifyTuple tuple = notify.getTuple(); String msgtype = tuple.getMessageType(); + if ("mpnews".equals(msgtype)) { + throw new WeixinException("only support news message"); + } JSONObject obj = new JSONObject(); obj.put("touser", notify.getTouser()); obj.put("msgtype", msgtype); diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/message/NotifyMessage.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/message/NotifyMessage.java index b1ca4bec..871c4cc2 100644 --- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/message/NotifyMessage.java +++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/message/NotifyMessage.java @@ -38,10 +38,9 @@ public class NotifyMessage implements Serializable { /** * 消息对象 */ - @JSONField(serialize = false) private NotifyTuple tuple; /** - * id参数 + * 发送对象 */ @JSONField(serialize = false) private IdParameter target;