Kaynağa Gözat

菜单接口的支持

master
Daniel Qian 10 yıl önce
ebeveyn
işleme
161a6423ce
7 değiştirilmiş dosya ile 33 ekleme ve 35 silme
  1. +2
    -2
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpService.java
  2. +3
    -3
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpServiceImpl.java
  3. +5
    -5
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpMenu.java
  4. +1
    -1
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpGsonBuilder.java
  5. +12
    -13
      weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpMenuGsonAdapter.java
  6. +6
    -6
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCpMenuAPITest.java
  7. +4
    -5
      weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxCpMenuTest.java

+ 2
- 2
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpService.java Dosyayı Görüntüle

@@ -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>


+ 3
- 3
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpServiceImpl.java Dosyayı Görüntüle

@@ -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) {


weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxMenu.java → weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/bean/WxCpMenu.java Dosyayı Görüntüle

@@ -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 {

+ 1
- 1
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpGsonBuilder.java Dosyayı Görüntüle

@@ -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());


+ 12
- 13
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpMenuGsonAdapter.java Dosyayı Görüntüle

@@ -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"));


weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxMenuAPITest.java → weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/api/WxCpMenuAPITest.java Dosyayı Görüntüle

@@ -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("今日歌曲");

weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxMenuTest.java → weixin-java-enterprise/src/test/java/me/chanjar/weixin/enterprise/bean/WxCpMenuTest.java Dosyayı Görüntüle

@@ -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("今日歌曲");

Yükleniyor…
İptal
Kaydet