浏览代码

直接发送消息的支持

master
Daniel Qian 10 年前
父节点
当前提交
258f35a192
共有 23 个文件被更改,包括 291 次插入190 次删除
  1. +2
    -44
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxConsts.java
  2. +6
    -6
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpService.java
  3. +9
    -10
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpServiceImpl.java
  4. +13
    -0
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxInMemoryCpConfigStorage.java
  5. +3
    -3
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpDepartment.java
  6. +38
    -7
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpMessage.java
  7. +0
    -20
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/BaseBuilder.java
  8. +42
    -0
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/BaseBuilder.java
  9. +31
    -0
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/FileBuilder.java
  10. +4
    -4
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/ImageBuilder.java
  11. +4
    -4
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/MusicBuilder.java
  12. +6
    -6
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/NewsBuilder.java
  13. +4
    -4
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/TextBuilder.java
  14. +4
    -4
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/VideoBuilder.java
  15. +4
    -4
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/VoiceBuilder.java
  16. +22
    -6
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpMessageGsonAdapter.java
  17. +5
    -5
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxGroupGsonAdapter.java
  18. +2
    -2
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxGsonBuilder.java
  19. +31
    -8
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/ApiTestModule.java
  20. +42
    -0
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCpMessageAPITest.java
  21. +0
    -33
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCustomMessageAPITest.java
  22. +5
    -5
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxGroupAPITest.java
  23. +14
    -15
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxCpMessageTest.java

+ 2
- 44
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxConsts.java 查看文件

