subButtons) {
this.subButtons = subButtons;
}
-
+
+ @Override
+ public String toString() {
+ return "WxMenuButton{" +
+ "type='" + type + '\'' +
+ ", name='" + name + '\'' +
+ ", key='" + key + '\'' +
+ ", url='" + url + '\'' +
+ ", subButtons=" + subButtons +
+ '}';
+ }
}
}
diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml
index 779ef63cd..c51958703 100644
--- a/weixin-java-cp/pom.xml
+++ b/weixin-java-cp/pom.xml
@@ -6,7 +6,7 @@
me.chanjar
weixin-java-parent
- 1.1.2
+ 1.1.3-SNAPSHOT
weixin-java-cp
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
index 164a08746..70d59046d 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java
@@ -155,34 +155,87 @@ public interface WxCpService {
*
* 自定义菜单创建接口
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单创建接口
+ *
+ * 注意: 这个方法使用WxCpConfigStorage里的agentId
*
+ * @see #menuCreate(String, me.chanjar.weixin.common.bean.WxMenu)
*
* @param menu
* @throws WxErrorException
*/
void menuCreate(WxMenu menu) throws WxErrorException;
+ /**
+ *
+ * 自定义菜单创建接口
+ * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单创建接口
+ *
+ * 注意: 这个方法不使用WxCpConfigStorage里的agentId,需要开发人员自己给出
+ *
+ * @see #menuCreate(me.chanjar.weixin.common.bean.WxMenu)
+ *
+ * @param agentId 企业号应用的id
+ * @param menu
+ * @throws WxErrorException
+ */
+ void menuCreate(String agentId, WxMenu menu) throws WxErrorException;
+
/**
*
* 自定义菜单删除接口
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单删除接口
+ *
+ * 注意: 这个方法使用WxCpConfigStorage里的agentId
*
+ * @see #menuDelete(String)
*
* @throws WxErrorException
*/
void menuDelete() throws WxErrorException;
+ /**
+ *
+ * 自定义菜单删除接口
+ * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单删除接口
+ *
+ * 注意: 这个方法不使用WxCpConfigStorage里的agentId,需要开发人员自己给出
+ *
+ * @see #menuDelete()
+ *
+ * @param agentId 企业号应用的id
+ * @throws WxErrorException
+ */
+ void menuDelete(String agentId) throws WxErrorException;
+
/**
*
* 自定义菜单查询接口
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单查询接口
+ *
+ * 注意: 这个方法使用WxCpConfigStorage里的agentId
*
+ * @see #menuGet(String)
*
* @return
* @throws WxErrorException
*/
WxMenu menuGet() throws WxErrorException;
+ /**
+ *
+ * 自定义菜单查询接口
+ * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单查询接口
+ *
+ * 注意: 这个方法不使用WxCpConfigStorage里的agentId,需要开发人员自己给出
+ *
+ * @see #menuGet()
+ *
+ * @param agentId 企业号应用的id
+ * @return
+ * @throws WxErrorException
+ */
+ WxMenu menuGet(String agentId) throws WxErrorException;
+
/**
*
* 部门管理接口 - 创建部门
@@ -364,12 +417,33 @@ public interface WxCpService {
* 用oauth2获取用户信息
* http://qydev.weixin.qq.com/wiki/index.php?title=根据code获取成员信息
* 因为企业号oauth2.0必须在应用设置里设置通过ICP备案的可信域名,所以无法测试,因此这个方法很可能是坏的。
+ *
+ * 注意: 这个方法使用WxCpConfigStorage里的agentId
*
+ * @see #oauth2getUserInfo(String, String)
+ *
* @param code
* @return [userid, deviceid]
*/
String[] oauth2getUserInfo(String code) throws WxErrorException;
+ /**
+ *
+ * 用oauth2获取用户信息
+ * http://qydev.weixin.qq.com/wiki/index.php?title=根据code获取成员信息
+ * 因为企业号oauth2.0必须在应用设置里设置通过ICP备案的可信域名,所以无法测试,因此这个方法很可能是坏的。
+ *
+ * 注意: 这个方法不使用WxCpConfigStorage里的agentId,需要开发人员自己给出
+ *
+ * @see #oauth2getUserInfo(String)
+ *
+ * @param agentId 企业号应用的id
+ * @param code
+ * @return [userid, deviceid]
+ */
+ String[] oauth2getUserInfo(String agentId, String code) throws WxErrorException;
+
+
/**
* 移除标签成员
*
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
index c5b5e7929..1c2e16e71 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
@@ -180,18 +180,36 @@ public class WxCpServiceImpl implements WxCpService {
post(url, message.toJson());
}
+ @Override
public void menuCreate(WxMenu menu) throws WxErrorException {
+ menuCreate(wxCpConfigStorage.getAgentId(), menu);
+ }
+
+ @Override
+ public void menuCreate(String agentId, WxMenu menu) throws WxErrorException {
String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?agentid=" + wxCpConfigStorage.getAgentId();
post(url, menu.toJson());
}
+ @Override
public void menuDelete() throws WxErrorException {
- String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/delete?agentid=" + wxCpConfigStorage.getAgentId();
+ menuDelete(wxCpConfigStorage.getAgentId());
+ }
+
+ @Override
+ public void menuDelete(String agentId) throws WxErrorException {
+ String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/delete?agentid=" + agentId;
get(url, null);
}
+ @Override
public WxMenu menuGet() throws WxErrorException {
- String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/get?agentid=" + wxCpConfigStorage.getAgentId();
+ return menuGet(wxCpConfigStorage.getAgentId());
+ }
+
+ @Override
+ public WxMenu menuGet(String agentId) throws WxErrorException {
+ String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/get?agentid=" + agentId;
try {
String resultContent = get(url, null);
return WxMenu.fromJson(resultContent);
@@ -427,9 +445,14 @@ public class WxCpServiceImpl implements WxCpService {
@Override
public String[] oauth2getUserInfo(String code) throws WxErrorException {
+ return oauth2getUserInfo(code, wxCpConfigStorage.getAgentId());
+ }
+
+ @Override
+ public String[] oauth2getUserInfo(String agentId, String code) throws WxErrorException {
String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?"
- + "code=" + code
- + "&agendid=" + wxCpConfigStorage.getAgentId();
+ + "code=" + code
+ + "&agendid=" + agentId;
String responseText = get(url, null);
JsonElement je = Streams.parse(new JsonReader(new StringReader(responseText)));
JsonObject jo = je.getAsJsonObject();
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index c4ed287e5..a102ff3eb 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -6,7 +6,7 @@
me.chanjar
weixin-java-parent
- 1.1.2
+ 1.1.3-SNAPSHOT
weixin-java-mp
WeiXin Java Tools - MP
diff --git a/weixin-java-mp/src/main/java/TestNonAtomicLongAssignment.java b/weixin-java-mp/src/main/java/TestNonAtomicLongAssignment.java
deleted file mode 100644
index e86d89fe3..000000000
--- a/weixin-java-mp/src/main/java/TestNonAtomicLongAssignment.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Created by qianjia on 15/1/25.
- */
-public class TestNonAtomicLongAssignment {
-
- private static final long HI = 1l << 32;
- private static final long LO = 1l;
-
- private static final long TEST_NUMBER = HI | LO;
-
- private static long assignee = 0l;
-
- public static void main(String[] args) {
-
- Thread writer = new Thread(new Runnable() {
- @Override
- public void run() {
- while (true) {
- assignee = TEST_NUMBER;
- }
- }
- });
- writer.setDaemon(true);
-
- Thread reader = new Thread(new Runnable() {
- @Override
- public void run() {
- long i = 0;
- while (true) {
- i++;
- long test = assignee;
- if (test != TEST_NUMBER) {
- System.out.print(i + " times:" + toBin(test));
- break;
- }
- }
- }
- });
-
- // Thread worker = new Thread(new Runnable() {
- // @Override
- // public void run() {
- // double d = 89009808877238948224343435452333323113131313133434434341212323232424243434335354232390490189190420928348910913094983.323334401928d;
- // while(true) {
- // Math.cbrt(d);
- // d = d - 1l;
- // }
- // }
- // });
- // worker.setDaemon(true);
- // worker.start();
-
- writer.start();
- reader.start();
-
- }
-
- public static String toBin(long n) {
- StringBuilder sb = new StringBuilder(Long.toBinaryString(n));
- int padding = 64 - sb.length();
- while (padding > 0) {
- sb.insert(0, '0');
- padding--;
- }
- return sb.toString();
- }
-
-}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
index 01acb179a..581c67eef 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMenuAPITest.java
@@ -24,9 +24,54 @@ public class WxMpMenuAPITest {
@Test(dataProvider = "menu")
public void testCreateMenu(WxMenu wxMenu) throws WxErrorException {
+ System.out.println(wxMenu.toJson());
wxService.menuCreate(wxMenu);
}
-
+
+ @Test
+ public void testCreateMenu2() throws WxErrorException {
+ String a = "{\n"
+ + " \"menu\": {\n"
+ + " \"button\": [\n"
+ + " {\n"
+ + " \"type\": \"click\",\n"
+ + " \"name\": \"今日歌曲\",\n"
+ + " \"key\": \"V1001_TODAY_MUSIC\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"type\": \"click\",\n"
+ + " \"name\": \"歌手简介\",\n"
+ + " \"key\": \"V1001_TODAY_SINGER\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"name\": \"菜单\",\n"
+ + " \"sub_button\": [\n"
+ + " {\n"
+ + " \"type\": \"view\",\n"
+ + " \"name\": \"搜索\",\n"
+ + " \"url\": \"http://www.soso.com/\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"type\": \"view\",\n"
+ + " \"name\": \"视频\",\n"
+ + " \"url\": \"http://v.qq.com/\"\n"
+ + " },\n"
+ + " {\n"
+ + " \"type\": \"click\",\n"
+ + " \"name\": \"赞一下我们\",\n"
+ + " \"key\": \"V1001_GOOD\"\n"
+ + " }\n"
+ + " ]\n"
+ + " }\n"
+ + " ]\n"
+ + " }\n"
+ + "}";
+
+ WxMenu menu = WxMenu.fromJson(a);
+ System.out.println(menu.toJson());
+ wxService.menuCreate(menu);
+ }
+
@Test(dependsOnMethods = { "testCreateMenu"})
public void testGetMenu() throws WxErrorException {
Assert.assertNotNull(wxService.menuGet());