@@ -110,7 +110,7 @@ public interface WxCpService { | |||||
* @param menu | * @param menu | ||||
* @throws WxErrorException | * @throws WxErrorException | ||||
*/ | */ | ||||
public void menuCreate(WxMenu menu) throws WxErrorException; | |||||
public void menuCreate(WxCpMenu menu) throws WxErrorException; | |||||
/** | /** | ||||
* <pre> | * <pre> | ||||
@@ -129,7 +129,7 @@ public interface WxCpService { | |||||
* @return | * @return | ||||
* @throws WxErrorException | * @throws WxErrorException | ||||
*/ | */ | ||||
public WxMenu menuGet() throws WxErrorException; | |||||
public WxCpMenu menuGet() throws WxErrorException; | |||||
/** | /** | ||||
* <pre> | * <pre> | ||||
@@ -106,7 +106,7 @@ public class WxCpServiceImpl implements WxCpService { | |||||
execute(new SimplePostRequestExecutor(), url, message.toJson()); | execute(new SimplePostRequestExecutor(), url, message.toJson()); | ||||
} | } | ||||
public void menuCreate(WxMenu menu) throws WxErrorException { | |||||
public void menuCreate(WxCpMenu menu) throws WxErrorException { | |||||
String url = "https://api.weixin.qq.com/cgi-bin/menu/create"; | String url = "https://api.weixin.qq.com/cgi-bin/menu/create"; | ||||
execute(new SimplePostRequestExecutor(), url, menu.toJson()); | execute(new SimplePostRequestExecutor(), url, menu.toJson()); | ||||
} | } | ||||
@@ -116,11 +116,11 @@ public class WxCpServiceImpl implements WxCpService { | |||||
execute(new SimpleGetRequestExecutor(), url, null); | execute(new SimpleGetRequestExecutor(), url, null); | ||||
} | } | ||||
public WxMenu menuGet() throws WxErrorException { | |||||
public WxCpMenu menuGet() throws WxErrorException { | |||||
String url = "https://api.weixin.qq.com/cgi-bin/menu/get"; | String url = "https://api.weixin.qq.com/cgi-bin/menu/get"; | ||||
try { | try { | ||||
String resultContent = execute(new SimpleGetRequestExecutor(), url, null); | String resultContent = execute(new SimpleGetRequestExecutor(), url, null); | ||||
return WxMenu.fromJson(resultContent); | |||||
return WxCpMenu.fromJson(resultContent); | |||||
} catch (WxErrorException e) { | } catch (WxErrorException e) { | ||||
// 46003 不存在的菜单数据 | // 46003 不存在的菜单数据 | ||||
if (e.getError().getErrorCode() == 46003) { | if (e.getError().getErrorCode() == 46003) { | ||||
@@ -12,7 +12,7 @@ import me.chanjar.weixin.enterprise.util.json.WxCpGsonBuilder; | |||||
* @author Daniel Qian | * @author Daniel Qian | ||||
* | * | ||||
*/ | */ | ||||
public class WxMenu { | |||||
public class WxCpMenu { | |||||
private List<WxMenuButton> buttons = new ArrayList<WxMenuButton>(); | private List<WxMenuButton> buttons = new ArrayList<WxMenuButton>(); | ||||
@@ -28,12 +28,12 @@ public class WxMenu { | |||||
return WxCpGsonBuilder.create().toJson(this); | return WxCpGsonBuilder.create().toJson(this); | ||||
} | } | ||||
public static WxMenu fromJson(String json) { | |||||
return WxCpGsonBuilder.create().fromJson(json, WxMenu.class); | |||||
public static WxCpMenu fromJson(String json) { | |||||
return WxCpGsonBuilder.create().fromJson(json, WxCpMenu.class); | |||||
} | } | ||||
public static WxMenu fromJson(InputStream is) { | |||||
return WxCpGsonBuilder.create().fromJson(new InputStreamReader(is), WxMenu.class); | |||||
public static WxCpMenu fromJson(InputStream is) { | |||||
return WxCpGsonBuilder.create().fromJson(new InputStreamReader(is), WxCpMenu.class); | |||||
} | } | ||||
public static class WxMenuButton { | public static class WxMenuButton { |
@@ -13,7 +13,7 @@ public class WxCpGsonBuilder { | |||||
static { | static { | ||||
INSTANCE.disableHtmlEscaping(); | INSTANCE.disableHtmlEscaping(); | ||||
INSTANCE.registerTypeAdapter(WxCpMessage.class, new WxCpMessageGsonAdapter()); | INSTANCE.registerTypeAdapter(WxCpMessage.class, new WxCpMessageGsonAdapter()); | ||||
INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter()); | |||||
INSTANCE.registerTypeAdapter(WxCpMenu.class, new WxCpMenuGsonAdapter()); | |||||
INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter()); | INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter()); | ||||
INSTANCE.registerTypeAdapter(WxUser.class, new WxCpUserGsonAdapter()); | INSTANCE.registerTypeAdapter(WxUser.class, new WxCpUserGsonAdapter()); | ||||
INSTANCE.registerTypeAdapter(WxUserList.class, new WxCpUserListGsonAdapter()); | INSTANCE.registerTypeAdapter(WxUserList.class, new WxCpUserListGsonAdapter()); | ||||
@@ -11,7 +11,7 @@ package me.chanjar.weixin.enterprise.util.json; | |||||
import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
import me.chanjar.weixin.common.GsonHelper; | import me.chanjar.weixin.common.GsonHelper; | ||||
import me.chanjar.weixin.enterprise.bean.WxMenu; | |||||
import me.chanjar.weixin.enterprise.bean.WxCpMenu; | |||||
import com.google.gson.JsonArray; | import com.google.gson.JsonArray; | ||||
import com.google.gson.JsonDeserializationContext; | import com.google.gson.JsonDeserializationContext; | ||||
@@ -27,13 +27,13 @@ import com.google.gson.JsonSerializer; | |||||
* @author Daniel Qian | * @author Daniel Qian | ||||
* | * | ||||
*/ | */ | ||||
public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializer<WxMenu> { | |||||
public class WxCpMenuGsonAdapter implements JsonSerializer<WxCpMenu>, JsonDeserializer<WxCpMenu> { | |||||
public JsonElement serialize(WxMenu menu, Type typeOfSrc, JsonSerializationContext context) { | |||||
public JsonElement serialize(WxCpMenu menu, Type typeOfSrc, JsonSerializationContext context) { | |||||
JsonObject json = new JsonObject(); | JsonObject json = new JsonObject(); | ||||
JsonArray buttonArray = new JsonArray(); | JsonArray buttonArray = new JsonArray(); | ||||
for (WxMenu.WxMenuButton button : menu.getButtons()) { | |||||
for (WxCpMenu.WxMenuButton button : menu.getButtons()) { | |||||
JsonObject buttonJson = convertToJson(button); | JsonObject buttonJson = convertToJson(button); | ||||
buttonArray.add(buttonJson); | buttonArray.add(buttonJson); | ||||
} | } | ||||
@@ -42,7 +42,7 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial | |||||
return json; | return json; | ||||
} | } | ||||
protected JsonObject convertToJson(WxMenu.WxMenuButton button) { | |||||
protected JsonObject convertToJson(WxCpMenu.WxMenuButton button) { | |||||
JsonObject buttonJson = new JsonObject(); | JsonObject buttonJson = new JsonObject(); | ||||
buttonJson.addProperty("type", button.getType()); | buttonJson.addProperty("type", button.getType()); | ||||
buttonJson.addProperty("name", button.getName()); | buttonJson.addProperty("name", button.getName()); | ||||
@@ -50,7 +50,7 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial | |||||
buttonJson.addProperty("url", button.getUrl()); | buttonJson.addProperty("url", button.getUrl()); | ||||
if (button.getSubButtons() != null && button.getSubButtons().size() > 0) { | if (button.getSubButtons() != null && button.getSubButtons().size() > 0) { | ||||
JsonArray buttonArray = new JsonArray(); | JsonArray buttonArray = new JsonArray(); | ||||
for (WxMenu.WxMenuButton sub_button : button.getSubButtons()) { | |||||
for (WxCpMenu.WxMenuButton sub_button : button.getSubButtons()) { | |||||
buttonArray.add(convertToJson(sub_button)); | buttonArray.add(convertToJson(sub_button)); | ||||
} | } | ||||
buttonJson.add("sub_button", buttonArray); | buttonJson.add("sub_button", buttonArray); | ||||
@@ -58,18 +58,17 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial | |||||
return buttonJson; | return buttonJson; | ||||
} | } | ||||
public WxMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { | |||||
public WxCpMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { | |||||
/* | /* | ||||
* 操蛋的微信 | * 操蛋的微信 | ||||
* 创建菜单时是 { button : ... } | * 创建菜单时是 { button : ... } | ||||
* 查询菜单时是 { menu : { button : ... } } | * 查询菜单时是 { menu : { button : ... } } | ||||
*/ | */ | ||||
WxMenu menu = new WxMenu(); | |||||
JsonObject menuJson = json.getAsJsonObject().get("menu").getAsJsonObject(); | |||||
JsonArray buttonsJson = menuJson.get("button").getAsJsonArray(); | |||||
WxCpMenu menu = new WxCpMenu(); | |||||
JsonArray buttonsJson = json.getAsJsonObject().get("button").getAsJsonArray(); | |||||
for (int i = 0; i < buttonsJson.size(); i++) { | for (int i = 0; i < buttonsJson.size(); i++) { | ||||
JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject(); | JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject(); | ||||
WxMenu.WxMenuButton button = convertFromJson(buttonJson); | |||||
WxCpMenu.WxMenuButton button = convertFromJson(buttonJson); | |||||
menu.getButtons().add(button); | menu.getButtons().add(button); | ||||
if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) { | if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) { | ||||
continue; | continue; | ||||
@@ -83,8 +82,8 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial | |||||
return menu; | return menu; | ||||
} | } | ||||
protected WxMenu.WxMenuButton convertFromJson(JsonObject json) { | |||||
WxMenu.WxMenuButton button = new WxMenu.WxMenuButton(); | |||||
protected WxCpMenu.WxMenuButton convertFromJson(JsonObject json) { | |||||
WxCpMenu.WxMenuButton button = new WxCpMenu.WxMenuButton(); | |||||
button.setName(GsonHelper.getString(json, "name")); | button.setName(GsonHelper.getString(json, "name")); | ||||
button.setKey(GsonHelper.getString(json, "key")); | button.setKey(GsonHelper.getString(json, "key")); | ||||
button.setUrl(GsonHelper.getString(json, "url")); | button.setUrl(GsonHelper.getString(json, "url")); | ||||
@@ -2,6 +2,7 @@ package me.chanjar.weixin.enterprise.api; | |||||
import javax.xml.bind.JAXBException; | import javax.xml.bind.JAXBException; | ||||
import me.chanjar.weixin.enterprise.bean.WxCpMenu; | |||||
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; | ||||
@@ -9,8 +10,7 @@ import org.testng.annotations.Test; | |||||
import com.google.inject.Inject; | import com.google.inject.Inject; | ||||
import me.chanjar.weixin.enterprise.bean.WxMenu; | |||||
import me.chanjar.weixin.enterprise.bean.WxMenu.WxMenuButton; | |||||
import me.chanjar.weixin.enterprise.bean.WxCpMenu.WxMenuButton; | |||||
import me.chanjar.weixin.enterprise.exception.WxErrorException; | import me.chanjar.weixin.enterprise.exception.WxErrorException; | ||||
/** | /** | ||||
@@ -20,14 +20,14 @@ import me.chanjar.weixin.enterprise.exception.WxErrorException; | |||||
*/ | */ | ||||
@Test(groups="menuAPI", dependsOnGroups="baseAPI") | @Test(groups="menuAPI", dependsOnGroups="baseAPI") | ||||
@Guice(modules = ApiTestModule.class) | @Guice(modules = ApiTestModule.class) | ||||
public class WxMenuAPITest { | |||||
public class WxCpMenuAPITest { | |||||
@Inject | @Inject | ||||
protected WxCpServiceImpl wxService; | protected WxCpServiceImpl wxService; | ||||
@Test(dataProvider = "menu") | @Test(dataProvider = "menu") | ||||
public void testCreateMenu(WxMenu wxMenu) throws WxErrorException { | |||||
wxService.menuCreate(wxMenu); | |||||
public void testCreateMenu(WxCpMenu wxCpMenu) throws WxErrorException { | |||||
wxService.menuCreate(wxCpMenu); | |||||
} | } | ||||
@Test(dependsOnMethods = { "testCreateMenu"}) | @Test(dependsOnMethods = { "testCreateMenu"}) | ||||
@@ -42,7 +42,7 @@ public class WxMenuAPITest { | |||||
@DataProvider(name="menu") | @DataProvider(name="menu") | ||||
public Object[][] getMenu() throws JAXBException { | public Object[][] getMenu() throws JAXBException { | ||||
WxMenu menu = new WxMenu(); | |||||
WxCpMenu menu = new WxCpMenu(); | |||||
WxMenuButton button1 = new WxMenuButton(); | WxMenuButton button1 = new WxMenuButton(); | ||||
button1.setType(WxCpConsts.BUTTON_CLICK); | button1.setType(WxCpConsts.BUTTON_CLICK); | ||||
button1.setName("今日歌曲"); | button1.setName("今日歌曲"); |
@@ -1,24 +1,23 @@ | |||||
package me.chanjar.weixin.enterprise.bean; | package me.chanjar.weixin.enterprise.bean; | ||||
import me.chanjar.weixin.enterprise.bean.WxMenu; | |||||
import org.testng.Assert; | import org.testng.Assert; | ||||
import org.testng.annotations.DataProvider; | import org.testng.annotations.DataProvider; | ||||
import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||
import me.chanjar.weixin.enterprise.bean.WxMenu.WxMenuButton; | |||||
import me.chanjar.weixin.enterprise.bean.WxCpMenu.WxMenuButton; | |||||
@Test | @Test | ||||
public class WxMenuTest { | |||||
public class WxCpMenuTest { | |||||
@Test(dataProvider="wxReturnMenu") | @Test(dataProvider="wxReturnMenu") | ||||
public void testFromJson(String json) { | public void testFromJson(String json) { | ||||
WxMenu menu = WxMenu.fromJson(json); | |||||
WxCpMenu menu = WxCpMenu.fromJson(json); | |||||
Assert.assertEquals(menu.getButtons().size(), 3); | Assert.assertEquals(menu.getButtons().size(), 3); | ||||
} | } | ||||
@Test(dataProvider="wxPushMenu") | @Test(dataProvider="wxPushMenu") | ||||
public void testToJson(String json) { | public void testToJson(String json) { | ||||
WxMenu menu = new WxMenu(); | |||||
WxCpMenu menu = new WxCpMenu(); | |||||
WxMenuButton button1 = new WxMenuButton(); | WxMenuButton button1 = new WxMenuButton(); | ||||
button1.setType("click"); | button1.setType("click"); | ||||
button1.setName("今日歌曲"); | button1.setName("今日歌曲"); |