@@ -17,7 +17,6 @@ public class WxConsts {
public static final String XML_MSG_LOCATION = "location"; public static final String XML_MSG_LOCATION = "location";
public static final String XML_MSG_LINK = "link"; public static final String XML_MSG_LINK = "link";
public static final String XML_MSG_EVENT = "event"; public static final String XML_MSG_EVENT = "event";
public static final String XML_TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
/////////////////////// ///////////////////////
// 客服消息的消息类型 // 客服消息的消息类型
@@ -28,49 +27,8 @@ public class WxConsts {
public static final String CUSTOM_MSG_VIDEO = "video"; public static final String CUSTOM_MSG_VIDEO = "video";
public static final String CUSTOM_MSG_MUSIC = "music"; public static final String CUSTOM_MSG_MUSIC = "music";
public static final String CUSTOM_MSG_NEWS = "news"; public static final String CUSTOM_MSG_NEWS = "news";
///////////////////////
// 群发消息的消息类型
///////////////////////
public static final String MASS_MSG_NEWS = "mpnews";
public static final String MASS_MSG_TEXT = "text";
public static final String MASS_MSG_VOICE = "voice";
public static final String MASS_MSG_IMAGE = "image";
public static final String MASS_MSG_VIDEO = "mpvideo";
///////////////////////
// 群发消息后微信端推送给服务器的反馈消息
///////////////////////
public static final String MASS_ST_SUCCESS = "send success";
public static final String MASS_ST_FAIL = "send fail";
public static final String MASS_ST_涉嫌广告 = "err(10001)";
public static final String MASS_ST_涉嫌政治 = "err(20001)";
public static final String MASS_ST_涉嫌社会 = "err(20004)";
public static final String MASS_ST_涉嫌色情 = "err(20002)";
public static final String MASS_ST_涉嫌违法犯罪 = "err(20006)";
public static final String MASS_ST_涉嫌欺诈 = "err(20008)";
public static final String MASS_ST_涉嫌版权 = "err(20013)";
public static final String MASS_ST_涉嫌互推_互相宣传 = "err(22000)";
public static final String MASS_ST_涉嫌其他 = "err(21000)";
/**
* 群发反馈消息代码所对应的文字描述
*/
public static final Map<String, String> MASS_ST_2_DESC = new HashMap<String, String>();
static {
MASS_ST_2_DESC.put(MASS_ST_SUCCESS, "发送成功");
MASS_ST_2_DESC.put(MASS_ST_FAIL, "发送失败");
MASS_ST_2_DESC.put(MASS_ST_涉嫌广告, "涉嫌广告");
MASS_ST_2_DESC.put(MASS_ST_涉嫌政治, "涉嫌政治");
MASS_ST_2_DESC.put(MASS_ST_涉嫌社会, "涉嫌社会");
MASS_ST_2_DESC.put(MASS_ST_涉嫌色情, "涉嫌色情");
MASS_ST_2_DESC.put(MASS_ST_涉嫌违法犯罪, "涉嫌违法犯罪");
MASS_ST_2_DESC.put(MASS_ST_涉嫌欺诈, "涉嫌欺诈");
MASS_ST_2_DESC.put(MASS_ST_涉嫌版权, "涉嫌版权");
MASS_ST_2_DESC.put(MASS_ST_涉嫌互推_互相宣传, "涉嫌互推_互相宣传");
MASS_ST_2_DESC.put(MASS_ST_涉嫌其他, "涉嫌其他");
}
public static final String CUSTOM_MSG_FILE = "file";

/////////////////////// ///////////////////////
// 微信端推送过来的事件类型 // 微信端推送过来的事件类型
/////////////////////// ///////////////////////


+ 6
- 6
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpService.java 查看文件

@@ -6,7 +6,7 @@ import java.io.InputStream;
import java.util.List; import java.util.List;


import me.chanjar.weixin.enterprise.bean.*; import me.chanjar.weixin.enterprise.bean.*;
import me.chanjar.weixin.enterprise.bean.WxDepartment;
import me.chanjar.weixin.enterprise.bean.WxCpDepartment;
import me.chanjar.weixin.enterprise.bean.result.WxMediaUploadResult; import me.chanjar.weixin.enterprise.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.enterprise.bean.result.WxUser; import me.chanjar.weixin.enterprise.bean.result.WxUser;
import me.chanjar.weixin.enterprise.exception.WxErrorException; import me.chanjar.weixin.enterprise.exception.WxErrorException;
@@ -91,7 +91,7 @@ public interface WxCpService {
* @param message * @param message
* @throws WxErrorException * @throws WxErrorException
*/ */
public void messageSend(WxCustomMessage message) throws WxErrorException;
public void messageSend(WxCpMessage message) throws WxErrorException;
/** /**
* <pre> * <pre>
@@ -131,7 +131,7 @@ public interface WxCpService {
* @param name 分组名字(30个字符以内) * @param name 分组名字(30个字符以内)
* @throws WxErrorException * @throws WxErrorException
*/ */
public WxDepartment departmentCreate(String name) throws WxErrorException;
public WxCpDepartment departmentCreate(String name) throws WxErrorException;
/** /**
* <pre> * <pre>
@@ -141,7 +141,7 @@ public interface WxCpService {
* @return * @return
* @throws WxErrorException * @throws WxErrorException
*/ */
public List<WxDepartment> departmentGet() throws WxErrorException;
public List<WxCpDepartment> departmentGet() throws WxErrorException;
/** /**
* <pre> * <pre>
@@ -153,7 +153,7 @@ public interface WxCpService {
* @param group 要更新的group,group的id,name必须设置 * @param group 要更新的group,group的id,name必须设置
* @throws WxErrorException * @throws WxErrorException
*/ */
public void departmentUpdate(WxDepartment group) throws WxErrorException;
public void departmentUpdate(WxCpDepartment group) throws WxErrorException;


/** /**
* <pre> * <pre>
@@ -163,7 +163,7 @@ public interface WxCpService {
* @param department * @param department
* @throws WxErrorException * @throws WxErrorException
*/ */
public void departmentDelete(WxDepartment department) throws WxErrorException;
public void departmentDelete(WxCpDepartment department) throws WxErrorException;


public void userCreate(WxUser user) throws WxErrorException; public void userCreate(WxUser user) throws WxErrorException;




+ 9
- 10
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpServiceImpl.java 查看文件

@@ -9,7 +9,6 @@ import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;


import me.chanjar.weixin.enterprise.bean.*; import me.chanjar.weixin.enterprise.bean.*;
import me.chanjar.weixin.enterprise.util.crypto.WxCryptUtil;
import me.chanjar.weixin.enterprise.util.http.SimpleGetRequestExecutor; import me.chanjar.weixin.enterprise.util.http.SimpleGetRequestExecutor;
import me.chanjar.weixin.enterprise.util.crypto.SHA1; import me.chanjar.weixin.enterprise.util.crypto.SHA1;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -20,7 +19,7 @@ import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;


import me.chanjar.weixin.enterprise.bean.WxDepartment;
import me.chanjar.weixin.enterprise.bean.WxCpDepartment;
import me.chanjar.weixin.enterprise.bean.result.WxError; import me.chanjar.weixin.enterprise.bean.result.WxError;
import me.chanjar.weixin.enterprise.bean.result.WxMediaUploadResult; import me.chanjar.weixin.enterprise.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.enterprise.bean.result.WxUser; import me.chanjar.weixin.enterprise.bean.result.WxUser;
@@ -98,8 +97,8 @@ public class WxCpServiceImpl implements WxCpService {
} }
} }


