@@ -1,12 +1,14 @@ | |||||
package me.chanjar.weixin.cp.api; | package me.chanjar.weixin.cp.api; | ||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import com.google.inject.Binder; | import com.google.inject.Binder; | ||||
import com.google.inject.Module; | import com.google.inject.Module; | ||||
import com.thoughtworks.xstream.XStream; | import com.thoughtworks.xstream.XStream; | ||||
import com.thoughtworks.xstream.annotations.XStreamAlias; | import com.thoughtworks.xstream.annotations.XStreamAlias; | ||||
import me.chanjar.weixin.common.util.xml.XStreamInitializer; | |||||
import java.io.InputStream; | |||||
import me.chanjar.weixin.common.util.xml.XStreamInitializer; | |||||
public class ApiTestModule implements Module { | public class ApiTestModule implements Module { | ||||
@@ -19,13 +21,18 @@ public class ApiTestModule implements Module { | |||||
@Override | @Override | ||||
public void configure(Binder binder) { | public void configure(Binder binder) { | ||||
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml"); | |||||
WxXmlCpInMemoryConfigStorage config = fromXml(WxXmlCpInMemoryConfigStorage.class, is1); | |||||
WxCpServiceImpl wxService = new WxCpServiceImpl(); | |||||
wxService.setWxCpConfigStorage(config); | |||||
binder.bind(WxCpServiceImpl.class).toInstance(wxService); | |||||
binder.bind(WxCpConfigStorage.class).toInstance(config); | |||||
try (InputStream is1 = ClassLoader | |||||
.getSystemResourceAsStream("test-config.xml")) { | |||||
WxXmlCpInMemoryConfigStorage config = fromXml( | |||||
WxXmlCpInMemoryConfigStorage.class, is1); | |||||
WxCpServiceImpl wxService = new WxCpServiceImpl(); | |||||
wxService.setWxCpConfigStorage(config); | |||||
binder.bind(WxCpServiceImpl.class).toInstance(wxService); | |||||
binder.bind(WxCpConfigStorage.class).toInstance(config); | |||||
} catch (IOException e) { | |||||
e.printStackTrace(); | |||||
} | |||||
} | } | ||||
@XStreamAlias("xml") | @XStreamAlias("xml") | ||||
@@ -1,16 +1,17 @@ | |||||
package me.chanjar.weixin.cp.api; | package me.chanjar.weixin.cp.api; | ||||
import me.chanjar.weixin.common.bean.result.WxError; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.common.util.http.RequestExecutor; | |||||
import org.testng.annotations.DataProvider; | |||||
import org.testng.annotations.Test; | |||||
import java.util.concurrent.ExecutionException; | import java.util.concurrent.ExecutionException; | ||||
import java.util.concurrent.ExecutorService; | import java.util.concurrent.ExecutorService; | ||||
import java.util.concurrent.Executors; | import java.util.concurrent.Executors; | ||||
import java.util.concurrent.Future; | import java.util.concurrent.Future; | ||||
import org.testng.annotations.DataProvider; | |||||
import org.testng.annotations.Test; | |||||
import me.chanjar.weixin.common.bean.result.WxError; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.common.util.http.RequestExecutor; | |||||
@Test | @Test | ||||
public class WxCpBusyRetryTest { | public class WxCpBusyRetryTest { | ||||
@@ -19,7 +20,9 @@ public class WxCpBusyRetryTest { | |||||
WxCpService service = new WxCpServiceImpl() { | WxCpService service = new WxCpServiceImpl() { | ||||
@Override | @Override | ||||
protected <T, E> T executeInternal(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||||
protected synchronized <T, E> T executeInternal( | |||||
RequestExecutor<T, E> executor, String uri, E data) | |||||
throws WxErrorException { | |||||
WxError error = new WxError(); | WxError error = new WxError(); | ||||
error.setErrorCode(-1); | error.setErrorCode(-1); | ||||
throw new WxErrorException(error); | throw new WxErrorException(error); | ||||
@@ -1,13 +1,15 @@ | |||||
package me.chanjar.weixin.cp.api; | package me.chanjar.weixin.cp.api; | ||||
import com.google.inject.Inject; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.cp.bean.WxCpDepart; | |||||
import java.util.List; | |||||
import org.testng.Assert; | import org.testng.Assert; | ||||
import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||
import java.util.List; | |||||
import com.google.inject.Inject; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.cp.bean.WxCpDepart; | |||||
/** | /** | ||||
* 测试部门接口 | * 测试部门接口 | ||||
@@ -24,11 +26,12 @@ public class WxCpDepartAPITest { | |||||
protected WxCpDepart depart; | protected WxCpDepart depart; | ||||
public void testDepartCreate() throws WxErrorException { | public void testDepartCreate() throws WxErrorException { | ||||
WxCpDepart depart = new WxCpDepart(); | |||||
depart.setName("子部门" + System.currentTimeMillis()); | |||||
depart.setParentId(1); | |||||
depart.setOrder(1); | |||||
Integer departId = this.wxCpService.departCreate(depart); | |||||
WxCpDepart cpDepart = new WxCpDepart(); | |||||
cpDepart.setName("子部门" + System.currentTimeMillis()); | |||||
cpDepart.setParentId(1); | |||||
cpDepart.setOrder(1); | |||||
Integer departId = this.wxCpService.departCreate(cpDepart); | |||||
System.out.println(departId); | |||||
} | } | ||||
@Test(dependsOnMethods = "testDepartCreate") | @Test(dependsOnMethods = "testDepartCreate") | ||||
@@ -1,18 +1,20 @@ | |||||
package me.chanjar.weixin.cp.api; | package me.chanjar.weixin.cp.api; | ||||
import com.google.inject.Inject; | |||||
import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import org.testng.Assert; | import org.testng.Assert; | ||||
import org.testng.annotations.DataProvider; | import org.testng.annotations.DataProvider; | ||||
import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import com.google.inject.Inject; | |||||
import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
/** | /** | ||||
* 测试多媒体文件上传下载 | * 测试多媒体文件上传下载 | ||||
@@ -31,17 +33,21 @@ public class WxCpMediaAPITest { | |||||
@Test(dataProvider = "uploadMedia") | @Test(dataProvider = "uploadMedia") | ||||
public void testUploadMedia(String mediaType, String fileType, String fileName) throws WxErrorException, IOException { | public void testUploadMedia(String mediaType, String fileType, String fileName) throws WxErrorException, IOException { | ||||
InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName); | |||||
WxMediaUploadResult res = this.wxService.mediaUpload(mediaType, fileType, inputStream); | |||||
Assert.assertNotNull(res.getType()); | |||||
Assert.assertNotNull(res.getCreatedAt()); | |||||
Assert.assertTrue(res.getMediaId() != null || res.getThumbMediaId() != null); | |||||
try (InputStream inputStream = ClassLoader | |||||
.getSystemResourceAsStream(fileName);) { | |||||
WxMediaUploadResult res = this.wxService.mediaUpload(mediaType, fileType, | |||||
inputStream); | |||||
Assert.assertNotNull(res.getType()); | |||||
Assert.assertNotNull(res.getCreatedAt()); | |||||
Assert.assertTrue( | |||||
res.getMediaId() != null || res.getThumbMediaId() != null); | |||||
if (res.getMediaId() != null) { | |||||
this.media_ids.add(res.getMediaId()); | |||||
} | |||||
if (res.getThumbMediaId() != null) { | |||||
this.media_ids.add(res.getThumbMediaId()); | |||||
if (res.getMediaId() != null) { | |||||
this.media_ids.add(res.getMediaId()); | |||||
} | |||||
if (res.getThumbMediaId() != null) { | |||||
this.media_ids.add(res.getThumbMediaId()); | |||||
} | |||||
} | } | ||||
} | } | ||||
@@ -1,16 +1,22 @@ | |||||
package me.chanjar.weixin.cp.demo; | package me.chanjar.weixin.cp.demo; | ||||
import me.chanjar.weixin.common.session.WxSessionManager; | |||||
import me.chanjar.weixin.cp.api.*; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlMessage; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlOutTextMessage; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Map; | |||||
import org.eclipse.jetty.server.Server; | import org.eclipse.jetty.server.Server; | ||||
import org.eclipse.jetty.servlet.ServletHandler; | import org.eclipse.jetty.servlet.ServletHandler; | ||||
import org.eclipse.jetty.servlet.ServletHolder; | import org.eclipse.jetty.servlet.ServletHolder; | ||||
import java.io.InputStream; | |||||
import java.util.Map; | |||||
import me.chanjar.weixin.common.session.WxSessionManager; | |||||
import me.chanjar.weixin.cp.api.WxCpConfigStorage; | |||||
import me.chanjar.weixin.cp.api.WxCpMessageHandler; | |||||
import me.chanjar.weixin.cp.api.WxCpMessageRouter; | |||||
import me.chanjar.weixin.cp.api.WxCpService; | |||||
import me.chanjar.weixin.cp.api.WxCpServiceImpl; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlMessage; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlOutTextMessage; | |||||
public class WxCpDemoServer { | public class WxCpDemoServer { | ||||
@@ -36,55 +42,48 @@ public class WxCpDemoServer { | |||||
server.join(); | server.join(); | ||||
} | } | ||||
private static void initWeixin() { | |||||
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml"); | |||||
WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage.fromXml(is1); | |||||
wxCpConfigStorage = config; | |||||
wxCpService = new WxCpServiceImpl(); | |||||
wxCpService.setWxCpConfigStorage(config); | |||||
WxCpMessageHandler handler = new WxCpMessageHandler() { | |||||
@Override | |||||
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, | |||||
WxCpService wxCpService, WxSessionManager sessionManager) { | |||||
WxCpXmlOutTextMessage m = WxCpXmlOutMessage | |||||
.TEXT() | |||||
.content("测试加密消息") | |||||
.fromUser(wxMessage.getToUserName()) | |||||
.toUser(wxMessage.getFromUserName()) | |||||
.build(); | |||||
return m; | |||||
} | |||||
}; | |||||
WxCpMessageHandler oauth2handler = new WxCpMessageHandler() { | |||||
@Override | |||||
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, | |||||
WxCpService wxCpService, WxSessionManager sessionManager) { | |||||
String href = "<a href=\"" + wxCpService.oauth2buildAuthorizationUrl(wxCpConfigStorage.getOauth2redirectUri(), null) | |||||
+ "\">测试oauth2</a>"; | |||||
return WxCpXmlOutMessage | |||||
.TEXT() | |||||
.content(href) | |||||
.fromUser(wxMessage.getToUserName()) | |||||
.toUser(wxMessage.getFromUserName()).build(); | |||||
} | |||||
}; | |||||
wxCpMessageRouter = new WxCpMessageRouter(wxCpService); | |||||
wxCpMessageRouter | |||||
.rule() | |||||
.async(false) | |||||
.content("哈哈") // 拦截内容为“哈哈”的消息 | |||||
.handler(handler) | |||||
.end() | |||||
.rule() | |||||
.async(false) | |||||
.content("oauth") | |||||
.handler(oauth2handler) | |||||
.end() | |||||
; | |||||
private static void initWeixin() throws IOException { | |||||
try (InputStream is1 = ClassLoader | |||||
.getSystemResourceAsStream("test-config.xml")) { | |||||
WxCpDemoInMemoryConfigStorage config = WxCpDemoInMemoryConfigStorage | |||||
.fromXml(is1); | |||||
wxCpConfigStorage = config; | |||||
wxCpService = new WxCpServiceImpl(); | |||||
wxCpService.setWxCpConfigStorage(config); | |||||
WxCpMessageHandler handler = new WxCpMessageHandler() { | |||||
@Override | |||||
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, | |||||
Map<String, Object> context, WxCpService wxService, | |||||
WxSessionManager sessionManager) { | |||||
WxCpXmlOutTextMessage m = WxCpXmlOutMessage.TEXT().content("测试加密消息") | |||||
.fromUser(wxMessage.getToUserName()) | |||||
.toUser(wxMessage.getFromUserName()).build(); | |||||
return m; | |||||
} | |||||
}; | |||||
WxCpMessageHandler oauth2handler = new WxCpMessageHandler() { | |||||
@Override | |||||
public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, | |||||
Map<String, Object> context, WxCpService wxService, | |||||
WxSessionManager sessionManager) { | |||||
String href = "<a href=\"" | |||||
+ wxService.oauth2buildAuthorizationUrl( | |||||
wxCpConfigStorage.getOauth2redirectUri(), null) | |||||
+ "\">测试oauth2</a>"; | |||||
return WxCpXmlOutMessage.TEXT().content(href) | |||||
.fromUser(wxMessage.getToUserName()) | |||||
.toUser(wxMessage.getFromUserName()).build(); | |||||
} | |||||
}; | |||||
wxCpMessageRouter = new WxCpMessageRouter(wxCpService); | |||||
wxCpMessageRouter.rule().async(false).content("哈哈") // 拦截内容为“哈哈”的消息 | |||||
.handler(handler).end().rule().async(false).content("oauth") | |||||
.handler(oauth2handler).end(); | |||||
} | |||||
} | } | ||||
} | } |
@@ -1,5 +1,11 @@ | |||||
package me.chanjar.weixin.cp.demo; | package me.chanjar.weixin.cp.demo; | ||||
import java.io.IOException; | |||||
import javax.servlet.http.HttpServlet; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import me.chanjar.weixin.common.util.StringUtils; | import me.chanjar.weixin.common.util.StringUtils; | ||||
import me.chanjar.weixin.cp.api.WxCpConfigStorage; | import me.chanjar.weixin.cp.api.WxCpConfigStorage; | ||||
import me.chanjar.weixin.cp.api.WxCpMessageRouter; | import me.chanjar.weixin.cp.api.WxCpMessageRouter; | ||||
@@ -8,17 +14,11 @@ import me.chanjar.weixin.cp.bean.WxCpXmlMessage; | |||||
import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage; | import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage; | ||||
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil; | import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil; | ||||
import javax.servlet.ServletException; | |||||
import javax.servlet.http.HttpServlet; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import java.io.IOException; | |||||
/** | /** | ||||
* @author Daniel Qian | * @author Daniel Qian | ||||
*/ | */ | ||||
public class WxCpEndpointServlet extends HttpServlet { | public class WxCpEndpointServlet extends HttpServlet { | ||||
private static final long serialVersionUID = 1L; | |||||
protected WxCpConfigStorage wxCpConfigStorage; | protected WxCpConfigStorage wxCpConfigStorage; | ||||
protected WxCpService wxCpService; | protected WxCpService wxCpService; | ||||
protected WxCpMessageRouter wxCpMessageRouter; | protected WxCpMessageRouter wxCpMessageRouter; | ||||
@@ -32,7 +32,7 @@ public class WxCpEndpointServlet extends HttpServlet { | |||||
@Override | @Override | ||||
protected void service(HttpServletRequest request, HttpServletResponse response) | protected void service(HttpServletRequest request, HttpServletResponse response) | ||||
throws ServletException, IOException { | |||||
throws IOException { | |||||
response.setContentType("text/html;charset=utf-8"); | response.setContentType("text/html;charset=utf-8"); | ||||
response.setStatus(HttpServletResponse.SC_OK); | response.setStatus(HttpServletResponse.SC_OK); | ||||
@@ -1,16 +1,17 @@ | |||||
package me.chanjar.weixin.cp.demo; | package me.chanjar.weixin.cp.demo; | ||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.cp.api.WxCpService; | |||||
import java.io.IOException; | |||||
import java.util.Arrays; | |||||
import javax.servlet.ServletException; | |||||
import javax.servlet.http.HttpServlet; | import javax.servlet.http.HttpServlet; | ||||
import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import java.io.IOException; | |||||
import java.util.Arrays; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.cp.api.WxCpService; | |||||
public class WxCpOAuth2Servlet extends HttpServlet { | public class WxCpOAuth2Servlet extends HttpServlet { | ||||
private static final long serialVersionUID = 1L; | |||||
protected WxCpService wxCpService; | protected WxCpService wxCpService; | ||||
@@ -20,7 +21,7 @@ public class WxCpOAuth2Servlet extends HttpServlet { | |||||
@Override | @Override | ||||
protected void service(HttpServletRequest request, HttpServletResponse response) | protected void service(HttpServletRequest request, HttpServletResponse response) | ||||
throws ServletException, IOException { | |||||
throws IOException { | |||||
response.setContentType("text/html;charset=utf-8"); | response.setContentType("text/html;charset=utf-8"); | ||||
response.setStatus(HttpServletResponse.SC_OK); | response.setStatus(HttpServletResponse.SC_OK); | ||||