context);
}
diff --git a/src/main/java/me/chanjar/weixin/api/WxMessageRouter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
similarity index 79%
rename from src/main/java/me/chanjar/weixin/api/WxMessageRouter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
index 2a651596..f49cafe6 100644
--- a/src/main/java/me/chanjar/weixin/api/WxMessageRouter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
+
+import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
import java.util.ArrayList;
import java.util.HashMap;
@@ -8,9 +11,6 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Pattern;
-import me.chanjar.weixin.bean.WxXmlMessage;
-import me.chanjar.weixin.bean.WxXmlOutMessage;
-
/**
*
* 微信消息路由器,通过代码化的配置,把来自微信的消息交给handler处理
@@ -21,7 +21,7 @@ import me.chanjar.weixin.bean.WxXmlOutMessage;
* 3. 规则的结束必须用{@link Rule#end()}或者{@link Rule#next()},否则不会生效
*
* 使用方法:
- * WxMessageRouter router = new WxMessageRouter();
+ * WxMpMessageRouter router = new WxMpMessageRouter();
* router
* .rule()
* .msgType("MSG_TYPE").event("EVENT").eventKey("EVENT_KEY").content("CONTENT")
@@ -39,7 +39,7 @@ import me.chanjar.weixin.bean.WxXmlOutMessage;
* @author qianjia
*
*/
-public class WxMessageRouter {
+public class WxMpMessageRouter {
private final List rules = new ArrayList();
@@ -57,7 +57,7 @@ public class WxMessageRouter {
* 处理微信消息
* @param wxMessage
*/
- public WxXmlOutMessage route(final WxXmlMessage wxMessage) {
+ public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
final List matchRules = new ArrayList();
// 收集匹配的规则
for (final Rule rule : rules) {
@@ -86,7 +86,7 @@ public class WxMessageRouter {
return null;
}
- WxXmlOutMessage res = null;
+ WxMpXmlOutMessage res = null;
for (final Rule rule : matchRules) {
// 返回最后一个匹配规则的结果
res = rule.service(wxMessage);
@@ -99,7 +99,7 @@ public class WxMessageRouter {
public static class Rule {
- private final WxMessageRouter routerBuilder;
+ private final WxMpMessageRouter routerBuilder;
private boolean async = true;
@@ -115,11 +115,11 @@ public class WxMessageRouter {
private boolean reEnter = false;
- private List handlers = new ArrayList();
+ private List handlers = new ArrayList();
- private List interceptors = new ArrayList();
+ private List interceptors = new ArrayList();
- protected Rule(WxMessageRouter routerBuilder) {
+ protected Rule(WxMpMessageRouter routerBuilder) {
this.routerBuilder = routerBuilder;
}
@@ -188,8 +188,8 @@ public class WxMessageRouter {
* @param interceptor
* @return
*/
- public Rule interceptor(WxMessageInterceptor interceptor) {
- return interceptor(interceptor, (WxMessageInterceptor[]) null);
+ public Rule interceptor(WxMpMessageInterceptor interceptor) {
+ return interceptor(interceptor, (WxMpMessageInterceptor[]) null);
}
/**
@@ -198,10 +198,10 @@ public class WxMessageRouter {
* @param otherInterceptors
* @return
*/
- public Rule interceptor(WxMessageInterceptor interceptor, WxMessageInterceptor... otherInterceptors) {
+ public Rule interceptor(WxMpMessageInterceptor interceptor, WxMpMessageInterceptor... otherInterceptors) {
this.interceptors.add(interceptor);
if (otherInterceptors != null && otherInterceptors.length > 0) {
- for (WxMessageInterceptor i : otherInterceptors) {
+ for (WxMpMessageInterceptor i : otherInterceptors) {
this.interceptors.add(i);
}
}
@@ -213,8 +213,8 @@ public class WxMessageRouter {
* @param handler
* @return
*/
- public Rule handler(WxMessageHandler handler) {
- return handler(handler, (WxMessageHandler[]) null);
+ public Rule handler(WxMpMessageHandler handler) {
+ return handler(handler, (WxMpMessageHandler[]) null);
}
/**
@@ -223,10 +223,10 @@ public class WxMessageRouter {
* @param otherHandlers
* @return
*/
- public Rule handler(WxMessageHandler handler, WxMessageHandler... otherHandlers) {
+ public Rule handler(WxMpMessageHandler handler, WxMpMessageHandler... otherHandlers) {
this.handlers.add(handler);
if (otherHandlers != null && otherHandlers.length > 0) {
- for (WxMessageHandler i : otherHandlers) {
+ for (WxMpMessageHandler i : otherHandlers) {
this.handlers.add(i);
}
}
@@ -237,7 +237,7 @@ public class WxMessageRouter {
* 规则结束,代表如果一个消息匹配该规则,那么它将不再会进入其他规则
* @return
*/
- public WxMessageRouter end() {
+ public WxMpMessageRouter end() {
this.routerBuilder.rules.add(this);
return this.routerBuilder;
}
@@ -246,12 +246,12 @@ public class WxMessageRouter {
* 规则结束,但是消息还会进入其他规则
* @return
*/
- public WxMessageRouter next() {
+ public WxMpMessageRouter next() {
this.reEnter = true;
return end();
}
- protected boolean test(WxXmlMessage wxMessage) {
+ protected boolean test(WxMpXmlMessage wxMessage) {
return
(this.msgType == null || this.msgType.equals(wxMessage.getMsgType()))
&&
@@ -270,18 +270,18 @@ public class WxMessageRouter {
* @param wxMessage
* @return true 代表继续执行别的router,false 代表停止执行别的router
*/
- protected WxXmlOutMessage service(WxXmlMessage wxMessage) {
+ protected WxMpXmlOutMessage service(WxMpXmlMessage wxMessage) {
Map context = new HashMap();
// 如果拦截器不通过
- for (WxMessageInterceptor interceptor : this.interceptors) {
+ for (WxMpMessageInterceptor interceptor : this.interceptors) {
if (!interceptor.intercept(wxMessage, context)) {
return null;
}
}
// 交给handler处理
- WxXmlOutMessage res = null;
- for (WxMessageHandler handler : this.handlers) {
+ WxMpXmlOutMessage res = null;
+ for (WxMpMessageHandler handler : this.handlers) {
// 返回最后handler的结果
res = handler.handle(wxMessage, context);
}
diff --git a/src/main/java/me/chanjar/weixin/api/WxService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
similarity index 77%
rename from src/main/java/me/chanjar/weixin/api/WxService.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
index c5db88bc..4b3a20fc 100644
--- a/src/main/java/me/chanjar/weixin/api/WxService.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
@@ -1,29 +1,20 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
+
+import me.chanjar.weixin.common.bean.WxMenu;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.result.*;
+import me.chanjar.weixin.common.exception.WxErrorException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
-import me.chanjar.weixin.bean.WxCustomMessage;
-import me.chanjar.weixin.bean.WxGroup;
-import me.chanjar.weixin.bean.WxMassGroupMessage;
-import me.chanjar.weixin.bean.WxMassNews;
-import me.chanjar.weixin.bean.WxMassOpenIdsMessage;
-import me.chanjar.weixin.bean.WxMassVideo;
-import me.chanjar.weixin.bean.WxMenu;
-import me.chanjar.weixin.bean.result.WxMassSendResult;
-import me.chanjar.weixin.bean.result.WxMassUploadResult;
-import me.chanjar.weixin.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.bean.result.WxQrCodeTicket;
-import me.chanjar.weixin.bean.result.WxUser;
-import me.chanjar.weixin.bean.result.WxUserList;
-import me.chanjar.weixin.exception.WxErrorException;
-
/**
* 微信API的Service
*/
-public interface WxService {
+public interface WxMpService {
/**
*
@@ -48,7 +39,7 @@ public interface WxService {
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=获取access_token
*
- * @throws WxErrorException
+ * @throws me.chanjar.weixin.common.exception.WxErrorException
*/
public void accessTokenRefresh() throws WxErrorException;
@@ -64,8 +55,8 @@ public interface WxService {
*
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件
*
- * @param mediaType 媒体类型, 请看{@link WxConsts}
- * @param fileType 文件类型,请看{@link WxConsts}
+ * @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts}
+ * @param fileType 文件类型,请看{@link me.chanjar.weixin.common.api.WxConsts}
* @param inputStream 输入流
* @throws WxErrorException
*/
@@ -99,7 +90,7 @@ public interface WxService {
* @param message
* @throws WxErrorException
*/
- public void customMessageSend(WxCustomMessage message) throws WxErrorException;
+ public void customMessageSend(WxMpCustomMessage message) throws WxErrorException;
/**
*
@@ -109,10 +100,10 @@ public interface WxService {
*
* @param news
* @throws WxErrorException
- * @see #massGroupMessageSend(WxMassGroupMessage)
- * @see #massOpenIdsMessageSend(WxMassOpenIdsMessage)
+ * @see #massGroupMessageSend(me.chanjar.weixin.mp.bean.WxMpMassGroupMessage)
+ * @see #massOpenIdsMessageSend(me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage)
*/
- public WxMassUploadResult massNewsUpload(WxMassNews news) throws WxErrorException;
+ public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException;
/**
*
@@ -121,36 +112,36 @@ public interface WxService {
*
* @return
* @throws WxErrorException
- * @see #massGroupMessageSend(WxMassGroupMessage)
- * @see #massOpenIdsMessageSend(WxMassOpenIdsMessage)
+ * @see #massGroupMessageSend(me.chanjar.weixin.mp.bean.WxMpMassGroupMessage)
+ * @see #massOpenIdsMessageSend(me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage)
*/
- public WxMassUploadResult massVideoUpload(WxMassVideo video) throws WxErrorException;
+ public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException;
/**
*
* 分组群发消息
- * 如果发送图文消息,必须先使用 {@link #massNewsUpload(WxMassNews)} 获得media_id,然后再发送
- * 如果发送视频消息,必须先使用 {@link #massVideoUpload(WxMassVideo)} 获得media_id,然后再发送
+ * 如果发送图文消息,必须先使用 {@link #massNewsUpload(me.chanjar.weixin.mp.bean.WxMpMassNews)} 获得media_id,然后再发送
+ * 如果发送视频消息,必须先使用 {@link #massVideoUpload(me.chanjar.weixin.mp.bean.WxMpMassVideo)} 获得media_id,然后再发送
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=高级群发接口
*
* @param message
* @throws WxErrorException
* @return
*/
- public WxMassSendResult massGroupMessageSend(WxMassGroupMessage message) throws WxErrorException;
+ public WxMpMassSendResult massGroupMessageSend(WxMpMassGroupMessage message) throws WxErrorException;
/**
*
* 按openId列表群发消息
- * 如果发送图文消息,必须先使用 {@link #massNewsUpload(WxMassNews)} 获得media_id,然后再发送
- * 如果发送视频消息,必须先使用 {@link #massVideoUpload(WxMassVideo)} 获得media_id,然后再发送
+ * 如果发送图文消息,必须先使用 {@link #massNewsUpload(me.chanjar.weixin.mp.bean.WxMpMassNews)} 获得media_id,然后再发送
+ * 如果发送视频消息,必须先使用 {@link #massVideoUpload(me.chanjar.weixin.mp.bean.WxMpMassVideo)} 获得media_id,然后再发送
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=高级群发接口
*
* @param message
* @return
* @throws WxErrorException
*/
- public WxMassSendResult massOpenIdsMessageSend(WxMassOpenIdsMessage message) throws WxErrorException;
+ public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException;
/**
*
@@ -190,7 +181,7 @@ public interface WxService {
* @param name 分组名字(30个字符以内)
* @throws WxErrorException
*/
- public WxGroup groupCreate(String name) throws WxErrorException;
+ public WxMpGroup groupCreate(String name) throws WxErrorException;
/**
*
@@ -200,7 +191,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public List groupGet() throws WxErrorException;
+ public List groupGet() throws WxErrorException;
/**
*
@@ -222,7 +213,7 @@ public interface WxService {
* @param group 要更新的group,group的id,name必须设置
* @throws WxErrorException
*/
- public void groupUpdate(WxGroup group) throws WxErrorException;
+ public void groupUpdate(WxMpGroup group) throws WxErrorException;
/**
*
@@ -258,7 +249,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public WxUser userInfo(String openid, String lang) throws WxErrorException;
+ public WxMpUser userInfo(String openid, String lang) throws WxErrorException;
/**
*
@@ -269,7 +260,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public WxUserList userList(String next_openid) throws WxErrorException;
+ public WxMpUserList userList(String next_openid) throws WxErrorException;
/**
*
@@ -281,7 +272,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public WxQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException;
+ public WxMpQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException;
/**
*
@@ -292,7 +283,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public WxQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException;
+ public WxMpQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException;
/**
*
@@ -303,7 +294,7 @@ public interface WxService {
* @return
* @throws WxErrorException
*/
- public File qrCodePicture(WxQrCodeTicket ticket) throws WxErrorException;
+ public File qrCodePicture(WxMpQrCodeTicket ticket) throws WxErrorException;
/**
*
@@ -317,8 +308,8 @@ public interface WxService {
public String shortUrl(String long_url) throws WxErrorException;
/**
- * 注入 {@link WxConfigStorage} 的实现
+ * 注入 {@link WxMpConfigStorage} 的实现
* @param wxConfigProvider
*/
- public void setWxConfigStorage(WxConfigStorage wxConfigProvider);
+ public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider);
}
diff --git a/src/main/java/me/chanjar/weixin/api/WxServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
similarity index 76%
rename from src/main/java/me/chanjar/weixin/api/WxServiceImpl.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
index 28fc3e7e..c40af33d 100644
--- a/src/main/java/me/chanjar/weixin/api/WxServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
@@ -1,16 +1,23 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import me.chanjar.weixin.bean.WxCustomMessage;
-import me.chanjar.weixin.util.crypto.SHA1;
-import me.chanjar.weixin.util.json.GsonHelper;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.internal.Streams;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonReader;
+import me.chanjar.weixin.common.bean.WxAccessToken;
+import me.chanjar.weixin.common.bean.WxMenu;
+import me.chanjar.weixin.common.bean.result.WxError;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.common.util.crypto.SHA1;
+import me.chanjar.weixin.common.util.fs.FileUtils;
+import me.chanjar.weixin.common.util.http.*;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.result.*;
+import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -19,37 +26,15 @@ import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
-import me.chanjar.weixin.bean.WxAccessToken;
-import me.chanjar.weixin.bean.WxGroup;
-import me.chanjar.weixin.bean.WxMassGroupMessage;
-import me.chanjar.weixin.bean.WxMassNews;
-import me.chanjar.weixin.bean.WxMassOpenIdsMessage;
-import me.chanjar.weixin.bean.WxMassVideo;
-import me.chanjar.weixin.bean.WxMenu;
-import me.chanjar.weixin.bean.result.WxError;
-import me.chanjar.weixin.bean.result.WxMassSendResult;
-import me.chanjar.weixin.bean.result.WxMassUploadResult;
-import me.chanjar.weixin.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.bean.result.WxQrCodeTicket;
-import me.chanjar.weixin.bean.result.WxUser;
-import me.chanjar.weixin.bean.result.WxUserList;
-import me.chanjar.weixin.exception.WxErrorException;
-import me.chanjar.weixin.util.fs.FileUtils;
-import me.chanjar.weixin.util.http.MediaDownloadRequestExecutor;
-import me.chanjar.weixin.util.http.MediaUploadRequestExecutor;
-import me.chanjar.weixin.util.http.QrCodeRequestExecutor;
-import me.chanjar.weixin.util.http.RequestExecutor;
-import me.chanjar.weixin.util.http.SimpleGetRequestExecutor;
-import me.chanjar.weixin.util.http.SimplePostRequestExecutor;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.internal.Streams;
-import com.google.gson.reflect.TypeToken;
-import com.google.gson.stream.JsonReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
-public class WxServiceImpl implements WxService {
+public class WxMpServiceImpl implements WxMpService {
/**
* 全局的是否正在刷新Access Token的flag
@@ -60,13 +45,13 @@ public class WxServiceImpl implements WxService {
protected static final CloseableHttpClient httpclient = HttpClients.createDefault();
- protected WxConfigStorage wxConfigStorage;
+ protected WxMpConfigStorage wxMpConfigStorage;
protected final ThreadLocal retryTimes = new ThreadLocal();
public boolean checkSignature(String timestamp, String nonce, String signature) {
try {
- return SHA1.gen(wxConfigStorage.getToken(), timestamp, nonce).equals(signature);
+ return SHA1.gen(wxMpConfigStorage.getToken(), timestamp, nonce).equals(signature);
} catch (Exception e) {
return false;
}
@@ -76,8 +61,8 @@ public class WxServiceImpl implements WxService {
if (!GLOBAL_ACCESS_TOKEN_REFRESH_FLAG.getAndSet(true)) {
try {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"
- + "&appid=" + wxConfigStorage.getAppId()
- + "&secret=" + wxConfigStorage.getSecret()
+ + "&appid=" + wxMpConfigStorage.getAppId()
+ + "&secret=" + wxMpConfigStorage.getSecret()
;
try {
HttpGet httpGet = new HttpGet(url);
@@ -88,7 +73,7 @@ public class WxServiceImpl implements WxService {
throw new WxErrorException(error);
}
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
- wxConfigStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
+ wxMpConfigStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
} catch (ClientProtocolException e) {
throw new RuntimeException(e);
} catch (IOException e) {
@@ -109,7 +94,7 @@ public class WxServiceImpl implements WxService {
}
}
- public void customMessageSend(WxCustomMessage message) throws WxErrorException {
+ public void customMessageSend(WxMpCustomMessage message) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send";
execute(new SimplePostRequestExecutor(), url, message.toJson());
}
@@ -152,31 +137,31 @@ public class WxServiceImpl implements WxService {
return execute(new MediaDownloadRequestExecutor(), url, "media_id=" + media_id);
}
- public WxMassUploadResult massNewsUpload(WxMassNews news) throws WxErrorException {
+ public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews";
String responseContent = execute(new SimplePostRequestExecutor(), url, news.toJson());
- return WxMassUploadResult.fromJson(responseContent);
+ return WxMpMassUploadResult.fromJson(responseContent);
}
- public WxMassUploadResult massVideoUpload(WxMassVideo video) throws WxErrorException {
+ public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException {
String url = "http://file.api.weixin.qq.com/cgi-bin/media/uploadvideo";
String responseContent = execute(new SimplePostRequestExecutor(), url, video.toJson());
- return WxMassUploadResult.fromJson(responseContent);
+ return WxMpMassUploadResult.fromJson(responseContent);
}
- public WxMassSendResult massGroupMessageSend(WxMassGroupMessage message) throws WxErrorException {
+ public WxMpMassSendResult massGroupMessageSend(WxMpMassGroupMessage message) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall";
String responseContent = execute(new SimplePostRequestExecutor(), url, message.toJson());
- return WxMassSendResult.fromJson(responseContent);
+ return WxMpMassSendResult.fromJson(responseContent);
}
- public WxMassSendResult massOpenIdsMessageSend(WxMassOpenIdsMessage message) throws WxErrorException {
+ public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/message/mass/send";
String responseContent = execute(new SimplePostRequestExecutor(), url, message.toJson());
- return WxMassSendResult.fromJson(responseContent);
+ return WxMpMassSendResult.fromJson(responseContent);
}
- public WxGroup groupCreate(String name) throws WxErrorException {
+ public WxMpGroup groupCreate(String name) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/groups/create";
JsonObject json = new JsonObject();
JsonObject groupJson = new JsonObject();
@@ -187,10 +172,10 @@ public class WxServiceImpl implements WxService {
new SimplePostRequestExecutor(),
url,
json.toString());
- return WxGroup.fromJson(responseContent);
+ return WxMpGroup.fromJson(responseContent);
}
- public List groupGet() throws WxErrorException {
+ public List groupGet() throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/groups/get";
String responseContent = execute(new SimpleGetRequestExecutor(), url, null);
/*
@@ -198,7 +183,7 @@ public class WxServiceImpl implements WxService {
* 查询时返回的是 { groups : [ { id : ..., name : ..., count : ... }, ... ] }
*/
JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent)));
- return WxGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("groups"), new TypeToken>(){}.getType());
+ return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("groups"), new TypeToken>(){}.getType());
}
public long userGetGroup(String openid) throws WxErrorException {
@@ -210,7 +195,7 @@ public class WxServiceImpl implements WxService {
return GsonHelper.getAsLong(tmpJsonElement.getAsJsonObject().get("groupid"));
}
- public void groupUpdate(WxGroup group) throws WxErrorException {
+ public void groupUpdate(WxMpGroup group) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/groups/update";
execute(new SimplePostRequestExecutor(), url, group.toJson());
}
@@ -231,20 +216,20 @@ public class WxServiceImpl implements WxService {
execute(new SimplePostRequestExecutor(), url, json.toString());
}
- public WxUser userInfo(String openid, String lang) throws WxErrorException {
+ public WxMpUser userInfo(String openid, String lang) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/user/info";
lang = lang == null ? "zh_CN" : lang;
String responseContent = execute(new SimpleGetRequestExecutor(), url, "openid=" + openid + "&lang=" + lang);
- return WxUser.fromJson(responseContent);
+ return WxMpUser.fromJson(responseContent);
}
- public WxUserList userList(String next_openid) throws WxErrorException {
+ public WxMpUserList userList(String next_openid) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/user/get";
String responseContent = execute(new SimpleGetRequestExecutor(), url, next_openid == null ? null : "next_openid=" + next_openid);
- return WxUserList.fromJson(responseContent);
+ return WxMpUserList.fromJson(responseContent);
}
- public WxQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException {
+ public WxMpQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create";
JsonObject json = new JsonObject();
json.addProperty("action_name", "QR_SCENE");
@@ -257,10 +242,10 @@ public class WxServiceImpl implements WxService {
actionInfo.add("scene", scene);
json.add("action_info", actionInfo);
String responseContent = execute(new SimplePostRequestExecutor(), url, json.toString());
- return WxQrCodeTicket.fromJson(responseContent);
+ return WxMpQrCodeTicket.fromJson(responseContent);
}
- public WxQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException {
+ public WxMpQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create";
JsonObject json = new JsonObject();
json.addProperty("action_name", "QR_LIMIT_SCENE");
@@ -270,10 +255,10 @@ public class WxServiceImpl implements WxService {
actionInfo.add("scene", scene);
json.add("action_info", actionInfo);
String responseContent = execute(new SimplePostRequestExecutor(), url, json.toString());
- return WxQrCodeTicket.fromJson(responseContent);
+ return WxMpQrCodeTicket.fromJson(responseContent);
}
- public File qrCodePicture(WxQrCodeTicket ticket) throws WxErrorException {
+ public File qrCodePicture(WxMpQrCodeTicket ticket) throws WxErrorException {
String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode";
return execute(new QrCodeRequestExecutor(), url, ticket);
}
@@ -297,10 +282,10 @@ public class WxServiceImpl implements WxService {
* @throws WxErrorException
*/
public T execute(RequestExecutor executor, String uri, E data) throws WxErrorException {
- if (StringUtils.isBlank(wxConfigStorage.getAccessToken())) {
+ if (StringUtils.isBlank(wxMpConfigStorage.getAccessToken())) {
accessTokenRefresh();
}
- String accessToken = wxConfigStorage.getAccessToken();
+ String accessToken = wxMpConfigStorage.getAccessToken();
String uriWithAccessToken = uri;
uriWithAccessToken += uri.indexOf('?') == -1 ? "?access_token=" + accessToken : "&access_token=" + accessToken;
@@ -350,8 +335,8 @@ public class WxServiceImpl implements WxService {
}
}
- public void setWxConfigStorage(WxConfigStorage wxConfigProvider) {
- this.wxConfigStorage = wxConfigProvider;
+ public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) {
+ this.wxMpConfigStorage = wxConfigProvider;
}
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxCustomMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpCustomMessage.java
similarity index 81%
rename from src/main/java/me/chanjar/weixin/bean/WxCustomMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpCustomMessage.java
index eea1113b..dc3d3baa 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxCustomMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpCustomMessage.java
@@ -1,23 +1,17 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.mp.bean.custombuilder.*;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.util.ArrayList;
import java.util.List;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.custombuilder.ImageBuilder;
-import me.chanjar.weixin.bean.custombuilder.MusicBuilder;
-import me.chanjar.weixin.bean.custombuilder.NewsBuilder;
-import me.chanjar.weixin.bean.custombuilder.TextBuilder;
-import me.chanjar.weixin.bean.custombuilder.VideoBuilder;
-import me.chanjar.weixin.bean.custombuilder.VoiceBuilder;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
-
/**
* 客服消息
* @author chanjarster
*
*/
-public class WxCustomMessage {
+public class WxMpCustomMessage {
private String toUser;
private String msgType;
@@ -43,12 +37,12 @@ public class WxCustomMessage {
/**
*
* 请使用
- * {@link WxConsts#CUSTOM_MSG_TEXT}
- * {@link WxConsts#CUSTOM_MSG_IMAGE}
- * {@link WxConsts#CUSTOM_MSG_VOICE}
- * {@link WxConsts#CUSTOM_MSG_MUSIC}
- * {@link WxConsts#CUSTOM_MSG_VIDEO}
- * {@link WxConsts#CUSTOM_MSG_NEWS}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_TEXT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_IMAGE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_VOICE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_MUSIC}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_VIDEO}
+ * {@link me.chanjar.weixin.common.api.WxConsts#CUSTOM_MSG_NEWS}
*
* @param msgType
*/
@@ -105,7 +99,7 @@ public class WxCustomMessage {
}
public String toJson() {
- return WxGsonBuilder.INSTANCE.create().toJson(this);
+ return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
public static class WxArticle {
diff --git a/src/main/java/me/chanjar/weixin/bean/WxGroup.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpGroup.java
similarity index 59%
rename from src/main/java/me/chanjar/weixin/bean/WxGroup.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpGroup.java
index 0174f562..cfa5fcb6 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxGroup.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpGroup.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
* 微信用户分组
* @author chanjarster
*
*/
-public class WxGroup {
+public class WxMpGroup {
private long id = -1;
private String name;
@@ -31,16 +31,16 @@ public class WxGroup {
this.count = count;
}
- public static WxGroup fromJson(String json) {
- return WxGsonBuilder.create().fromJson(json, WxGroup.class);
+ public static WxMpGroup fromJson(String json) {
+ return WxMpGsonBuilder.create().fromJson(json, WxMpGroup.class);
}
public String toJson() {
- return WxGsonBuilder.create().toJson(this);
+ return WxMpGsonBuilder.create().toJson(this);
}
@Override
public String toString() {
- return "WxGroup [id=" + id + ", name=" + name + ", count=" + count + "]";
+ return "WxMpGroup [id=" + id + ", name=" + name + ", count=" + count + "]";
}
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxMassGroupMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassGroupMessage.java
similarity index 62%
rename from src/main/java/me/chanjar/weixin/bean/WxMassGroupMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassGroupMessage.java
index 32bd6c90..c8e859c0 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxMassGroupMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassGroupMessage.java
@@ -1,21 +1,20 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
* 分组群发的消息
*
* @author chanjarster
*/
-public class WxMassGroupMessage {
+public class WxMpMassGroupMessage {
private long groupId;
private String msgtype;
private String content;
private String mediaId;
- public WxMassGroupMessage() {
+ public WxMpMassGroupMessage() {
super();
}
@@ -26,11 +25,11 @@ public class WxMassGroupMessage {
/**
*
* 请使用
- * {@link WxConsts#MASS_MSG_IMAGE}
- * {@link WxConsts#MASS_MSG_NEWS}
- * {@link WxConsts#MASS_MSG_TEXT}
- * {@link WxConsts#MASS_MSG_VIDEO}
- * {@link WxConsts#MASS_MSG_VOICE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_IMAGE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_NEWS}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_TEXT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_VIDEO}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_VOICE}
* 如果msgtype和media_id不匹配的话,会返回系统繁忙的错误
*
* @param msgtype
@@ -56,7 +55,7 @@ public class WxMassGroupMessage {
}
public String toJson() {
- return WxGsonBuilder.INSTANCE.create().toJson(this);
+ return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
public long getGroupId() {
diff --git a/src/main/java/me/chanjar/weixin/bean/WxMassNews.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassNews.java
similarity index 86%
rename from src/main/java/me/chanjar/weixin/bean/WxMassNews.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassNews.java
index af136a83..f3c67d5a 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxMassNews.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassNews.java
@@ -1,29 +1,29 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.util.ArrayList;
import java.util.List;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
-
/**
* 群发时用到的图文消息素材
* @author chanjarster
*
*/
-public class WxMassNews {
+public class WxMpMassNews {
- private List articles = new ArrayList();
+ private List articles = new ArrayList();
- public List getArticles() {
+ public List getArticles() {
return articles;
}
- public void addArticle(WxMassNewsArticle article) {
+ public void addArticle(WxMpMassNewsArticle article) {
this.articles.add(article);
}
public String toJson() {
- return WxGsonBuilder.INSTANCE.create().toJson(this);
+ return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
/**
@@ -40,7 +40,7 @@ public class WxMassNews {
* @author chanjarster
*
*/
- public static class WxMassNewsArticle {
+ public static class WxMpMassNewsArticle {
/**
* (必填) 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得
*/
diff --git a/src/main/java/me/chanjar/weixin/bean/WxMassOpenIdsMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassOpenIdsMessage.java
similarity index 67%
rename from src/main/java/me/chanjar/weixin/bean/WxMassOpenIdsMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassOpenIdsMessage.java
index 56397afb..b542162b 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxMassOpenIdsMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassOpenIdsMessage.java
@@ -1,23 +1,23 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.util.ArrayList;
import java.util.List;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
-
/**
* OpenId列表群发的消息
*
* @author chanjarster
*/
-public class WxMassOpenIdsMessage {
+public class WxMpMassOpenIdsMessage {
private List toUsers = new ArrayList();
private String msgType;
private String content;
private String mediaId;
- public WxMassOpenIdsMessage() {
+ public WxMpMassOpenIdsMessage() {
super();
}
@@ -28,11 +28,11 @@ public class WxMassOpenIdsMessage {
/**
*
* 请使用
- * {@link me.chanjar.weixin.api.WxConsts#MASS_MSG_IMAGE}
- * {@link me.chanjar.weixin.api.WxConsts#MASS_MSG_NEWS}
- * {@link me.chanjar.weixin.api.WxConsts#MASS_MSG_TEXT}
- * {@link me.chanjar.weixin.api.WxConsts#MASS_MSG_VIDEO}
- * {@link me.chanjar.weixin.api.WxConsts#MASS_MSG_VOICE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_IMAGE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_NEWS}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_TEXT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_VIDEO}
+ * {@link me.chanjar.weixin.common.api.WxConsts#MASS_MSG_VOICE}
* 如果msgtype和media_id不匹配的话,会返回系统繁忙的错误
*
* @param msgType
@@ -58,7 +58,7 @@ public class WxMassOpenIdsMessage {
}
public String toJson() {
- return WxGsonBuilder.INSTANCE.create().toJson(this);
+ return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
/**
diff --git a/src/main/java/me/chanjar/weixin/bean/WxMassVideo.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassVideo.java
similarity index 76%
rename from src/main/java/me/chanjar/weixin/bean/WxMassVideo.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassVideo.java
index 47d73683..3dc6c5d7 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxMassVideo.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassVideo.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
* 群发时用到的视频素材
*
* @author chanjarster
*/
-public class WxMassVideo {
+public class WxMpMassVideo {
private String mediaId;
private String title;
@@ -38,6 +38,6 @@ public class WxMassVideo {
}
public String toJson() {
- return WxGsonBuilder.INSTANCE.create().toJson(this);
+ return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutImageMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMpXmlOutImageMessage.java
similarity index 71%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutImageMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMpXmlOutImageMessage.java
index 59ac5394..1db47004 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutImageMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMpXmlOutImageMessage.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.MediaIdMarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,18 +9,15 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.xml.MediaIdMarshaller;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutImageMessage extends WxXmlOutMessage {
+public class WxMpMpXmlOutImageMessage extends WxMpXmlOutMessage {
@XmlElement(name="Image")
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
private String mediaId;
- public WxXmlOutImageMessage() {
+ public WxMpMpXmlOutImageMessage() {
this.msgType = WxConsts.XML_MSG_IMAGE;
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlMessage.java
similarity index 84%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlMessage.java
index aa70047d..8ed9e567 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlMessage.java
@@ -1,10 +1,9 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
-import me.chanjar.weixin.api.WxConfigStorage;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.crypto.WxCryptUtil;
-import me.chanjar.weixin.util.xml.AdapterCDATA;
-import me.chanjar.weixin.util.xml.XmlTransformer;
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
+import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
+import me.chanjar.weixin.mp.util.xml.XmlTransformer;
import org.apache.commons.io.IOUtils;
import javax.xml.bind.JAXBException;
@@ -28,7 +27,7 @@ import java.util.List;
*/
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlMessage {
+public class WxMpXmlMessage {
///////////////////////
// 以下都是微信推送过来的消息的xml的element所对应的属性
@@ -180,13 +179,13 @@ public class WxXmlMessage {
/**
*
* 当接受用户消息时,可能会获得以下值:
- * {@link WxConsts#XML_MSG_TEXT}
- * {@link WxConsts#XML_MSG_IMAGE}
- * {@link WxConsts#XML_MSG_VOICE}
- * {@link WxConsts#XML_MSG_VIDEO}
- * {@link WxConsts#XML_MSG_LOCATION}
- * {@link WxConsts#XML_MSG_LINK}
- * {@link WxConsts#XML_MSG_EVENT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_TEXT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_IMAGE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VOICE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VIDEO}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_LOCATION}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_LINK}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_EVENT}
*
*
* @return
@@ -198,12 +197,12 @@ public class WxXmlMessage {
/**
*
* 当发送消息的时候使用:
- * {@link WxConsts#XML_MSG_TEXT}
- * {@link WxConsts#XML_MSG_IMAGE}
- * {@link WxConsts#XML_MSG_VOICE}
- * {@link WxConsts#XML_MSG_VIDEO}
- * {@link WxConsts#XML_MSG_NEWS}
- * {@link WxConsts#XML_MSG_MUSIC}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_TEXT}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_IMAGE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VOICE}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VIDEO}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_NEWS}
+ * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_MUSIC}
*
*
* @param msgType
@@ -380,17 +379,17 @@ public class WxXmlMessage {
this.fromUserName = fromUserName;
}
- public static WxXmlMessage fromXml(String xml) {
+ public static WxMpXmlMessage fromXml(String xml) {
try {
- return XmlTransformer.fromXml(WxXmlMessage.class, xml);
+ return XmlTransformer.fromXml(WxMpXmlMessage.class, xml);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
- public static WxXmlMessage fromXml(InputStream is) {
+ public static WxMpXmlMessage fromXml(InputStream is) {
try {
- return XmlTransformer.fromXml(WxXmlMessage.class, is);
+ return XmlTransformer.fromXml(WxMpXmlMessage.class, is);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
@@ -400,27 +399,27 @@ public class WxXmlMessage {
* 从加密字符串转换
*
* @param encryptedXml
- * @param wxConfigStorage
+ * @param wxMpConfigStorage
* @param timestamp
* @param nonce
* @param msgSignature
* @return
*/
- public static WxXmlMessage fromEncryptedXml(
+ public static WxMpXmlMessage fromEncryptedXml(
String encryptedXml,
- WxConfigStorage wxConfigStorage,
+ WxMpConfigStorage wxMpConfigStorage,
String timestamp, String nonce, String msgSignature) {
- WxCryptUtil cryptUtil = new WxCryptUtil(wxConfigStorage);
+ WxMpCryptUtil cryptUtil = new WxMpCryptUtil(wxMpConfigStorage);
String plainText = cryptUtil.decrypt(msgSignature, timestamp, nonce, encryptedXml);
return fromXml(plainText);
}
- public static WxXmlMessage fromEncryptedXml(
+ public static WxMpXmlMessage fromEncryptedXml(
InputStream is,
- WxConfigStorage wxConfigStorage,
+ WxMpConfigStorage wxMpConfigStorage,
String timestamp, String nonce, String msgSignature) {
try {
- return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxConfigStorage, timestamp, nonce, msgSignature);
+ return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxMpConfigStorage, timestamp, nonce, msgSignature);
} catch (IOException e) {
throw new RuntimeException(e);
}
@@ -466,27 +465,27 @@ public class WxXmlMessage {
this.errorCount = errorCount;
}
- public WxXmlMessage.ScanCodeInfo getScanCodeInfo() {
+ public WxMpXmlMessage.ScanCodeInfo getScanCodeInfo() {
return scanCodeInfo;
}
- public void setScanCodeInfo(WxXmlMessage.ScanCodeInfo scanCodeInfo) {
+ public void setScanCodeInfo(WxMpXmlMessage.ScanCodeInfo scanCodeInfo) {
this.scanCodeInfo = scanCodeInfo;
}
- public WxXmlMessage.SendPicsInfo getSendPicsInfo() {
+ public WxMpXmlMessage.SendPicsInfo getSendPicsInfo() {
return sendPicsInfo;
}
- public void setSendPicsInfo(WxXmlMessage.SendPicsInfo sendPicsInfo) {
+ public void setSendPicsInfo(WxMpXmlMessage.SendPicsInfo sendPicsInfo) {
this.sendPicsInfo = sendPicsInfo;
}
- public WxXmlMessage.SendLocationInfo getSendLocationInfo() {
+ public WxMpXmlMessage.SendLocationInfo getSendLocationInfo() {
return sendLocationInfo;
}
- public void setSendLocationInfo(WxXmlMessage.SendLocationInfo sendLocationInfo) {
+ public void setSendLocationInfo(WxMpXmlMessage.SendLocationInfo sendLocationInfo) {
this.sendLocationInfo = sendLocationInfo;
}
@@ -554,7 +553,7 @@ public class WxXmlMessage {
@XmlRootElement(name = "item")
@XmlAccessorType(XmlAccessType.FIELD)
- @XmlType(name = "me.chanjar.weixin.bean.WxXmlMessage.SendPicsInfo.Item")
+ @XmlType(name = "WxXmlMessage.SendPicsInfo.Item")
public static class Item {
@XmlElement(name = "PicMd5Sum")
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMessage.java
similarity index 77%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMessage.java
index 7a03d29e..b9e4507d 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMessage.java
@@ -1,4 +1,10 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
+import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+import me.chanjar.weixin.mp.bean.outxmlbuilder.*;
+import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
+import me.chanjar.weixin.mp.util.xml.XmlTransformer;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
@@ -7,20 +13,9 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConfigStorage;
-import me.chanjar.weixin.bean.outxmlbuilder.ImageBuilder;
-import me.chanjar.weixin.bean.outxmlbuilder.MusicBuilder;
-import me.chanjar.weixin.bean.outxmlbuilder.NewsBuilder;
-import me.chanjar.weixin.bean.outxmlbuilder.TextBuilder;
-import me.chanjar.weixin.bean.outxmlbuilder.VideoBuilder;
-import me.chanjar.weixin.bean.outxmlbuilder.VoiceBuilder;
-import me.chanjar.weixin.util.crypto.WxCryptUtil;
-import me.chanjar.weixin.util.xml.AdapterCDATA;
-import me.chanjar.weixin.util.xml.XmlTransformer;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutMessage {
+public class WxMpXmlOutMessage {
@XmlElement(name="ToUserName")
@XmlJavaTypeAdapter(AdapterCDATA.class)
@@ -81,9 +76,9 @@ public class WxXmlOutMessage {
* 转换成加密的xml格式
* @return
*/
- public String toEncryptedXml(WxConfigStorage wxConfigStorage) {
+ public String toEncryptedXml(WxMpConfigStorage wxMpConfigStorage) {
String plainXml = toXml();
- WxCryptUtil pc = new WxCryptUtil(wxConfigStorage);
+ WxMpCryptUtil pc = new WxMpCryptUtil(wxMpConfigStorage);
return pc.encrypt(plainXml);
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMewsMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMewsMessage.java
new file mode 100644
index 00000000..527dc6a7
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMewsMessage.java
@@ -0,0 +1,95 @@
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
+
+import javax.xml.bind.annotation.*;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlRootElement(name = "xml")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class WxMpXmlOutMewsMessage extends WxMpXmlOutMessage {
+
+ @XmlElement(name = "ArticleCount")
+ protected int articleCount;
+
+ @XmlElementWrapper(name="Articles")
+ @XmlElement(name = "item")
+ protected final List- articles = new ArrayList
- ();
+
+ public WxMpXmlOutMewsMessage() {
+ this.msgType = WxConsts.XML_MSG_NEWS;
+ }
+
+ public int getArticleCount() {
+ return articleCount;
+ }
+
+ public void addArticle(Item item) {
+ this.articles.add(item);
+ this.articleCount = this.articles.size();
+ }
+
+ public List
- getArticles() {
+ return articles;
+ }
+
+
+ @XmlRootElement(name = "Item")
+ @XmlAccessorType(XmlAccessType.FIELD)
+ public static class Item {
+
+ @XmlElement(name = "Title")
+ @XmlJavaTypeAdapter(AdapterCDATA.class)
+ private String Title;
+
+ @XmlElement(name = "Description")
+ @XmlJavaTypeAdapter(AdapterCDATA.class)
+ private String Description;
+
+ @XmlElement(name="PicUrl")
+ @XmlJavaTypeAdapter(AdapterCDATA.class)
+ private String PicUrl;
+
+ @XmlElement(name="Url")
+ @XmlJavaTypeAdapter(AdapterCDATA.class)
+ private String Url;
+
+ public String getTitle() {
+ return Title;
+ }
+
+ public void setTitle(String title) {
+ Title = title;
+ }
+
+ public String getDescription() {
+ return Description;
+ }
+
+ public void setDescription(String description) {
+ Description = description;
+ }
+
+ public String getPicUrl() {
+ return PicUrl;
+ }
+
+ public void setPicUrl(String picUrl) {
+ PicUrl = picUrl;
+ }
+
+ public String getUrl() {
+ return Url;
+ }
+
+ public void setUrl(String url) {
+ Url = url;
+ }
+
+ }
+
+
+}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutMusicMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMusicMessage.java
similarity index 92%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutMusicMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMusicMessage.java
index 40f6ebad..782b5dbb 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutMusicMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutMusicMessage.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,17 +9,14 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.xml.AdapterCDATA;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutMusicMessage extends WxXmlOutMessage {
+public class WxMpXmlOutMusicMessage extends WxMpXmlOutMessage {
@XmlElement(name = "Music")
protected final Music music = new Music();
- public WxXmlOutMusicMessage() {
+ public WxMpXmlOutMusicMessage() {
this.msgType = WxConsts.XML_MSG_MUSIC;
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutTextMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutTextMessage.java
similarity index 72%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutTextMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutTextMessage.java
index 3e4d3c08..3542e07b 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutTextMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutTextMessage.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,18 +9,15 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.xml.AdapterCDATA;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutTextMessage extends WxXmlOutMessage {
+public class WxMpXmlOutTextMessage extends WxMpXmlOutMessage {
@XmlElement(name="Content")
@XmlJavaTypeAdapter(AdapterCDATA.class)
private String content;
- public WxXmlOutTextMessage() {
+ public WxMpXmlOutTextMessage() {
this.msgType = WxConsts.XML_MSG_TEXT;
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutVideoMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVideoMessage.java
similarity index 88%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutVideoMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVideoMessage.java
index 08498084..4b192cf7 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutVideoMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVideoMessage.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.AdapterCDATA;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,17 +9,14 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.xml.AdapterCDATA;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutVideoMessage extends WxXmlOutMessage {
+public class WxMpXmlOutVideoMessage extends WxMpXmlOutMessage {
@XmlElement(name = "Video")
protected final Video video = new Video();
- public WxXmlOutVideoMessage() {
+ public WxMpXmlOutVideoMessage() {
this.msgType = WxConsts.XML_MSG_VIDEO;
}
diff --git a/src/main/java/me/chanjar/weixin/bean/WxXmlOutVoiceMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVoiceMessage.java
similarity index 71%
rename from src/main/java/me/chanjar/weixin/bean/WxXmlOutVoiceMessage.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVoiceMessage.java
index d7023268..59f164ba 100644
--- a/src/main/java/me/chanjar/weixin/bean/WxXmlOutVoiceMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutVoiceMessage.java
@@ -1,4 +1,7 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.xml.MediaIdMarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,18 +9,15 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.util.xml.MediaIdMarshaller;
-
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
-public class WxXmlOutVoiceMessage extends WxXmlOutMessage {
+public class WxMpXmlOutVoiceMessage extends WxMpXmlOutMessage {
@XmlElement(name="Voice")
@XmlJavaTypeAdapter(MediaIdMarshaller.class)
private String mediaId;
- public WxXmlOutVoiceMessage() {
+ public WxMpXmlOutVoiceMessage() {
this.msgType = WxConsts.XML_MSG_VOICE;
}
diff --git a/src/main/java/me/chanjar/weixin/bean/custombuilder/BaseBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/BaseBuilder.java
similarity index 57%
rename from src/main/java/me/chanjar/weixin/bean/custombuilder/BaseBuilder.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/BaseBuilder.java
index 5cb924b0..18bf81f9 100644
--- a/src/main/java/me/chanjar/weixin/bean/custombuilder/BaseBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/BaseBuilder.java
@@ -1,6 +1,6 @@
-package me.chanjar.weixin.bean.custombuilder;
+package me.chanjar.weixin.mp.bean.custombuilder;
-import me.chanjar.weixin.bean.WxCustomMessage;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
public class BaseBuilder {
protected String msgType;
@@ -11,8 +11,8 @@ public class BaseBuilder {
return (T) this;
}
- public WxCustomMessage build() {
- WxCustomMessage m = new WxCustomMessage();
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = new WxMpCustomMessage();
m.setMsgType(this.msgType);
m.setToUser(this.toUser);
return m;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/ImageBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/ImageBuilder.java
new file mode 100644
index 00000000..1c37b46e
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/ImageBuilder.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.mp.bean.custombuilder;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
+
+/**
+ * 获得消息builder
+ *
+ * 用法: WxMpCustomMessage m = WxMpCustomMessage.IMAGE().mediaId(...).toUser(...).build();
+ *
+ * @author chanjarster
+ *
+ */
+public final class ImageBuilder extends BaseBuilder {
+ private String mediaId;
+
+ public ImageBuilder() {
+ this.msgType = WxConsts.CUSTOM_MSG_IMAGE;
+ }
+
+ public ImageBuilder mediaId(String media_id) {
+ this.mediaId = media_id;
+ return this;
+ }
+
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
+ m.setMediaId(this.mediaId);
+ return m;
+ }
+}
diff --git a/src/main/java/me/chanjar/weixin/bean/custombuilder/MusicBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/MusicBuilder.java
similarity index 82%
rename from src/main/java/me/chanjar/weixin/bean/custombuilder/MusicBuilder.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/MusicBuilder.java
index b0c587b3..5c1abe38 100644
--- a/src/main/java/me/chanjar/weixin/bean/custombuilder/MusicBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/MusicBuilder.java
@@ -1,12 +1,12 @@
-package me.chanjar.weixin.bean.custombuilder;
+package me.chanjar.weixin.mp.bean.custombuilder;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.WxCustomMessage;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
/**
* 音乐消息builder
*
- * 用法: WxCustomMessage m = WxCustomMessage.MUSIC()
+ * 用法: WxMpCustomMessage m = WxMpCustomMessage.MUSIC()
* .musicUrl(...)
* .hqMusicUrl(...)
* .title(...)
@@ -52,8 +52,8 @@ public final class MusicBuilder extends BaseBuilder {
return this;
}
- public WxCustomMessage build() {
- WxCustomMessage m = super.build();
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
m.setMusicUrl(this.musicUrl);
m.setHqMusicUrl(this.hqMusicUrl);
m.setTitle(title);
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/NewsBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/NewsBuilder.java
new file mode 100644
index 00000000..825e72f8
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/NewsBuilder.java
@@ -0,0 +1,36 @@
+package me.chanjar.weixin.mp.bean.custombuilder;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 图文消息builder
+ *
+ * 用法:
+ * WxMpCustomMessage m = WxMpCustomMessage.NEWS().addArticle(article).toUser(...).build();
+ *
+ * @author chanjarster
+ *
+ */
+public final class NewsBuilder extends BaseBuilder {
+
+ private List articles = new ArrayList();
+
+ public NewsBuilder() {
+ this.msgType = WxConsts.CUSTOM_MSG_NEWS;
+ }
+
+ public NewsBuilder addArticle(WxMpCustomMessage.WxArticle article) {
+ this.articles.add(article);
+ return this;
+ }
+
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
+ m.setArticles(this.articles);
+ return m;
+ }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/TextBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/TextBuilder.java
new file mode 100644
index 00000000..11249d6d
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/TextBuilder.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.mp.bean.custombuilder;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
+
+/**
+ * 文本消息builder
+ *
+ * 用法: WxMpCustomMessage m = WxMpCustomMessage.TEXT().content(...).toUser(...).build();
+ *
+ * @author chanjarster
+ *
+ */
+public final class TextBuilder extends BaseBuilder {
+ private String content;
+
+ public TextBuilder() {
+ this.msgType = WxConsts.CUSTOM_MSG_TEXT;
+ }
+
+ public TextBuilder content(String content) {
+ this.content = content;
+ return this;
+ }
+
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
+ m.setContent(this.content);
+ return m;
+ }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VideoBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VideoBuilder.java
new file mode 100644
index 00000000..a871d491
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VideoBuilder.java
@@ -0,0 +1,58 @@
+package me.chanjar.weixin.mp.bean.custombuilder;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
+
+/**
+ * 视频消息builder
+ *
+ * 用法: WxMpCustomMessage m = WxMpCustomMessage.VOICE()
+ * .mediaId(...)
+ * .title(...)
+ * .thumbMediaId(..)
+ * .description(..)
+ * .toUser(...)
+ * .build();
+ *
+ * @author chanjarster
+ *
+ */
+public final class VideoBuilder extends BaseBuilder {
+ private String mediaId;
+ private String title;
+ private String description;
+ private String thumbMediaId;
+
+ public VideoBuilder() {
+ this.msgType = WxConsts.CUSTOM_MSG_VIDEO;
+ }
+
+ public VideoBuilder mediaId(String mediaId) {
+ this.mediaId = mediaId;
+ return this;
+ }
+
+ public VideoBuilder title(String title) {
+ this.title = title;
+ return this;
+ }
+
+ public VideoBuilder description(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public VideoBuilder thumbMediaId(String thumb_media_id) {
+ this.thumbMediaId = thumb_media_id;
+ return this;
+ }
+
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
+ m.setMediaId(this.mediaId);
+ m.setTitle(title);
+ m.setDescription(description);
+ m.setThumbMediaId(thumbMediaId);
+ return m;
+ }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VoiceBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VoiceBuilder.java
new file mode 100644
index 00000000..3f81aeb0
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/custombuilder/VoiceBuilder.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.mp.bean.custombuilder;
+
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
+
+/**
+ * 语音消息builder
+ *
+ * 用法: WxMpCustomMessage m = WxMpCustomMessage.VOICE().mediaId(...).toUser(...).build();
+ *
+ * @author chanjarster
+ *
+ */
+public final class VoiceBuilder extends BaseBuilder {
+ private String mediaId;
+
+ public VoiceBuilder() {
+ this.msgType = WxConsts.CUSTOM_MSG_VOICE;
+ }
+
+ public VoiceBuilder mediaId(String media_id) {
+ this.mediaId = media_id;
+ return this;
+ }
+
+ public WxMpCustomMessage build() {
+ WxMpCustomMessage m = super.build();
+ m.setMediaId(this.mediaId);
+ return m;
+ }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/BaseBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/BaseBuilder.java
new file mode 100644
index 00000000..77db2617
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/BaseBuilder.java
@@ -0,0 +1,29 @@
+package me.chanjar.weixin.mp.bean.outxmlbuilder;
+
+import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
+
+public abstract class BaseBuilder {
+
+ protected String toUserName;
+
+ protected String fromUserName;
+
+ public BuilderType toUser(String touser) {
+ this.toUserName = touser;
+ return (BuilderType) this;
+ }
+
+ public BuilderType fromUser(String fromusername) {
+ this.fromUserName = fromusername;
+ return (BuilderType) this;
+ }
+
+ public abstract ValueType build();
+
+ public void setCommon(WxMpXmlOutMessage m) {
+ m.setToUserName(this.toUserName);
+ m.setFromUserName(this.fromUserName);
+ m.setCreateTime(System.currentTimeMillis() / 1000l);
+ }
+
+}
diff --git a/src/main/java/me/chanjar/weixin/bean/outxmlbuilder/ImageBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/ImageBuilder.java
similarity index 56%
rename from src/main/java/me/chanjar/weixin/bean/outxmlbuilder/ImageBuilder.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/ImageBuilder.java
index 0cb18ccc..f127406a 100644
--- a/src/main/java/me/chanjar/weixin/bean/outxmlbuilder/ImageBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/ImageBuilder.java
@@ -1,12 +1,12 @@
-package me.chanjar.weixin.bean.outxmlbuilder;
+package me.chanjar.weixin.mp.bean.outxmlbuilder;
-import me.chanjar.weixin.bean.WxXmlOutImageMessage;
+import me.chanjar.weixin.mp.bean.WxMpMpXmlOutImageMessage;
/**
* 图片消息builder
* @author chanjarster
*/
-public final class ImageBuilder extends BaseBuilder {
+public final class ImageBuilder extends BaseBuilder {
private String mediaId;
@@ -15,8 +15,8 @@ public final class ImageBuilder extends BaseBuilder {
+public final class MusicBuilder extends BaseBuilder {
private String title;
private String description;
@@ -40,8 +40,8 @@ public final class MusicBuilder extends BaseBuilder {
+
+ protected final List articles = new ArrayList();
+
+ public NewsBuilder addArticle(WxMpXmlOutMewsMessage.Item item) {
+ this.articles.add(item);
+ return this;
+ }
+
+ public WxMpXmlOutMewsMessage build() {
+ WxMpXmlOutMewsMessage m = new WxMpXmlOutMewsMessage();
+ for(WxMpXmlOutMewsMessage.Item item : articles) {
+ m.addArticle(item);
+ }
+ setCommon(m);
+ return m;
+ }
+
+}
diff --git a/src/main/java/me/chanjar/weixin/bean/outxmlbuilder/TextBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/TextBuilder.java
similarity index 57%
rename from src/main/java/me/chanjar/weixin/bean/outxmlbuilder/TextBuilder.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/TextBuilder.java
index 56393a33..8352ddea 100644
--- a/src/main/java/me/chanjar/weixin/bean/outxmlbuilder/TextBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/TextBuilder.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.bean.outxmlbuilder;
+package me.chanjar.weixin.mp.bean.outxmlbuilder;
-import me.chanjar.weixin.bean.WxXmlOutTextMessage;
+import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
/**
* 文本消息builder
* @author chanjarster
*
*/
-public final class TextBuilder extends BaseBuilder {
+public final class TextBuilder extends BaseBuilder {
private String content;
public TextBuilder content(String content) {
@@ -15,8 +15,8 @@ public final class TextBuilder extends BaseBuilder {
+public final class VideoBuilder extends BaseBuilder {
private String mediaId;
private String title;
@@ -26,8 +26,8 @@ public final class VideoBuilder extends BaseBuilder {
+public final class VoiceBuilder extends BaseBuilder {
private String mediaId;
@@ -15,8 +15,8 @@ public final class VoiceBuilder extends BaseBuilder
@@ -13,7 +13,7 @@ import me.chanjar.weixin.util.json.WxGsonBuilder;
* @author chanjarster
*
*/
-public class WxMassSendResult {
+public class WxMpMassSendResult {
private String errorCode;
private String errorMsg;
@@ -43,8 +43,8 @@ public class WxMassSendResult {
this.msgId = msgId;
}
- public static WxMassSendResult fromJson(String json) {
- return WxGsonBuilder.create().fromJson(json, WxMassSendResult.class);
+ public static WxMpMassSendResult fromJson(String json) {
+ return WxMpGsonBuilder.create().fromJson(json, WxMpMassSendResult.class);
}
@Override
diff --git a/src/main/java/me/chanjar/weixin/bean/result/WxMassUploadResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassUploadResult.java
similarity index 73%
rename from src/main/java/me/chanjar/weixin/bean/result/WxMassUploadResult.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassUploadResult.java
index 074ea3d3..e0ed145b 100644
--- a/src/main/java/me/chanjar/weixin/bean/result/WxMassUploadResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassUploadResult.java
@@ -1,6 +1,6 @@
-package me.chanjar.weixin.bean.result;
+package me.chanjar.weixin.mp.bean.result;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
*
@@ -10,7 +10,7 @@ import me.chanjar.weixin.util.json.WxGsonBuilder;
* @author chanjarster
*
*/
-public class WxMassUploadResult {
+public class WxMpMassUploadResult {
private String type;
private String mediaId;
@@ -40,8 +40,8 @@ public class WxMassUploadResult {
this.createdAt = createdAt;
}
- public static WxMassUploadResult fromJson(String json) {
- return WxGsonBuilder.create().fromJson(json, WxMassUploadResult.class);
+ public static WxMpMassUploadResult fromJson(String json) {
+ return WxMpGsonBuilder.create().fromJson(json, WxMpMassUploadResult.class);
}
@Override
diff --git a/src/main/java/me/chanjar/weixin/bean/result/WxQrCodeTicket.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpQrCodeTicket.java
similarity index 69%
rename from src/main/java/me/chanjar/weixin/bean/result/WxQrCodeTicket.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpQrCodeTicket.java
index d9da02aa..bf240c57 100644
--- a/src/main/java/me/chanjar/weixin/bean/result/WxQrCodeTicket.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpQrCodeTicket.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.bean.result;
+package me.chanjar.weixin.mp.bean.result;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
* 换取二维码的Ticket
*
* @author chanjarster
*/
-public class WxQrCodeTicket {
+public class WxMpQrCodeTicket {
protected String ticket;
protected int expire_seconds = -1;
@@ -40,7 +40,7 @@ public class WxQrCodeTicket {
this.url = url;
}
- public static WxQrCodeTicket fromJson(String json) {
- return WxGsonBuilder.INSTANCE.create().fromJson(json, WxQrCodeTicket.class);
+ public static WxMpQrCodeTicket fromJson(String json) {
+ return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpQrCodeTicket.class);
}
}
diff --git a/src/main/java/me/chanjar/weixin/bean/result/WxUser.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
similarity index 88%
rename from src/main/java/me/chanjar/weixin/bean/result/WxUser.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
index a3103fc6..fa4aee6d 100644
--- a/src/main/java/me/chanjar/weixin/bean/result/WxUser.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.bean.result;
+package me.chanjar.weixin.mp.bean.result;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
/**
* 微信用户信息
* @author chanjarster
*
*/
-public class WxUser {
+public class WxMpUser {
protected boolean subscribe;
protected String openId;
@@ -88,8 +88,8 @@ public class WxUser {
this.unionId = unionId;
}
- public static WxUser fromJson(String json) {
- return WxGsonBuilder.INSTANCE.create().fromJson(json, WxUser.class);
+ public static WxMpUser fromJson(String json) {
+ return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUser.class);
}
}
diff --git a/src/main/java/me/chanjar/weixin/bean/result/WxUserList.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserList.java
similarity index 75%
rename from src/main/java/me/chanjar/weixin/bean/result/WxUserList.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserList.java
index fbcce218..489d5bed 100644
--- a/src/main/java/me/chanjar/weixin/bean/result/WxUserList.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUserList.java
@@ -1,17 +1,16 @@
-package me.chanjar.weixin.bean.result;
+package me.chanjar.weixin.mp.bean.result;
+
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.util.ArrayList;
import java.util.List;
-import me.chanjar.weixin.util.json.WxGsonBuilder;
-
-
/**
* 关注者列表
* @author chanjarster
*
*/
-public class WxUserList {
+public class WxMpUserList {
protected int total = -1;
protected int count = -1;
@@ -42,7 +41,7 @@ public class WxUserList {
this.nextOpenId = nextOpenId;
}
- public static WxUserList fromJson(String json) {
- return WxGsonBuilder.INSTANCE.create().fromJson(json, WxUserList.class);
+ public static WxMpUserList fromJson(String json) {
+ return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUserList.class);
}
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
new file mode 100755
index 00000000..39165b5c
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
@@ -0,0 +1,41 @@
+/**
+ * 对公众平台发送给公众账号的消息加解密示例代码.
+ *
+ * @copyright Copyright (c) 1998-2014 Tencent Inc.
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * 针对org.apache.commons.codec.binary.Base64,
+ * 需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本)
+ * 官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi
+ */
+package me.chanjar.weixin.mp.util.crypto;
+
+import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+import org.apache.commons.codec.binary.Base64;
+
+public class WxMpCryptUtil extends me.chanjar.weixin.common.util.crypto.WxCryptUtil {
+
+ /**
+ * 构造函数
+ *
+ * @param wxMpConfigStorage
+ */
+ public WxMpCryptUtil(WxMpConfigStorage wxMpConfigStorage) {
+ /*
+ * @param token 公众平台上,开发者设置的token
+ * @param encodingAesKey 公众平台上,开发者设置的EncodingAESKey
+ * @param appId 公众平台appid
+ */
+ String encodingAesKey = wxMpConfigStorage.getAesKey();
+ String token = wxMpConfigStorage.getToken();
+ String appId = wxMpConfigStorage.getAppId();
+
+ this.token = token;
+ this.appidOrCorpid = appId;
+ this.aesKey = Base64.decodeBase64(encodingAesKey + "=");
+ }
+
+}
diff --git a/src/main/java/me/chanjar/weixin/util/http/QrCodeRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/QrCodeRequestExecutor.java
similarity index 72%
rename from src/main/java/me/chanjar/weixin/util/http/QrCodeRequestExecutor.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/QrCodeRequestExecutor.java
index b33fb501..554c9b8f 100644
--- a/src/main/java/me/chanjar/weixin/util/http/QrCodeRequestExecutor.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/QrCodeRequestExecutor.java
@@ -1,31 +1,33 @@
-package me.chanjar.weixin.util.http;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLEncoder;
-import java.util.UUID;
+package me.chanjar.weixin.mp.util.http;
+import me.chanjar.weixin.common.bean.result.WxError;
+import me.chanjar.weixin.common.util.fs.FileUtils;
+import me.chanjar.weixin.common.util.http.InputStreamResponseHandler;
+import me.chanjar.weixin.common.util.http.RequestExecutor;
+import me.chanjar.weixin.common.util.http.Utf8ResponseHandler;
+import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
+import me.chanjar.weixin.common.exception.WxErrorException;
import org.apache.http.Header;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.ContentType;
-import me.chanjar.weixin.bean.result.WxError;
-import me.chanjar.weixin.bean.result.WxQrCodeTicket;
-import me.chanjar.weixin.exception.WxErrorException;
-import me.chanjar.weixin.util.fs.FileUtils;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.UUID;
/**
* 获得QrCode图片 请求执行器
* @author chanjarster
*
*/
-public class QrCodeRequestExecutor implements RequestExecutor {
+public class QrCodeRequestExecutor implements RequestExecutor {
@Override
- public File execute(String uri, WxQrCodeTicket ticket) throws WxErrorException, ClientProtocolException, IOException {
+ public File execute(String uri, WxMpQrCodeTicket ticket) throws WxErrorException, ClientProtocolException, IOException {
if (ticket != null) {
if (uri.indexOf('?') == -1) {
uri += '?';
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxCustomMessageGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpCustomMessageGsonAdapter.java
similarity index 82%
rename from src/main/java/me/chanjar/weixin/util/json/WxCustomMessageGsonAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpCustomMessageGsonAdapter.java
index d1dc55c6..6ff4b773 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxCustomMessageGsonAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpCustomMessageGsonAdapter.java
@@ -6,27 +6,22 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
-import java.lang.reflect.Type;
-
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.WxCustomMessage;
+import com.google.gson.*;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
/**
*
* @author qianjia
*
*/
-public class WxCustomMessageGsonAdapter implements JsonSerializer {
+public class WxMpCustomMessageGsonAdapter implements JsonSerializer {
- public JsonElement serialize(WxCustomMessage message, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpCustomMessage message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject();
messageJson.addProperty("touser", message.getToUser());
messageJson.addProperty("msgtype", message.getMsgType());
@@ -70,7 +65,7 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer, JsonDeserializer {
+public class WxMpGroupGsonAdapter implements JsonSerializer, JsonDeserializer {
- public JsonElement serialize(WxGroup group, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpGroup group, Type typeOfSrc, JsonSerializationContext context) {
JsonObject json = new JsonObject();
JsonObject groupJson = new JsonObject();
groupJson.addProperty("name", group.getName());
@@ -37,8 +31,8 @@ public class WxGroupGsonAdapter implements JsonSerializer, JsonDeserial
return json;
}
- public WxGroup deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- WxGroup group = new WxGroup();
+ public WxMpGroup deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ WxMpGroup group = new WxMpGroup();
JsonObject groupJson = json.getAsJsonObject();
if (json.getAsJsonObject().get("group") != null) {
groupJson = json.getAsJsonObject().get("group").getAsJsonObject();
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
new file mode 100644
index 00000000..021b660d
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
@@ -0,0 +1,31 @@
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.result.*;
+
+public class WxMpGsonBuilder {
+
+ public static final GsonBuilder INSTANCE = new GsonBuilder();
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxMpCustomMessage.class, new WxMpCustomMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassGroupMessage.class, new WxMpMassMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpGroup.class, new WxMpGroupGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUser.class, new WxUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
+ }
+
+ public static Gson create() {
+ return INSTANCE.create();
+ }
+
+}
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassMessageGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassMessageGsonAdapter.java
similarity index 85%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassMessageGsonAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassMessageGsonAdapter.java
index cd985a46..5b9a9845 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassMessageGsonAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassMessageGsonAdapter.java
@@ -6,26 +6,25 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
-
-import java.lang.reflect.Type;
-
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.WxMassGroupMessage;
+package me.chanjar.weixin.mp.util.json;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage;
+
+import java.lang.reflect.Type;
/**
*
* @author qianjia
*
*/
-public class WxMassMessageGsonAdapter implements JsonSerializer {
+public class WxMpMassMessageGsonAdapter implements JsonSerializer {
- public JsonElement serialize(WxMassGroupMessage message, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpMassGroupMessage message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject();
JsonObject filter = new JsonObject();
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassNewsGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassNewsGsonAdapter.java
similarity index 73%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassNewsGsonAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassNewsGsonAdapter.java
index fcaa4c1a..5ba78594 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassNewsGsonAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassNewsGsonAdapter.java
@@ -6,30 +6,25 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
-import java.lang.reflect.Type;
-
-import me.chanjar.weixin.bean.WxMassNews;
+import com.google.gson.*;
+import me.chanjar.weixin.mp.bean.WxMpMassNews;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
/**
*
* @author qianjia
*
*/
-public class WxMassNewsGsonAdapter implements JsonSerializer {
+public class WxMpMassNewsGsonAdapter implements JsonSerializer {
- public JsonElement serialize(WxMassNews message, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpMassNews message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject newsJson = new JsonObject();
JsonArray articleJsonArray = new JsonArray();
- for (WxMassNews.WxMassNewsArticle article : message.getArticles()) {
+ for (WxMpMassNews.WxMpMassNewsArticle article : message.getArticles()) {
JsonObject articleJson = new JsonObject();
articleJson.addProperty("thumb_media_id", article.getThumbMediaId());
articleJson.addProperty("title", article.getTitle());
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassOpenIdsMessageGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassOpenIdsMessageGsonAdapter.java
similarity index 77%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassOpenIdsMessageGsonAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassOpenIdsMessageGsonAdapter.java
index 3cb1e7f6..cd03addf 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassOpenIdsMessageGsonAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassOpenIdsMessageGsonAdapter.java
@@ -6,28 +6,22 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
-import java.lang.reflect.Type;
-
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.WxMassOpenIdsMessage;
+import com.google.gson.*;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
/**
*
* @author qianjia
*
*/
-public class WxMassOpenIdsMessageGsonAdapter implements JsonSerializer {
+public class WxMpMassOpenIdsMessageGsonAdapter implements JsonSerializer {
- public JsonElement serialize(WxMassOpenIdsMessage message, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpMassOpenIdsMessage message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject();
JsonArray toUsers = new JsonArray();
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassSendResultAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassSendResultAdapter.java
similarity index 73%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassSendResultAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassSendResultAdapter.java
index ad5dbd6e..99fc02b8 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassSendResultAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassSendResultAdapter.java
@@ -6,10 +6,11 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
import com.google.gson.*;
-import me.chanjar.weixin.bean.result.WxMassSendResult;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
import java.lang.reflect.Type;
@@ -18,10 +19,10 @@ import java.lang.reflect.Type;
* @author Daniel Qian
*
*/
-public class WxMassSendResultAdapter implements JsonDeserializer {
+public class WxMpMassSendResultAdapter implements JsonDeserializer {
- public WxMassSendResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- WxMassSendResult sendResult = new WxMassSendResult();
+ public WxMpMassSendResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ WxMpMassSendResult sendResult = new WxMpMassSendResult();
JsonObject sendResultJsonObject = json.getAsJsonObject();
if (sendResultJsonObject.get("errcode") != null && !sendResultJsonObject.get("errcode").isJsonNull()) {
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassUploadResultAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassUploadResultAdapter.java
similarity index 73%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassUploadResultAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassUploadResultAdapter.java
index c58f3524..73f03382 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassUploadResultAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassUploadResultAdapter.java
@@ -6,10 +6,11 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
import com.google.gson.*;
-import me.chanjar.weixin.bean.result.WxMassUploadResult;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import java.lang.reflect.Type;
@@ -18,10 +19,10 @@ import java.lang.reflect.Type;
* @author Daniel Qian
*
*/
-public class WxMassUploadResultAdapter implements JsonDeserializer {
+public class WxMpMassUploadResultAdapter implements JsonDeserializer {
- public WxMassUploadResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- WxMassUploadResult uploadResult = new WxMassUploadResult();
+ public WxMpMassUploadResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ WxMpMassUploadResult uploadResult = new WxMpMassUploadResult();
JsonObject uploadResultJsonObject = json.getAsJsonObject();
if (uploadResultJsonObject.get("type") != null && !uploadResultJsonObject.get("type").isJsonNull()) {
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxMassVideoAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassVideoAdapter.java
similarity index 64%
rename from src/main/java/me/chanjar/weixin/util/json/WxMassVideoAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassVideoAdapter.java
index ba98acf8..d4b37b81 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxMassVideoAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpMassVideoAdapter.java
@@ -6,10 +6,13 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
-import com.google.gson.*;
-import me.chanjar.weixin.bean.WxMassVideo;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import me.chanjar.weixin.mp.bean.WxMpMassVideo;
import java.lang.reflect.Type;
@@ -18,9 +21,9 @@ import java.lang.reflect.Type;
* @author Daniel Qian
*
*/
-public class WxMassVideoAdapter implements JsonSerializer {
+public class WxMpMassVideoAdapter implements JsonSerializer {
- public JsonElement serialize(WxMassVideo message, Type typeOfSrc, JsonSerializationContext context) {
+ public JsonElement serialize(WxMpMassVideo message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject();
messageJson.addProperty("media_id", message.getMediaId());
messageJson.addProperty("description", message.getDescription());
diff --git a/src/main/java/me/chanjar/weixin/util/json/WxQrCodeTicketAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxQrCodeTicketAdapter.java
similarity index 77%
rename from src/main/java/me/chanjar/weixin/util/json/WxQrCodeTicketAdapter.java
rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxQrCodeTicketAdapter.java
index f50d9fb0..522d70d0 100644
--- a/src/main/java/me/chanjar/weixin/util/json/WxQrCodeTicketAdapter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxQrCodeTicketAdapter.java
@@ -6,11 +6,11 @@
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
-package me.chanjar.weixin.util.json;
+package me.chanjar.weixin.mp.util.json;
import com.google.gson.*;
-import me.chanjar.weixin.bean.result.WxMassUploadResult;
-import me.chanjar.weixin.bean.result.WxQrCodeTicket;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import java.lang.reflect.Type;
@@ -19,10 +19,10 @@ import java.lang.reflect.Type;
* @author Daniel Qian
*
*/
-public class WxQrCodeTicketAdapter implements JsonDeserializer {
+public class WxQrCodeTicketAdapter implements JsonDeserializer {
- public WxQrCodeTicket deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- WxQrCodeTicket ticket = new WxQrCodeTicket();
+ public WxMpQrCodeTicket deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ WxMpQrCodeTicket ticket = new WxMpQrCodeTicket();
JsonObject ticketJsonObject = json.getAsJsonObject();
if (ticketJsonObject.get("ticket") != null && !ticketJsonObject.get("ticket").isJsonNull()) {
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserGsonAdapter.java
new file mode 100644
index 00000000..cbbc3080
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserGsonAdapter.java
@@ -0,0 +1,48 @@
+/*
+ * KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
+ *
+ * This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
+ * only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
+ * arose from modification of the original source, or other redistribution of this source
+ * is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
+ */
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.*;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
+
+import java.lang.reflect.Type;
+
+/**
+ *
+ * @author qianjia
+ *
+ */
+public class WxUserGsonAdapter implements JsonDeserializer {
+
+ public WxMpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ JsonObject o = json.getAsJsonObject();
+ WxMpUser wxMpUser = new WxMpUser();
+ wxMpUser.setSubscribe(new Integer(0).equals(GsonHelper.getInteger(o, "subscribe")) ? false : true);
+ wxMpUser.setCity(GsonHelper.getString(o, "city"));
+ wxMpUser.setCountry(GsonHelper.getString(o, "country"));
+ wxMpUser.setHeadImgUrl(GsonHelper.getString(o, "headimgurl"));
+ wxMpUser.setLanguage(GsonHelper.getString(o, "language"));
+ wxMpUser.setNickname(GsonHelper.getString(o, "nickname"));
+ wxMpUser.setOpenId(GsonHelper.getString(o, "openid"));
+ wxMpUser.setProvince(GsonHelper.getString(o, "province"));
+ wxMpUser.setSubscribeTime(GsonHelper.getLong(o, "subscribe_time"));
+ wxMpUser.setUnionId(GsonHelper.getString(o, "unionid"));
+ Integer sex = GsonHelper.getInteger(o, "sex");
+ if(new Integer(1).equals(sex)) {
+ wxMpUser.setSex("男");
+ } else if (new Integer(2).equals(sex)) {
+ wxMpUser.setSex("女");
+ } else {
+ wxMpUser.setSex("未知");
+ }
+ return wxMpUser;
+ }
+
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserListGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserListGsonAdapter.java
new file mode 100644
index 00000000..ec65735e
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxUserListGsonAdapter.java
@@ -0,0 +1,37 @@
+/*
+ * KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
+ *
+ * This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
+ * only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
+ * arose from modification of the original source, or other redistribution of this source
+ * is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
+ */
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.*;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.mp.bean.result.WxMpUserList;
+
+import java.lang.reflect.Type;
+
+/**
+ *
+ * @author qianjia
+ *
+ */
+public class WxUserListGsonAdapter implements JsonDeserializer {
+
+ public WxMpUserList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+ JsonObject o = json.getAsJsonObject();
+ WxMpUserList wxMpUserList = new WxMpUserList();
+ wxMpUserList.setTotal(GsonHelper.getInteger(o, "total"));
+ wxMpUserList.setCount(GsonHelper.getInteger(o, "count"));
+ wxMpUserList.setNextOpenId(GsonHelper.getString(o, "next_openid"));
+ JsonArray data = o.get("data").getAsJsonObject().get("openid").getAsJsonArray();
+ for (int i = 0; i < data.size(); i++) {
+ wxMpUserList.getOpenIds().add(GsonHelper.getAsString(data.get(i)));
+ }
+ return wxMpUserList;
+ }
+
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XmlTransformer.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XmlTransformer.java
new file mode 100644
index 00000000..5e619746
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XmlTransformer.java
@@ -0,0 +1,90 @@
+package me.chanjar.weixin.mp.util.xml;
+
+import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
+import me.chanjar.weixin.mp.bean.*;
+import org.xml.sax.InputSource;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.io.*;
+
+public class XmlTransformer {
+
+ protected static final JAXBContext JAXB_CONTEXT = initJAXBContext();
+
+ /**
+ * xml -> pojo
+ *
+ * @param clazz
+ * @param xml
+ * @return
+ * @throws JAXBException
+ */
+ @SuppressWarnings("unchecked")
+ public static T fromXml(Class clazz, String xml) throws JAXBException {
+ Unmarshaller um = JAXB_CONTEXT.createUnmarshaller();
+ T object = (T) um.unmarshal(new StringReader(xml));
+ return object;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T fromXml(Class clazz, InputStream is) throws JAXBException {
+ Unmarshaller um = JAXB_CONTEXT.createUnmarshaller();
+ InputSource inputSource = new InputSource(is);
+ inputSource.setEncoding("utf-8");
+ T object = (T) um.unmarshal(inputSource);
+ return object;
+ }
+
+ /**
+ * pojo -> xml
+ *
+ * @param clazz
+ * @param object
+ * @return
+ * @throws JAXBException
+ */
+ public static String toXml(Class clazz, T object) throws JAXBException {
+ StringWriter stringWriter = new StringWriter();
+ toXml(clazz, object, stringWriter);
+ return stringWriter.getBuffer().toString();
+ }
+
+ public static void toXml(Class clazz, T object, Writer writer) throws JAXBException {
+ Marshaller m = JAXB_CONTEXT.createMarshaller();
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+ m.setProperty(CharacterEscapeHandler.class.getName(), CHAR_ESCAPE_HANDLER);
+ m.marshal(object, writer);
+ }
+
+ protected static final CharacterEscapeHandler CHAR_ESCAPE_HANDLER = new CharacterUnescapeHandler();
+
+ protected static class CharacterUnescapeHandler implements CharacterEscapeHandler {
+ public void escape(char[] ac, int i, int j, boolean flag, Writer writer) throws IOException {
+ writer.write(ac, i, j);
+ }
+ }
+
+ private static JAXBContext initJAXBContext() {
+ /*
+ * JAXBContext对象是线程安全的,根据官方文档的建议将对象作为全局实例
+ * https://jaxb.java.net/guide/Performance_and_thread_safety.html
+ */
+ try {
+ return JAXBContext.newInstance(
+ WxMpXmlOutMessage.class,
+ WxMpMpXmlOutImageMessage.class,
+ WxMpXmlOutMewsMessage.class,
+ WxMpXmlOutMusicMessage.class,
+ WxMpXmlOutTextMessage.class,
+ WxMpXmlOutVideoMessage.class,
+ WxMpXmlOutVoiceMessage.class,
+ WxMpXmlMessage.class);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/src/test/java/me/chanjar/weixin/api/ApiTestModule.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/ApiTestModule.java
similarity index 73%
rename from src/test/java/me/chanjar/weixin/api/ApiTestModule.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/ApiTestModule.java
index 68a9f8a2..ca4cbc13 100644
--- a/src/test/java/me/chanjar/weixin/api/ApiTestModule.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/ApiTestModule.java
@@ -1,4 +1,4 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.io.InputStream;
@@ -9,10 +9,6 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import me.chanjar.weixin.api.WxInMemoryConfigStorage;
-import me.chanjar.weixin.api.WxServiceImpl;
-import me.chanjar.weixin.util.xml.XmlTransformer;
-
import com.google.inject.Binder;
import com.google.inject.Module;
import org.xml.sax.InputSource;
@@ -23,12 +19,12 @@ public class ApiTestModule implements Module {
public void configure(Binder binder) {
try {
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml");
- WxXmlConfigStorage config = fromXml(WxXmlConfigStorage.class, is1);
- WxServiceImpl wxService = new WxServiceImpl();
- wxService.setWxConfigStorage(config);
+ WxXmlMpInMemoryConfigStorage config = fromXml(WxXmlMpInMemoryConfigStorage.class, is1);
+ WxMpServiceImpl wxService = new WxMpServiceImpl();
+ wxService.setWxMpConfigStorage(config);
- binder.bind(WxServiceImpl.class).toInstance(wxService);
- binder.bind(WxConfigStorage.class).toInstance(config);
+ binder.bind(WxMpServiceImpl.class).toInstance(wxService);
+ binder.bind(WxMpConfigStorage.class).toInstance(config);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
@@ -44,7 +40,7 @@ public class ApiTestModule implements Module {
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
- public static class WxXmlConfigStorage extends WxInMemoryConfigStorage {
+ public static class WxXmlMpInMemoryConfigStorage extends WxMpInMemoryConfigStorage {
protected String openId;
diff --git a/src/test/java/me/chanjar/weixin/api/WxBaseAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
similarity index 76%
rename from src/test/java/me/chanjar/weixin/api/WxBaseAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
index af524615..65d88928 100644
--- a/src/test/java/me/chanjar/weixin/api/WxBaseAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
@@ -1,11 +1,11 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -19,10 +19,10 @@ import com.google.inject.Inject;
public class WxBaseAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
public void testRefreshAccessToken() throws WxErrorException {
- WxConfigStorage configStorage = wxService.wxConfigStorage;
+ WxMpConfigStorage configStorage = wxService.wxMpConfigStorage;
String before = configStorage.getAccessToken();
wxService.accessTokenRefresh();
diff --git a/src/test/java/me/chanjar/weixin/api/WxCustomMessageAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpCustomMessageAPITest.java
similarity index 57%
rename from src/test/java/me/chanjar/weixin/api/WxCustomMessageAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpCustomMessageAPITest.java
index d8a955a5..04e8400e 100644
--- a/src/test/java/me/chanjar/weixin/api/WxCustomMessageAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpCustomMessageAPITest.java
@@ -1,10 +1,11 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.bean.WxCustomMessage;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -15,14 +16,14 @@ import com.google.inject.Inject;
*/
@Test(groups="customMessageAPI", dependsOnGroups = "baseAPI")
@Guice(modules = ApiTestModule.class)
-public class WxCustomMessageAPITest {
+public class WxMpCustomMessageAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
public void testSendCustomMessage() throws WxErrorException {
- ApiTestModule.WxXmlConfigStorage configStorage = (ApiTestModule.WxXmlConfigStorage) wxService.wxConfigStorage;
- WxCustomMessage message = new WxCustomMessage();
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ WxMpCustomMessage message = new WxMpCustomMessage();
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT);
message.setToUser(configStorage.getOpenId());
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:Hello World");
diff --git a/src/test/java/me/chanjar/weixin/api/WxGroupAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpGroupAPITest.java
similarity index 69%
rename from src/test/java/me/chanjar/weixin/api/WxGroupAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpGroupAPITest.java
index 74abb563..ca6f20ed 100644
--- a/src/test/java/me/chanjar/weixin/api/WxGroupAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpGroupAPITest.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.util.List;
+import me.chanjar.weixin.mp.bean.WxMpGroup;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.bean.WxGroup;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -18,24 +18,24 @@ import com.google.inject.Inject;
*/
@Test(groups = "groupAPI", dependsOnGroups = "baseAPI")
@Guice(modules = ApiTestModule.class)
-public class WxGroupAPITest {
+public class WxMpGroupAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
- protected WxGroup group;
+ protected WxMpGroup group;
public void testGroupCreate() throws WxErrorException {
- WxGroup res = wxService.groupCreate("测试分组1");
+ WxMpGroup res = wxService.groupCreate("测试分组1");
Assert.assertEquals(res.getName(), "测试分组1");
}
@Test(dependsOnMethods="testGroupCreate")
public void testGroupGet() throws WxErrorException {
- List groupList = wxService.groupGet();
+ List groupList = wxService.groupGet();
Assert.assertNotNull(groupList);
Assert.assertTrue(groupList.size() > 0);
- for (WxGroup g : groupList) {
+ for (WxMpGroup g : groupList) {
group = g;
Assert.assertNotNull(g.getName());
}
diff --git a/src/test/java/me/chanjar/weixin/api/WxMassMessageAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMassMessageAPITest.java
similarity index 74%
rename from src/test/java/me/chanjar/weixin/api/WxMassMessageAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMassMessageAPITest.java
index 26e8b352..78a48c2f 100644
--- a/src/test/java/me/chanjar/weixin/api/WxMassMessageAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMassMessageAPITest.java
@@ -1,23 +1,22 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.io.IOException;
import java.io.InputStream;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage;
+import me.chanjar.weixin.mp.bean.WxMpMassNews;
+import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
+import me.chanjar.weixin.mp.bean.WxMpMassVideo;
+import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult;
+import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.api.ApiTestModule.WxXmlConfigStorage;
-import me.chanjar.weixin.bean.WxMassGroupMessage;
-import me.chanjar.weixin.bean.WxMassNews;
-import me.chanjar.weixin.bean.WxMassNews.WxMassNewsArticle;
-import me.chanjar.weixin.bean.WxMassOpenIdsMessage;
-import me.chanjar.weixin.bean.WxMassVideo;
-import me.chanjar.weixin.bean.result.WxMassSendResult;
-import me.chanjar.weixin.bean.result.WxMassUploadResult;
-import me.chanjar.weixin.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -28,21 +27,21 @@ import com.google.inject.Inject;
*/
@Test(groups = "massAPI", dependsOnGroups = { "baseAPI", "mediaAPI", "groupAPI"})
@Guice(modules = ApiTestModule.class)
-public class WxMassMessageAPITest {
+public class WxMpMassMessageAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
@Test
public void testTextMassOpenIdsMessageSend() throws WxErrorException {
// 发送群发消息
- WxXmlConfigStorage configProvider = (WxXmlConfigStorage) wxService.wxConfigStorage;
- WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configProvider = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage();
massMessage.setMsgType(WxConsts.MASS_MSG_TEXT);
massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:Hello World");
massMessage.getToUsers().add(configProvider.getOpenId());
- WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);
+ WxMpMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);
Assert.assertNotNull(massResult);
Assert.assertNotNull(massResult.getMsgId());
}
@@ -50,37 +49,37 @@ public class WxMassMessageAPITest {
@Test(dataProvider="massMessages")
public void testMediaMassOpenIdsMessageSend(String massMsgType, String mediaId) throws WxErrorException, IOException {
// 发送群发消息
- WxXmlConfigStorage configProvider = (WxXmlConfigStorage) wxService.wxConfigStorage;
- WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configProvider = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage();
massMessage.setMsgType(massMsgType);
massMessage.setMediaId(mediaId);
massMessage.getToUsers().add(configProvider.getOpenId());
- WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);
+ WxMpMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);
Assert.assertNotNull(massResult);
Assert.assertNotNull(massResult.getMsgId());
}
@Test
public void testTextMassGroupMessageSend() throws WxErrorException {
- WxMassGroupMessage massMessage = new WxMassGroupMessage();
+ WxMpMassGroupMessage massMessage = new WxMpMassGroupMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_TEXT);
massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:Hello World");
massMessage.setGroupId(wxService.groupGet().get(0).getId());
- WxMassSendResult massResult = wxService.massGroupMessageSend(massMessage);
+ WxMpMassSendResult massResult = wxService.massGroupMessageSend(massMessage);
Assert.assertNotNull(massResult);
Assert.assertNotNull(massResult.getMsgId());
}
@Test(dataProvider="massMessages")
public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException, IOException {
- WxMassGroupMessage massMessage = new WxMassGroupMessage();
+ WxMpMassGroupMessage massMessage = new WxMpMassGroupMessage();
massMessage.setMsgtype(massMsgType);
massMessage.setMediaId(mediaId);
massMessage.setGroupId(wxService.groupGet().get(0).getId());
- WxMassSendResult massResult = wxService.massGroupMessageSend(massMessage);
+ WxMpMassSendResult massResult = wxService.massGroupMessageSend(massMessage);
Assert.assertNotNull(massResult);
Assert.assertNotNull(massResult.getMsgId());
}
@@ -99,11 +98,11 @@ public class WxMassMessageAPITest {
Assert.assertNotNull(uploadMediaRes.getMediaId());
// 把视频变成可被群发的媒体
- WxMassVideo video = new WxMassVideo();
+ WxMpMassVideo video = new WxMpMassVideo();
video.setTitle("测试标题");
video.setDescription("测试描述");
video.setMediaId(uploadMediaRes.getMediaId());
- WxMassUploadResult uploadResult = wxService.massVideoUpload(video);
+ WxMpMassUploadResult uploadResult = wxService.massVideoUpload(video);
Assert.assertNotNull(uploadResult);
Assert.assertNotNull(uploadResult.getMediaId());
messages[0] = new Object[] { WxConsts.MASS_MSG_VIDEO, uploadResult.getMediaId() };
@@ -139,14 +138,14 @@ public class WxMassMessageAPITest {
Assert.assertNotNull(uploadMediaRes.getMediaId());
// 上传图文消息
- WxMassNews news = new WxMassNews();
- WxMassNewsArticle article1 = new WxMassNewsArticle();
+ WxMpMassNews news = new WxMpMassNews();
+ WxMpMassNews.WxMpMassNewsArticle article1 = new WxMpMassNews.WxMpMassNewsArticle();
article1.setTitle("标题1");
article1.setContent("内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1内容1");
article1.setThumbMediaId(uploadMediaRes.getMediaId());
news.addArticle(article1);
- WxMassNewsArticle article2 = new WxMassNewsArticle();
+ WxMpMassNews.WxMpMassNewsArticle article2 = new WxMpMassNews.WxMpMassNewsArticle();
article2.setTitle("标题2");
article2.setContent("内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2内容2");
article2.setThumbMediaId(uploadMediaRes.getMediaId());
@@ -156,7 +155,7 @@ public class WxMassMessageAPITest {
article2.setDigest("摘要2");
news.addArticle(article2);
- WxMassUploadResult massUploadResult = wxService.massNewsUpload(news);
+ WxMpMassUploadResult massUploadResult = wxService.massNewsUpload(news);
Assert.assertNotNull(massUploadResult);
Assert.assertNotNull(uploadMediaRes.getMediaId());
messages[3] = new Object[] { WxConsts.MASS_MSG_NEWS, massUploadResult.getMediaId() };
diff --git a/src/test/java/me/chanjar/weixin/api/WxMediaAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMediaAPITest.java
similarity index 88%
rename from src/test/java/me/chanjar/weixin/api/WxMediaAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMediaAPITest.java
index f5d59594..e012df40 100644
--- a/src/test/java/me/chanjar/weixin/api/WxMediaAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMediaAPITest.java
@@ -1,17 +1,18 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -22,10 +23,10 @@ import com.google.inject.Inject;
*/
@Test(groups="mediaAPI", dependsOnGroups="baseAPI")
@Guice(modules = ApiTestModule.class)
-public class WxMediaAPITest {
+public class WxMpMediaAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
private List media_ids = new ArrayList();
diff --git a/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
similarity index 87%
rename from src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
index e0f3d3a3..335442b7 100644
--- a/src/test/java/me/chanjar/weixin/api/WxMenuAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
@@ -1,7 +1,8 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import javax.xml.bind.JAXBException;
+import me.chanjar.weixin.common.api.WxConsts;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
@@ -9,9 +10,9 @@ import org.testng.annotations.Test;
import com.google.inject.Inject;
-import me.chanjar.weixin.bean.WxMenu;
-import me.chanjar.weixin.bean.WxMenu.WxMenuButton;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.bean.WxMenu;
+import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton;
+import me.chanjar.weixin.common.exception.WxErrorException;
/**
* 测试菜单
@@ -20,10 +21,10 @@ import me.chanjar.weixin.exception.WxErrorException;
*/
@Test(groups="menuAPI", dependsOnGroups="baseAPI")
@Guice(modules = ApiTestModule.class)
-public class WxMenuAPITest {
+public class WxMpMenuAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
@Test(dataProvider = "menu")
public void testCreateMenu(WxMenu wxMenu) throws WxErrorException {
diff --git a/src/test/java/me/chanjar/weixin/api/WxMessageRouterTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
similarity index 59%
rename from src/test/java/me/chanjar/weixin/api/WxMessageRouterTest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
index f1d1163d..b43ca3c8 100644
--- a/src/test/java/me/chanjar/weixin/api/WxMessageRouterTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
@@ -1,65 +1,62 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.util.Map;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.api.WxMessageHandler;
-import me.chanjar.weixin.api.WxMessageRouter;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
-import me.chanjar.weixin.bean.WxXmlMessage;
-import me.chanjar.weixin.bean.WxXmlOutMessage;
-
/**
* 测试消息路由器
* @author chanjarster
*
*/
@Test
-public class WxMessageRouterTest {
+public class WxMpMessageRouterTest {
@Test(enabled = false)
- public void prepare(boolean async, StringBuffer sb, WxMessageRouter router) {
+ public void prepare(boolean async, StringBuffer sb, WxMpMessageRouter router) {
router
.rule()
.async(async)
.msgType(WxConsts.XML_MSG_TEXT).event(WxConsts.EVT_CLICK).eventKey("KEY_1").content("CONTENT_1")
- .handler(new WxEchoMessageHandler(sb, "COMBINE_4"))
+ .handler(new WxEchoMpMessageHandler(sb, "COMBINE_4"))
.end()
.rule()
.async(async)
.msgType(WxConsts.XML_MSG_TEXT).event(WxConsts.EVT_CLICK).eventKey("KEY_1")
- .handler(new WxEchoMessageHandler(sb, "COMBINE_3"))
+ .handler(new WxEchoMpMessageHandler(sb, "COMBINE_3"))
.end()
.rule()
.async(async)
.msgType(WxConsts.XML_MSG_TEXT).event(WxConsts.EVT_CLICK)
- .handler(new WxEchoMessageHandler(sb, "COMBINE_2"))
+ .handler(new WxEchoMpMessageHandler(sb, "COMBINE_2"))
.end()
- .rule().async(async).msgType(WxConsts.XML_MSG_TEXT).handler(new WxEchoMessageHandler(sb, WxConsts.XML_MSG_TEXT)).end()
- .rule().async(async).event(WxConsts.EVT_CLICK).handler(new WxEchoMessageHandler(sb, WxConsts.EVT_CLICK)).end()
- .rule().async(async).eventKey("KEY_1").handler(new WxEchoMessageHandler(sb, "KEY_1")).end()
- .rule().async(async).content("CONTENT_1").handler(new WxEchoMessageHandler(sb, "CONTENT_1")).end()
- .rule().async(async).rContent(".*bc.*").handler(new WxEchoMessageHandler(sb, "abcd")).end()
- .rule().async(async).handler(new WxEchoMessageHandler(sb, "ALL")).end();
+ .rule().async(async).msgType(WxConsts.XML_MSG_TEXT).handler(new WxEchoMpMessageHandler(sb, WxConsts.XML_MSG_TEXT)).end()
+ .rule().async(async).event(WxConsts.EVT_CLICK).handler(new WxEchoMpMessageHandler(sb, WxConsts.EVT_CLICK)).end()
+ .rule().async(async).eventKey("KEY_1").handler(new WxEchoMpMessageHandler(sb, "KEY_1")).end()
+ .rule().async(async).content("CONTENT_1").handler(new WxEchoMpMessageHandler(sb, "CONTENT_1")).end()
+ .rule().async(async).rContent(".*bc.*").handler(new WxEchoMpMessageHandler(sb, "abcd")).end()
+ .rule().async(async).handler(new WxEchoMpMessageHandler(sb, "ALL")).end();
;
}
@Test(dataProvider="messages-1")
- public void testSync(WxXmlMessage message, String expected) {
+ public void testSync(WxMpXmlMessage message, String expected) {
StringBuffer sb = new StringBuffer();
- WxMessageRouter router = new WxMessageRouter();
+ WxMpMessageRouter router = new WxMpMessageRouter();
prepare(false, sb, router);
router.route(message);
Assert.assertEquals(sb.toString(), expected);
}
@Test(dataProvider="messages-1")
- public void testAsync(WxXmlMessage message, String expected) throws InterruptedException {
+ public void testAsync(WxMpXmlMessage message, String expected) throws InterruptedException {
StringBuffer sb = new StringBuffer();
- WxMessageRouter router = new WxMessageRouter();
+ WxMpMessageRouter router = new WxMpMessageRouter();
prepare(true, sb, router);
router.route(message);
Thread.sleep(500l);
@@ -67,15 +64,15 @@ public class WxMessageRouterTest {
}
public void testConcurrency() throws InterruptedException {
- final WxMessageRouter router = new WxMessageRouter();
- router.rule().handler(new WxMessageHandler() {
+ final WxMpMessageRouter router = new WxMpMessageRouter();
+ router.rule().handler(new WxMpMessageHandler() {
@Override
- public WxXmlOutMessage handle(WxXmlMessage wxMessage, Map context) {
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context) {
return null;
}
}).end();
- final WxXmlMessage m = new WxXmlMessage();
+ final WxMpXmlMessage m = new WxMpXmlMessage();
Runnable r = new Runnable() {
@Override
public void run() {
@@ -94,34 +91,34 @@ public class WxMessageRouterTest {
}
@DataProvider(name="messages-1")
public Object[][] messages2() {
- WxXmlMessage message1 = new WxXmlMessage();
+ WxMpXmlMessage message1 = new WxMpXmlMessage();
message1.setMsgType(WxConsts.XML_MSG_TEXT);
- WxXmlMessage message2 = new WxXmlMessage();
+ WxMpXmlMessage message2 = new WxMpXmlMessage();
message2.setEvent(WxConsts.EVT_CLICK);
- WxXmlMessage message3 = new WxXmlMessage();
+ WxMpXmlMessage message3 = new WxMpXmlMessage();
message3.setEventKey("KEY_1");
- WxXmlMessage message4 = new WxXmlMessage();
+ WxMpXmlMessage message4 = new WxMpXmlMessage();
message4.setContent("CONTENT_1");
- WxXmlMessage message5 = new WxXmlMessage();
+ WxMpXmlMessage message5 = new WxMpXmlMessage();
message5.setContent("BLA");
- WxXmlMessage message6 = new WxXmlMessage();
+ WxMpXmlMessage message6 = new WxMpXmlMessage();
message6.setContent("abcd");
- WxXmlMessage c2 = new WxXmlMessage();
+ WxMpXmlMessage c2 = new WxMpXmlMessage();
c2.setMsgType(WxConsts.XML_MSG_TEXT);
c2.setEvent(WxConsts.EVT_CLICK);
- WxXmlMessage c3 = new WxXmlMessage();
+ WxMpXmlMessage c3 = new WxMpXmlMessage();
c3.setMsgType(WxConsts.XML_MSG_TEXT);
c3.setEvent(WxConsts.EVT_CLICK);
c3.setEventKey("KEY_1");
- WxXmlMessage c4 = new WxXmlMessage();
+ WxMpXmlMessage c4 = new WxMpXmlMessage();
c4.setMsgType(WxConsts.XML_MSG_TEXT);
c4.setEvent(WxConsts.EVT_CLICK);
c4.setEventKey("KEY_1");
@@ -129,7 +126,7 @@ public class WxMessageRouterTest {
return new Object[][] {
new Object[] { message1, WxConsts.XML_MSG_TEXT + "," },
- new Object[] { message2, WxConsts.EVT_CLICK + "," },
+ new Object[] { message2, WxConsts.EVT_CLICK + "," },
new Object[] { message3, "KEY_1," },
new Object[] { message4, "CONTENT_1," },
new Object[] { message5, "ALL," },
@@ -141,18 +138,18 @@ public class WxMessageRouterTest {
}
- public static class WxEchoMessageHandler implements WxMessageHandler {
+ public static class WxEchoMpMessageHandler implements WxMpMessageHandler {
private StringBuffer sb;
private String echoStr;
- public WxEchoMessageHandler(StringBuffer sb, String echoStr) {
+ public WxEchoMpMessageHandler(StringBuffer sb, String echoStr) {
this.sb = sb;
this.echoStr = echoStr;
}
@Override
- public WxXmlOutMessage handle(WxXmlMessage wxMessage, Map context) {
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context) {
sb.append(this.echoStr).append(',');
return null;
}
diff --git a/src/test/java/me/chanjar/weixin/api/WxQrCodeAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpQrCodeAPITest.java
similarity index 68%
rename from src/test/java/me/chanjar/weixin/api/WxQrCodeAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpQrCodeAPITest.java
index 1c07072f..2a206d2e 100644
--- a/src/test/java/me/chanjar/weixin/api/WxQrCodeAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpQrCodeAPITest.java
@@ -1,13 +1,13 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import java.io.File;
+import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.bean.result.WxQrCodeTicket;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -18,27 +18,27 @@ import com.google.inject.Inject;
*/
@Test(groups = "qrCodeAPI", dependsOnGroups = { "baseAPI" })
@Guice(modules = ApiTestModule.class)
-public class WxQrCodeAPITest {
+public class WxMpQrCodeAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
public void testQrCodeCreateTmpTicket() throws WxErrorException {
- WxQrCodeTicket ticket = wxService.qrCodeCreateTmpTicket(1, null);
+ WxMpQrCodeTicket ticket = wxService.qrCodeCreateTmpTicket(1, null);
Assert.assertNotNull(ticket.getUrl());
Assert.assertNotNull(ticket.getTicket());
Assert.assertTrue(ticket.getExpire_seconds() != -1);
}
public void testQrCodeCreateLastTicket() throws WxErrorException {
- WxQrCodeTicket ticket = wxService.qrCodeCreateLastTicket(1);
+ WxMpQrCodeTicket ticket = wxService.qrCodeCreateLastTicket(1);
Assert.assertNotNull(ticket.getUrl());
Assert.assertNotNull(ticket.getTicket());
Assert.assertTrue(ticket.getExpire_seconds() == -1);
}
public void testQrCodePicture() throws WxErrorException {
- WxQrCodeTicket ticket = wxService.qrCodeCreateLastTicket(1);
+ WxMpQrCodeTicket ticket = wxService.qrCodeCreateLastTicket(1);
File file = wxService.qrCodePicture(ticket);
Assert.assertNotNull(file);
}
diff --git a/src/test/java/me/chanjar/weixin/api/WxShortUrlAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpShortUrlAPITest.java
similarity index 73%
rename from src/test/java/me/chanjar/weixin/api/WxShortUrlAPITest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpShortUrlAPITest.java
index 3df6e217..e854ed08 100644
--- a/src/test/java/me/chanjar/weixin/api/WxShortUrlAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpShortUrlAPITest.java
@@ -1,10 +1,10 @@
-package me.chanjar.weixin.api;
+package me.chanjar.weixin.mp.api;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
-import me.chanjar.weixin.exception.WxErrorException;
+import me.chanjar.weixin.common.exception.WxErrorException;
import com.google.inject.Inject;
@@ -15,10 +15,10 @@ import com.google.inject.Inject;
*/
@Test(groups = "shortURLAPI", dependsOnGroups = { "baseAPI" })
@Guice(modules = ApiTestModule.class)
-public class WxShortUrlAPITest {
+public class WxMpShortUrlAPITest {
@Inject
- protected WxServiceImpl wxService;
+ protected WxMpServiceImpl wxService;
public void testShortUrl() throws WxErrorException {
String shortUrl = wxService.shortUrl("www.baidu.com");
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpUserAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpUserAPITest.java
new file mode 100644
index 00000000..c29bda83
--- /dev/null
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpUserAPITest.java
@@ -0,0 +1,55 @@
+package me.chanjar.weixin.mp.api;
+
+import me.chanjar.weixin.mp.bean.result.WxMpUserList;
+import org.testng.Assert;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
+import me.chanjar.weixin.common.exception.WxErrorException;
+
+import com.google.inject.Inject;
+
+/**
+ * 测试用户相关的接口
+ * @author chanjarster
+ *
+ */
+@Test(groups = "userAPI", dependsOnGroups = { "baseAPI", "groupAPI" })
+@Guice(modules = ApiTestModule.class)
+public class WxMpUserAPITest {
+
+ @Inject
+ protected WxMpServiceImpl wxService;
+
+ public void testUserUpdateRemark() throws WxErrorException {
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configProvider = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ wxService.userUpdateRemark(configProvider.getOpenId(), "测试备注名");
+ }
+
+ public void testUserInfo() throws WxErrorException {
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configProvider = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ WxMpUser user = wxService.userInfo(configProvider.getOpenId(), null);
+ Assert.assertNotNull(user);
+ }
+
+ public void testUserList() throws WxErrorException {
+ WxMpUserList wxMpUserList = wxService.userList(null);
+ Assert.assertNotNull(wxMpUserList);
+ Assert.assertFalse(wxMpUserList.getCount() == -1);
+ Assert.assertFalse(wxMpUserList.getTotal() == -1);
+ Assert.assertFalse(wxMpUserList.getOpenIds().size() == -1);
+ }
+
+ public void testGroupQueryUserGroup() throws WxErrorException {
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ long groupid = wxService.userGetGroup(configStorage.getOpenId());
+ Assert.assertTrue(groupid != -1l);
+ }
+
+ public void getGroupMoveUser() throws WxErrorException {
+ ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) wxService.wxMpConfigStorage;
+ wxService.userUpdateGroup(configStorage.getOpenId(), wxService.groupGet().get(3).getId());
+ }
+
+}
diff --git a/src/test/java/me/chanjar/weixin/bean/WxCustomMessageTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpCustomMessageTest.java
similarity index 80%
rename from src/test/java/me/chanjar/weixin/bean/WxCustomMessageTest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpCustomMessageTest.java
index 1d483898..68947b41 100644
--- a/src/test/java/me/chanjar/weixin/bean/WxCustomMessageTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpCustomMessageTest.java
@@ -1,16 +1,16 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
+import me.chanjar.weixin.common.api.WxConsts;
import org.testng.Assert;
import org.testng.annotations.Test;
-import me.chanjar.weixin.api.WxConsts;
-import me.chanjar.weixin.bean.WxCustomMessage.WxArticle;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage.WxArticle;
@Test
-public class WxCustomMessageTest {
+public class WxMpCustomMessageTest {
public void testTextReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_TEXT);
reply.setContent("sfsfdsdf");
@@ -18,12 +18,12 @@ public class WxCustomMessageTest {
}
public void testTextBuild() {
- WxCustomMessage reply = WxCustomMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
+ WxMpCustomMessage reply = WxMpCustomMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
}
public void testImageReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_IMAGE);
reply.setMediaId("MEDIA_ID");
@@ -31,12 +31,12 @@ public class WxCustomMessageTest {
}
public void testImageBuild() {
- WxCustomMessage reply = WxCustomMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
+ WxMpCustomMessage reply = WxMpCustomMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
}
public void testVoiceReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_VOICE);
reply.setMediaId("MEDIA_ID");
@@ -44,12 +44,12 @@ public class WxCustomMessageTest {
}
public void testVoiceBuild() {
- WxCustomMessage reply = WxCustomMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
+ WxMpCustomMessage reply = WxMpCustomMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
}
public void testVideoReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_VIDEO);
reply.setMediaId("MEDIA_ID");
@@ -60,12 +60,12 @@ public class WxCustomMessageTest {
}
public void testVideoBuild() {
- WxCustomMessage reply = WxCustomMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build();
+ WxMpCustomMessage reply = WxMpCustomMessage.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\"}}");
}
public void testMusicReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_MUSIC);
reply.setThumbMediaId("MEDIA_ID");
@@ -77,7 +77,7 @@ public class WxCustomMessageTest {
}
public void testMusicBuild() {
- WxCustomMessage reply = WxCustomMessage.MUSIC()
+ WxMpCustomMessage reply = WxMpCustomMessage.MUSIC()
.toUser("OPENID")
.title("TITLE")
.thumbMediaId("MEDIA_ID")
@@ -89,7 +89,7 @@ public class WxCustomMessageTest {
}
public void testNewsReply() {
- WxCustomMessage reply = new WxCustomMessage();
+ WxMpCustomMessage reply = new WxMpCustomMessage();
reply.setToUser("OPENID");
reply.setMsgType(WxConsts.CUSTOM_MSG_NEWS);
@@ -124,7 +124,7 @@ public class WxCustomMessageTest {
article2.setDescription("Is Really A Happy Day");
article2.setTitle("Happy Day");
- WxCustomMessage reply = WxCustomMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build();
+ WxMpCustomMessage reply = WxMpCustomMessage.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\"}]}");
}
diff --git a/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpXmlMessageTest.java
similarity index 96%
rename from src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java
rename to weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpXmlMessageTest.java
index 8517a8b0..346681cb 100644
--- a/src/test/java/me/chanjar/weixin/bean/WxXmlMessageTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/WxMpXmlMessageTest.java
@@ -1,11 +1,11 @@
-package me.chanjar.weixin.bean;
+package me.chanjar.weixin.mp.bean;
-import me.chanjar.weixin.api.WxConsts;
+import me.chanjar.weixin.common.api.WxConsts;
import org.testng.Assert;
import org.testng.annotations.Test;
@Test
-public class WxXmlMessageTest {
+public class WxMpXmlMessageTest {
public void testFromXml() {
@@ -53,7 +53,7 @@ public class WxXmlMessageTest {
+ " \n"
+ ""
+ "