public void messageSend(WxCustomMessage message) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send";
public void messageSend(WxCpMessage message) throws WxErrorException {
String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send";
execute(new SimplePostRequestExecutor(), url, message.toJson()); execute(new SimplePostRequestExecutor(), url, message.toJson());
} }


@@ -143,7 +142,7 @@ public class WxCpServiceImpl implements WxCpService {
} }




public WxDepartment departmentCreate(String name) throws WxErrorException {
public WxCpDepartment departmentCreate(String name) throws WxErrorException {
// TODO // TODO
String url = "https://api.weixin.qq.com/cgi-bin/groups/create"; String url = "https://api.weixin.qq.com/cgi-bin/groups/create";
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
@@ -155,16 +154,16 @@ public class WxCpServiceImpl implements WxCpService {
new SimplePostRequestExecutor(), new SimplePostRequestExecutor(),
url, url,
json.toString()); json.toString());
return WxDepartment.fromJson(responseContent);
return WxCpDepartment.fromJson(responseContent);
} }


public void departmentUpdate(WxDepartment group) throws WxErrorException {
public void departmentUpdate(WxCpDepartment group) throws WxErrorException {
// TODO // TODO
String url = "https://api.weixin.qq.com/cgi-bin/groups/update"; String url = "https://api.weixin.qq.com/cgi-bin/groups/update";
execute(new SimplePostRequestExecutor(), url, group.toJson()); execute(new SimplePostRequestExecutor(), url, group.toJson());
} }


public List<WxDepartment> departmentGet() throws WxErrorException {
public List<WxCpDepartment> departmentGet() throws WxErrorException {
// TODO // TODO
String url = "https://api.weixin.qq.com/cgi-bin/groups/get"; String url = "https://api.weixin.qq.com/cgi-bin/groups/get";
String responseContent = execute(new SimpleGetRequestExecutor(), url, null); String responseContent = execute(new SimpleGetRequestExecutor(), url, null);
@@ -174,11 +173,11 @@ public class WxCpServiceImpl implements WxCpService {
*/ */
JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent)));
return WxGsonBuilder.INSTANCE.create() return WxGsonBuilder.INSTANCE.create()
.fromJson(tmpJsonElement.getAsJsonObject().get("groups"), new TypeToken<List<WxDepartment>>() {
.fromJson(tmpJsonElement.getAsJsonObject().get("groups"), new TypeToken<List<WxCpDepartment>>() {
}.getType()); }.getType());
} }


public void departmentDelete(WxDepartment department) throws WxErrorException {
public void departmentDelete(WxCpDepartment department) throws WxErrorException {
// TODO // TODO


} }


+ 13
- 0
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxInMemoryCpConfigStorage.java 查看文件

@@ -82,4 +82,17 @@ public class WxInMemoryCpConfigStorage implements WxCpConfigStorage {
public void setAgentId(String agentId) { public void setAgentId(String agentId) {
this.agentId = agentId; this.agentId = agentId;
} }

@Override
public String toString() {
return "WxInMemoryCpConfigStorage{" +
"corpId='" + corpId + '\'' +
", corpSecret='" + corpSecret + '\'' +
", token='" + token + '\'' +
", accessToken='" + accessToken + '\'' +
", aesKey='" + aesKey + '\'' +
", agentId='" + agentId + '\'' +
", expiresIn=" + expiresIn +
'}';
}
} }

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxDepartment.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpDepartment.java 查看文件

