Selaa lähdekoodia

菜单接口的支持

master
Daniel Qian 10 vuotta sitten
vanhempi
commit
161a6423ce
7 muutettua tiedostoa jossa 33 lisäystä ja 35 poistoa
  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 Näytä tiedosto

@@ -110,7 +110,7 @@ public interface WxCpService {
* @param menu
* @throws WxErrorException
*/
public void menuCreate(WxMenu menu) throws WxErrorException;
public void menuCreate(WxCpMenu menu) throws WxErrorException;
/**
* <pre>
@@ -129,7 +129,7 @@ public interface WxCpService {
* @return
* @throws WxErrorException
*/
public WxMenu menuGet() throws WxErrorException;
public WxCpMenu menuGet() throws WxErrorException;

/**
* <pre>


+ 3
- 3
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/api/WxCpServiceImpl.java Näytä tiedosto

@@ -106,7 +106,7 @@ public class WxCpServiceImpl implements WxCpService {
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";
execute(new SimplePostRequestExecutor(), url, menu.toJson());
}
@@ -116,11 +116,11 @@ public class WxCpServiceImpl implements WxCpService {
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";
try {
String resultContent = execute(new SimpleGetRequestExecutor(), url, null);
return WxMenu.fromJson(resultContent);
return WxCpMenu.fromJson(resultContent);
} catch (WxErrorException e) {
// 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 Näytä tiedosto

@@ -12,7 +12,7 @@ import me.chanjar.weixin.enterprise.util.json.WxCpGsonBuilder;
* @author Daniel Qian
*
*/
public class WxMenu {
public class WxCpMenu {

private List<WxMenuButton> buttons = new ArrayList<WxMenuButton>();

@@ -28,12 +28,12 @@ public class WxMenu {
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 {

+ 1
- 1
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpGsonBuilder.java Näytä tiedosto

@@ -13,7 +13,7 @@ public class WxCpGsonBuilder {
static {
INSTANCE.disableHtmlEscaping();
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(WxUser.class, new WxCpUserGsonAdapter());
INSTANCE.registerTypeAdapter(WxUserList.class, new WxCpUserListGsonAdapter());


+ 12
- 13
weixin-java-enterprise/src/main/java/me/chanjar/weixin/enterprise/util/json/WxCpMenuGsonAdapter.java Näytä tiedosto

@@ -11,7 +11,7 @@ package me.chanjar.weixin.enterprise.util.json;
import java.lang.reflect.Type;

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.JsonDeserializationContext;
@@ -27,13 +27,13 @@ import com.google.gson.JsonSerializer;
* @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();

JsonArray buttonArray = new JsonArray();
for (WxMenu.WxMenuButton button : menu.getButtons()) {
for (WxCpMenu.WxMenuButton button : menu.getButtons()) {
JsonObject buttonJson = convertToJson(button);
buttonArray.add(buttonJson);
}
@@ -42,7 +42,7 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial
return json;
}

protected JsonObject convertToJson(WxMenu.WxMenuButton button) {
protected JsonObject convertToJson(WxCpMenu.WxMenuButton button) {
JsonObject buttonJson = new JsonObject();
buttonJson.addProperty("type", button.getType());
buttonJson.addProperty("name", button.getName());
@@ -50,7 +50,7 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial
buttonJson.addProperty("url", button.getUrl());
if (button.getSubButtons() != null && button.getSubButtons().size() > 0) {
JsonArray buttonArray = new JsonArray();
for (WxMenu.WxMenuButton sub_button : button.getSubButtons()) {
for (WxCpMenu.WxMenuButton sub_button : button.getSubButtons()) {
buttonArray.add(convertToJson(sub_button));
}
buttonJson.add("sub_button", buttonArray);
@@ -58,18 +58,17 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial
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 : ... }
* 查询菜单时是 { 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++) {
JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject();
WxMenu.WxMenuButton button = convertFromJson(buttonJson);
WxCpMenu.WxMenuButton button = convertFromJson(buttonJson);
menu.getButtons().add(button);
if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) {
continue;
@@ -83,8 +82,8 @@ public class WxCpMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserial
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.setKey(GsonHelper.getString(json, "key"));
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 Näytä tiedosto

@@ -2,6 +2,7 @@ package me.chanjar.weixin.enterprise.api;

import javax.xml.bind.JAXBException;

import me.chanjar.weixin.enterprise.bean.WxCpMenu;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
@@ -9,8 +10,7 @@ import org.testng.annotations.Test;

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;

/**
@@ -20,14 +20,14 @@ import me.chanjar.weixin.enterprise.exception.WxErrorException;
*/
@Test(groups="menuAPI", dependsOnGroups="baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxMenuAPITest {
public class WxCpMenuAPITest {

@Inject
protected WxCpServiceImpl wxService;
@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"})
@@ -42,7 +42,7 @@ public class WxMenuAPITest {
@DataProvider(name="menu")
public Object[][] getMenu() throws JAXBException {
WxMenu menu = new WxMenu();
WxCpMenu menu = new WxCpMenu();
WxMenuButton button1 = new WxMenuButton();
button1.setType(WxCpConsts.BUTTON_CLICK);
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 Näytä tiedosto

@@ -1,24 +1,23 @@
package me.chanjar.weixin.enterprise.bean;

import me.chanjar.weixin.enterprise.bean.WxMenu;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import me.chanjar.weixin.enterprise.bean.WxMenu.WxMenuButton;
import me.chanjar.weixin.enterprise.bean.WxCpMenu.WxMenuButton;

@Test
public class WxMenuTest {
public class WxCpMenuTest {

@Test(dataProvider="wxReturnMenu")
public void testFromJson(String json) {
WxMenu menu = WxMenu.fromJson(json);
WxCpMenu menu = WxCpMenu.fromJson(json);
Assert.assertEquals(menu.getButtons().size(), 3);
}
@Test(dataProvider="wxPushMenu")
public void testToJson(String json) {
WxMenu menu = new WxMenu();
WxCpMenu menu = new WxCpMenu();
WxMenuButton button1 = new WxMenuButton();
button1.setType("click");
button1.setName("今日歌曲");

Ladataan…
Peruuta
Tallenna