@@ -7,7 +7,7 @@ import me.chanjar.weixin.enterprise.util.json.WxGsonBuilder;
* @author Daniel Qian * @author Daniel Qian
* *
*/ */
public class WxDepartment {
public class WxCpDepartment {


private long id = -1; private long id = -1;
private String name; private String name;
@@ -31,8 +31,8 @@ public class WxDepartment {
this.count = count; this.count = count;
} }
public static WxDepartment fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxDepartment.class);
public static WxCpDepartment fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxCpDepartment.class);
} }
public String toJson() { public String toJson() {

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCustomMessage.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpMessage.java 查看文件

@@ -4,12 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.custombuilder.ImageBuilder;
import me.chanjar.weixin.enterprise.bean.custombuilder.MusicBuilder;
import me.chanjar.weixin.enterprise.bean.custombuilder.NewsBuilder;
import me.chanjar.weixin.enterprise.bean.custombuilder.TextBuilder;
import me.chanjar.weixin.enterprise.bean.custombuilder.VideoBuilder;
import me.chanjar.weixin.enterprise.bean.custombuilder.VoiceBuilder;
import me.chanjar.weixin.enterprise.bean.messagebuilder.*;
import me.chanjar.weixin.enterprise.util.json.WxGsonBuilder; import me.chanjar.weixin.enterprise.util.json.WxGsonBuilder;


/** /**
@@ -17,9 +12,12 @@ import me.chanjar.weixin.enterprise.util.json.WxGsonBuilder;
* @author Daniel Qian * @author Daniel Qian
* *
*/ */
public class WxCustomMessage {
public class WxCpMessage {


private String toUser; private String toUser;
private String toParty;
private String toTag;
private String agentId;
private String msgType; private String msgType;
private String content; private String content;
private String mediaId; private String mediaId;
@@ -36,6 +34,31 @@ public class WxCustomMessage {
public void setToUser(String toUser) { public void setToUser(String toUser) {
this.toUser = toUser; this.toUser = toUser;
} }

public String getToParty() {
return toParty;
}

public void setToParty(String toParty) {
this.toParty = toParty;
}

public String getToTag() {
return toTag;
}

public void setToTag(String toTag) {
this.toTag = toTag;
}

public String getAgentId() {
return agentId;
}

public void setAgentId(String agentId) {
this.agentId = agentId;
}

public String getMsgType() { public String getMsgType() {
return msgType; return msgType;
} }
@@ -189,5 +212,13 @@ public class WxCustomMessage {
public static NewsBuilder NEWS() { public static NewsBuilder NEWS() {
return new NewsBuilder(); return new NewsBuilder();
} }

/**
* 获得文件消息builder
* @return
*/
public static FileBuilder FILE() {
return new FileBuilder();
}
} }

+ 0
- 20
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/BaseBuilder.java 查看文件

@@ -1,20 +0,0 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;

import me.chanjar.weixin.enterprise.bean.WxCustomMessage;

public class BaseBuilder<T> {
protected String msgType;
protected String toUser;

public T toUser(String toUser) {
this.toUser = toUser;
return (T) this;
}

public WxCustomMessage build() {
WxCustomMessage m = new WxCustomMessage();
m.setMsgType(this.msgType);
m.setToUser(this.toUser);
return m;
}
}

+ 42
- 0
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/BaseBuilder.java 查看文件

@@ -0,0 +1,42 @@
package me.chanjar.weixin.enterprise.bean.messagebuilder;

import me.chanjar.weixin.enterprise.bean.WxCpMessage;

public class BaseBuilder<T> {
protected String msgType;
protected String agentId;
protected String toUser;
protected String toParty;
protected String toTag;

public T agentId(String agentId) {
this.agentId = agentId;
return (T) this;
}

public T toUser(String toUser) {
this.toUser = toUser;
return (T) this;
}

public T toParty(String toParty) {
this.toParty = toParty;
return (T) this;
}

public T toTag(String toTag) {
this.toTag = toTag;
return (T) this;
}

public WxCpMessage build() {
WxCpMessage m = new WxCpMessage();
m.setAgentId(this.agentId);
m.setMsgType(this.msgType);
m.setToUser(this.toUser);
m.setToParty(this.toParty);
m.setToTag(this.toTag);
return m;
}

}

+ 31
- 0
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/FileBuilder.java 查看文件

@@ -0,0 +1,31 @@
package me.chanjar.weixin.enterprise.bean.messagebuilder;

import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;

/**
* 获得消息builder
* <pre>
* 用法: WxCustomMessage m = WxCustomMessage.FILE().mediaId(...).toUser(...).build();
* </pre>
* @author Daniel Qian
*
*/
public final class FileBuilder extends BaseBuilder<FileBuilder> {
private String mediaId;

public FileBuilder() {
this.msgType = WxConsts.CUSTOM_MSG_FILE;
}

public FileBuilder mediaId(String media_id) {
this.mediaId = media_id;
return this;
}

public WxCpMessage build() {
WxCpMessage m = super.build();
m.setMediaId(this.mediaId);
return m;
}
}

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/ImageBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/ImageBuilder.java 查看文件

@@ -1,7 +1,7 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 获得消息builder * 获得消息builder
@@ -23,8 +23,8 @@ public final class ImageBuilder extends BaseBuilder<ImageBuilder> {
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setMediaId(this.mediaId); m.setMediaId(this.mediaId);
return m; return m;
} }

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/MusicBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/MusicBuilder.java 查看文件

@@ -1,7 +1,7 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 音乐消息builder * 音乐消息builder
@@ -52,8 +52,8 @@ public final class MusicBuilder extends BaseBuilder<MusicBuilder> {
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setMusicUrl(this.musicUrl); m.setMusicUrl(this.musicUrl);
m.setHqMusicUrl(this.hqMusicUrl); m.setHqMusicUrl(this.hqMusicUrl);
m.setTitle(title); m.setTitle(title);

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/NewsBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/NewsBuilder.java 查看文件

@@ -1,10 +1,10 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 图文消息builder * 图文消息builder
@@ -17,19 +17,19 @@ import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
*/ */
public final class NewsBuilder extends BaseBuilder<NewsBuilder> { public final class NewsBuilder extends BaseBuilder<NewsBuilder> {


private List<WxCustomMessage.WxArticle> articles = new ArrayList<WxCustomMessage.WxArticle>();
private List<WxCpMessage.WxArticle> articles = new ArrayList<WxCpMessage.WxArticle>();
public NewsBuilder() { public NewsBuilder() {
this.msgType = WxConsts.CUSTOM_MSG_NEWS; this.msgType = WxConsts.CUSTOM_MSG_NEWS;
} }


public NewsBuilder addArticle(WxCustomMessage.WxArticle article) {
public NewsBuilder addArticle(WxCpMessage.WxArticle article) {
this.articles.add(article); this.articles.add(article);
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setArticles(this.articles); m.setArticles(this.articles);
return m; return m;
} }

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/TextBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/TextBuilder.java 查看文件

@@ -1,7 +1,7 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 文本消息builder * 文本消息builder
@@ -23,8 +23,8 @@ public final class TextBuilder extends BaseBuilder<TextBuilder> {
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setContent(this.content); m.setContent(this.content);
return m; return m;
} }

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/VideoBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/VideoBuilder.java 查看文件

@@ -1,7 +1,7 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 视频消息builder * 视频消息builder
@@ -47,8 +47,8 @@ public final class VideoBuilder extends BaseBuilder<VideoBuilder> {
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setMediaId(this.mediaId); m.setMediaId(this.mediaId);
m.setTitle(title); m.setTitle(title);
m.setDescription(description); m.setDescription(description);

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/custombuilder/VoiceBuilder.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/messagebuilder/VoiceBuilder.java 查看文件

@@ -1,7 +1,7 @@
package me.chanjar.weixin.enterprise.bean.custombuilder;
package me.chanjar.weixin.enterprise.bean.messagebuilder;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


/** /**
* 语音消息builder * 语音消息builder
@@ -23,8 +23,8 @@ public final class VoiceBuilder extends BaseBuilder<VoiceBuilder> {
return this; return this;
} }


public WxCustomMessage build() {
WxCustomMessage m = super.build();
public WxCpMessage build() {
WxCpMessage m = super.build();
m.setMediaId(this.mediaId); m.setMediaId(this.mediaId);
return m; return m;
} }

weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCustomMessageGsonAdapter.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpMessageGsonAdapter.java 查看文件

@@ -11,26 +11,36 @@ package me.chanjar.weixin.enterprise.util.json;
import java.lang.reflect.Type; import java.lang.reflect.Type;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.bean.WxCpMessage;


import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer; import com.google.gson.JsonSerializer;
import org.apache.commons.lang3.StringUtils;


/** /**
* *
* @author Daniel Qian * @author Daniel Qian
* *
*/ */
public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessage> {
public class WxCpMessageGsonAdapter implements JsonSerializer<WxCpMessage> {


public JsonElement serialize(WxCustomMessage message, Type typeOfSrc, JsonSerializationContext context) {
public JsonElement serialize(WxCpMessage message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject(); JsonObject messageJson = new JsonObject();
messageJson.addProperty("touser", message.getToUser());
messageJson.addProperty("agentid", message.getAgentId());
messageJson.addProperty("msgtype", message.getMsgType()); messageJson.addProperty("msgtype", message.getMsgType());

if (StringUtils.isNotBlank(message.getToUser())) {
messageJson.addProperty("touser", message.getToUser());
}
if (StringUtils.isNotBlank(message.getToParty())) {
messageJson.addProperty("toparty", message.getToUser());
}
if (StringUtils.isNotBlank(message.getToTag())) {
messageJson.addProperty("totag", message.getToUser());
}
if (WxConsts.CUSTOM_MSG_TEXT.equals(message.getMsgType())) { if (WxConsts.CUSTOM_MSG_TEXT.equals(message.getMsgType())) {
JsonObject text = new JsonObject(); JsonObject text = new JsonObject();
text.addProperty("content", message.getContent()); text.addProperty("content", message.getContent());
@@ -43,6 +53,12 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessag
messageJson.add("image", image); messageJson.add("image", image);
} }


if (WxConsts.CUSTOM_MSG_FILE.equals(message.getMsgType())) {
JsonObject image = new JsonObject();
image.addProperty("media_id", message.getMediaId());
messageJson.add("file", image);
}

if (WxConsts.CUSTOM_MSG_VOICE.equals(message.getMsgType())) { if (WxConsts.CUSTOM_MSG_VOICE.equals(message.getMsgType())) {
JsonObject voice = new JsonObject(); JsonObject voice = new JsonObject();
voice.addProperty("media_id", message.getMediaId()); voice.addProperty("media_id", message.getMediaId());
@@ -70,7 +86,7 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessag
if (WxConsts.CUSTOM_MSG_NEWS.equals(message.getMsgType())) { if (WxConsts.CUSTOM_MSG_NEWS.equals(message.getMsgType())) {
JsonArray articleJsonArray = new JsonArray(); JsonArray articleJsonArray = new JsonArray();
for (WxCustomMessage.WxArticle article : message.getArticles()) {
for (WxCpMessage.WxArticle article : message.getArticles()) {
JsonObject articleJson = new JsonObject(); JsonObject articleJson = new JsonObject();
articleJson.addProperty("title", article.getTitle()); articleJson.addProperty("title", article.getTitle());
articleJson.addProperty("description", article.getDescription()); articleJson.addProperty("description", article.getDescription());

+ 5
- 5
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxGroupGsonAdapter.java 查看文件

@@ -10,7 +10,7 @@ package me.chanjar.weixin.enterprise.util.json;


import java.lang.reflect.Type; import java.lang.reflect.Type;


import me.chanjar.weixin.enterprise.bean.WxDepartment;
import me.chanjar.weixin.enterprise.bean.WxCpDepartment;


import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer; import com.google.gson.JsonDeserializer;
@@ -25,9 +25,9 @@ import com.google.gson.JsonSerializer;
* @author Daniel Qian * @author Daniel Qian
* *
*/ */
public class WxGroupGsonAdapter implements JsonSerializer<WxDepartment>, JsonDeserializer<WxDepartment> {
public class WxGroupGsonAdapter implements JsonSerializer<WxCpDepartment>, JsonDeserializer<WxCpDepartment> {


public JsonElement serialize(WxDepartment group, Type typeOfSrc, JsonSerializationContext context) {
public JsonElement serialize(WxCpDepartment group, Type typeOfSrc, JsonSerializationContext context) {
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
JsonObject groupJson = new JsonObject(); JsonObject groupJson = new JsonObject();
groupJson.addProperty("name", group.getName()); groupJson.addProperty("name", group.getName());
@@ -37,8 +37,8 @@ public class WxGroupGsonAdapter implements JsonSerializer<WxDepartment>, JsonDes
return json; return json;
} }


public WxDepartment deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
WxDepartment group = new WxDepartment();
public WxCpDepartment deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
WxCpDepartment group = new WxCpDepartment();
JsonObject groupJson = json.getAsJsonObject(); JsonObject groupJson = json.getAsJsonObject();
if (json.getAsJsonObject().get("group") != null) { if (json.getAsJsonObject().get("group") != null) {
groupJson = json.getAsJsonObject().get("group").getAsJsonObject(); groupJson = json.getAsJsonObject().get("group").getAsJsonObject();


+ 2
- 2
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxGsonBuilder.java 查看文件

@@ -12,12 +12,12 @@ public class WxGsonBuilder {
static { static {
INSTANCE.disableHtmlEscaping(); INSTANCE.disableHtmlEscaping();
INSTANCE.registerTypeAdapter(WxCustomMessage.class, new WxCustomMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxCpMessage.class, new WxCpMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter()); INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
INSTANCE.registerTypeAdapter(WxMassNews.class, new WxMassNewsGsonAdapter()); INSTANCE.registerTypeAdapter(WxMassNews.class, new WxMassNewsGsonAdapter());
INSTANCE.registerTypeAdapter(WxMassGroupMessage.class, new WxMassMessageGsonAdapter()); INSTANCE.registerTypeAdapter(WxMassGroupMessage.class, new WxMassMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMassOpenIdsMessage.class, new WxMassOpenIdsMessageGsonAdapter()); INSTANCE.registerTypeAdapter(WxMassOpenIdsMessage.class, new WxMassOpenIdsMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxDepartment.class, new WxGroupGsonAdapter());
INSTANCE.registerTypeAdapter(WxCpDepartment.class, new WxGroupGsonAdapter());
INSTANCE.registerTypeAdapter(WxUser.class, new WxUserGsonAdapter()); INSTANCE.registerTypeAdapter(WxUser.class, new WxUserGsonAdapter());
INSTANCE.registerTypeAdapter(WxUserList.class, new WxUserListGsonAdapter()); INSTANCE.registerTypeAdapter(WxUserList.class, new WxUserListGsonAdapter());
INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter()); INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());


+ 31
- 8
weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/ApiTestModule.java 查看文件

@@ -42,20 +42,43 @@ public class ApiTestModule implements Module {
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public static class WxXmlCpConfigStorage extends WxInMemoryCpConfigStorage { public static class WxXmlCpConfigStorage extends WxInMemoryCpConfigStorage {
protected String openId;
protected String userId;


public String getOpenId() {
return openId;
protected String departmentId;

protected String tagId;

public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
} }
public void setOpenId(String openId) {
this.openId = openId;

public String getDepartmentId() {
return departmentId;
}

public void setDepartmentId(String departmentId) {
this.departmentId = departmentId;
} }

public String getTagId() {
return tagId;
}

public void setTagId(String tagId) {
this.tagId = tagId;
}

@Override @Override
public String toString() { public String toString() {
return "SimpleWxConfigProvider [corpId=" + corpId + ", corpSecret=" + corpSecret + ", accessToken=" + accessToken
+ ", expiresIn=" + expiresIn + ", token=" + token + ", openId=" + openId + "]";
return super.toString() + " > WxXmlCpConfigStorage{" +
"userId='" + userId + '\'' +
", departmentId='" + departmentId + '\'' +
", tagId='" + tagId + '\'' +
'}';
} }
} }
} }

+ 42
- 0
weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCpMessageAPITest.java 查看文件

@@ -0,0 +1,42 @@
package me.chanjar.weixin.enterprise.api;

import me.chanjar.weixin.enterprise.bean.WxCpMessage;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import me.chanjar.weixin.enterprise.exception.WxErrorException;

import com.google.inject.Inject;

/***
* 测试发送客服消息
* @author Daniel Qian
*
*/
@Test(groups="customMessageAPI", dependsOnGroups = "baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxCpMessageAPITest {

@Inject
protected WxCpServiceImpl wxService;

public void testSendCustomMessage() throws WxErrorException {
ApiTestModule.WxXmlCpConfigStorage configStorage = (ApiTestModule.WxXmlCpConfigStorage) wxService.wxCpConfigStorage;
WxCpMessage message1 = new WxCpMessage();
message1.setAgentId(configStorage.getAgentId());
message1.setMsgType(WxConsts.CUSTOM_MSG_TEXT);
message1.setToUser(configStorage.getUserId());
message1.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");
wxService.messageSend(message1);

WxCpMessage message2 = WxCpMessage
.TEXT()
.agentId(configStorage.getAgentId())
.toUser(configStorage.getUserId())
.content("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>")
.build();
wxService.messageSend(message2);

}

}

+ 0
- 33
weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCustomMessageAPITest.java 查看文件

@@ -1,33 +0,0 @@
package me.chanjar.weixin.enterprise.api;

import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import me.chanjar.weixin.enterprise.exception.WxErrorException;

import com.google.inject.Inject;

/***
* 测试发送客服消息
* @author Daniel Qian
*
*/
@Test(groups="customMessageAPI", dependsOnGroups = "baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxCustomMessageAPITest {

@Inject
protected WxCpServiceImpl wxService;

public void testSendCustomMessage() throws WxErrorException {
ApiTestModule.WxXmlCpConfigStorage configStorage = (ApiTestModule.WxXmlCpConfigStorage) wxService.wxCpConfigStorage;
WxCustomMessage message = new WxCustomMessage();
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT);
message.setToUser(configStorage.getOpenId());
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");

wxService.messageSend(message);
}

}

+ 5
- 5
weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxGroupAPITest.java 查看文件

@@ -2,7 +2,7 @@ package me.chanjar.weixin.enterprise.api;


import java.util.List; import java.util.List;


import me.chanjar.weixin.enterprise.bean.WxDepartment;
import me.chanjar.weixin.enterprise.bean.WxCpDepartment;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Guice; import org.testng.annotations.Guice;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@@ -23,19 +23,19 @@ public class WxGroupAPITest {
@Inject @Inject
protected WxCpServiceImpl wxService; protected WxCpServiceImpl wxService;


protected WxDepartment group;
protected WxCpDepartment group;
public void testGroupCreate() throws WxErrorException { public void testGroupCreate() throws WxErrorException {
WxDepartment res = wxService.departmentCreate("测试分组1");
WxCpDepartment res = wxService.departmentCreate("测试分组1");
Assert.assertEquals(res.getName(), "测试分组1"); Assert.assertEquals(res.getName(), "测试分组1");
} }


@Test(dependsOnMethods="testGroupCreate") @Test(dependsOnMethods="testGroupCreate")
public void testGroupGet() throws WxErrorException { public void testGroupGet() throws WxErrorException {
List<WxDepartment> groupList = wxService.departmentGet();
List<WxCpDepartment> groupList = wxService.departmentGet();
Assert.assertNotNull(groupList); Assert.assertNotNull(groupList);
Assert.assertTrue(groupList.size() > 0); Assert.assertTrue(groupList.size() > 0);
for (WxDepartment g : groupList) {
for (WxCpDepartment g : groupList) {
group = g; group = g;
Assert.assertNotNull(g.getName()); Assert.assertNotNull(g.getName());
} }


weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxCustomMessageTest.java → weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxCpMessageTest.java 查看文件

@@ -1,17 +1,16 @@
package me.chanjar.weixin.enterprise.bean; package me.chanjar.weixin.enterprise.bean;


import me.chanjar.weixin.enterprise.bean.WxCustomMessage;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;


import me.chanjar.weixin.enterprise.api.WxConsts; import me.chanjar.weixin.enterprise.api.WxConsts;
import me.chanjar.weixin.enterprise.bean.WxCustomMessage.WxArticle;
import me.chanjar.weixin.enterprise.bean.WxCpMessage.WxArticle;


@Test @Test
public class WxCustomMessageTest {
public class WxCpMessageTest {


public void testTextReply() { public void testTextReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_TEXT); reply.setMsgType(WxConsts.CUSTOM_MSG_TEXT);
reply.setContent("sfsfdsdf"); reply.setContent("sfsfdsdf");
@@ -19,12 +18,12 @@ public class WxCustomMessageTest {
} }
public void testTextBuild() { public void testTextBuild() {
WxCustomMessage reply = WxCustomMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
WxCpMessage reply = WxCpMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}"); Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
} }
public void testImageReply() { public void testImageReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_IMAGE); reply.setMsgType(WxConsts.CUSTOM_MSG_IMAGE);
reply.setMediaId("MEDIA_ID"); reply.setMediaId("MEDIA_ID");
@@ -32,12 +31,12 @@ public class WxCustomMessageTest {
} }
public void testImageBuild() { public void testImageBuild() {
WxCustomMessage reply = WxCustomMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
WxCpMessage reply = WxCpMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}"); Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
} }
public void testVoiceReply() { public void testVoiceReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_VOICE); reply.setMsgType(WxConsts.CUSTOM_MSG_VOICE);
reply.setMediaId("MEDIA_ID"); reply.setMediaId("MEDIA_ID");
@@ -45,12 +44,12 @@ public class WxCustomMessageTest {
} }
public void testVoiceBuild() { public void testVoiceBuild() {
WxCustomMessage reply = WxCustomMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
WxCpMessage reply = WxCpMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}"); Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
} }
public void testVideoReply() { public void testVideoReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_VIDEO); reply.setMsgType(WxConsts.CUSTOM_MSG_VIDEO);
reply.setMediaId("MEDIA_ID"); reply.setMediaId("MEDIA_ID");
@@ -61,12 +60,12 @@ public class WxCustomMessageTest {
} }
public void testVideoBuild() { public void testVideoBuild() {
WxCustomMessage reply = WxCustomMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build();
WxCpMessage reply = WxCpMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}"); Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}");
} }
public void testMusicReply() { public void testMusicReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_MUSIC); reply.setMsgType(WxConsts.CUSTOM_MSG_MUSIC);
reply.setThumbMediaId("MEDIA_ID"); reply.setThumbMediaId("MEDIA_ID");
@@ -78,7 +77,7 @@ public class WxCustomMessageTest {
} }
public void testMusicBuild() { public void testMusicBuild() {
WxCustomMessage reply = WxCustomMessage.MUSIC()
WxCpMessage reply = WxCpMessage.MUSIC()
.toUser("OPENID") .toUser("OPENID")
.title("TITLE") .title("TITLE")
.thumbMediaId("MEDIA_ID") .thumbMediaId("MEDIA_ID")
@@ -90,7 +89,7 @@ public class WxCustomMessageTest {
} }
public void testNewsReply() { public void testNewsReply() {
WxCustomMessage reply = new WxCustomMessage();
WxCpMessage reply = new WxCpMessage();
reply.setToUser("OPENID"); reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_NEWS); reply.setMsgType(WxConsts.CUSTOM_MSG_NEWS);
@@ -125,7 +124,7 @@ public class WxCustomMessageTest {
article2.setDescription("Is Really A Happy Day"); article2.setDescription("Is Really A Happy Day");
article2.setTitle("Happy Day"); article2.setTitle("Happy Day");


WxCustomMessage reply = WxCustomMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build();
WxCpMessage reply = WxCpMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}"); Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}");
} }

正在加载...
取消
保存