| @@ -1,208 +0,0 @@ | |||
| package me.chanjar.weixin.common.bean; | |||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | |||
| import java.io.InputStream; | |||
| import java.io.InputStreamReader; | |||
| import java.io.Serializable; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * 企业号菜单 | |||
| * | |||
| * @author Daniel Qian | |||
| */ | |||
| public class WxMenu implements Serializable { | |||
| private static final long serialVersionUID = -7083914585539687746L; | |||
| private List<WxMenuButton> buttons = new ArrayList<WxMenuButton>(); | |||
| private WxMenuRule matchRule; | |||
| /** | |||
| * 要用 http://mp.weixin.qq.com/wiki/16/ff9b7b85220e1396ffa16794a9d95adc.html 格式来反序列化 | |||
| * 相比 http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 的格式,外层多套了一个menu | |||
| */ | |||
| public static WxMenu fromJson(String json) { | |||
| return WxGsonBuilder.create().fromJson(json, WxMenu.class); | |||
| } | |||
| /** | |||
| * 要用 http://mp.weixin.qq.com/wiki/16/ff9b7b85220e1396ffa16794a9d95adc.html 格式来反序列化 | |||
| * 相比 http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 的格式,外层多套了一个menu | |||
| */ | |||
| public static WxMenu fromJson(InputStream is) { | |||
| return WxGsonBuilder.create().fromJson(new InputStreamReader(is, StandardCharsets.UTF_8), WxMenu.class); | |||
| } | |||
| public List<WxMenuButton> getButtons() { | |||
| return buttons; | |||
| } | |||
| public void setButtons(List<WxMenuButton> buttons) { | |||
| this.buttons = buttons; | |||
| } | |||
| public WxMenuRule getMatchRule() { | |||
| return matchRule; | |||
| } | |||
| public void setMatchRule(WxMenuRule matchRule) { | |||
| this.matchRule = matchRule; | |||
| } | |||
| public String toJson() { | |||
| return WxGsonBuilder.create().toJson(this); | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "WxMenu{" + | |||
| "buttons=" + buttons + | |||
| '}'; | |||
| } | |||
| public static class WxMenuButton { | |||
| private String type; | |||
| private String name; | |||
| private String key; | |||
| private String url; | |||
| private List<WxMenuButton> subButtons = new ArrayList<WxMenuButton>(); | |||
| public String getType() { | |||
| return type; | |||
| } | |||
| public void setType(String type) { | |||
| this.type = type; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| public String getKey() { | |||
| return key; | |||
| } | |||
| public void setKey(String key) { | |||
| this.key = key; | |||
| } | |||
| public String getUrl() { | |||
| return url; | |||
| } | |||
| public void setUrl(String url) { | |||
| this.url = url; | |||
| } | |||
| public List<WxMenuButton> getSubButtons() { | |||
| return subButtons; | |||
| } | |||
| public void setSubButtons(List<WxMenuButton> subButtons) { | |||
| this.subButtons = subButtons; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "WxMenuButton{" + | |||
| "type='" + type + '\'' + | |||
| ", name='" + name + '\'' + | |||
| ", key='" + key + '\'' + | |||
| ", url='" + url + '\'' + | |||
| ", subButtons=" + subButtons + | |||
| '}'; | |||
| } | |||
| } | |||
| public static class WxMenuRule { | |||
| private String tagId; | |||
| private String sex; | |||
| private String country; | |||
| private String province; | |||
| private String city; | |||
| private String clientPlatformType; | |||
| private String language; | |||
| public String getTagId() { | |||
| return tagId; | |||
| } | |||
| public void setTagId(String tagId) { | |||
| this.tagId = tagId; | |||
| } | |||
| public String getSex() { | |||
| return sex; | |||
| } | |||
| public void setSex(String sex) { | |||
| this.sex = sex; | |||
| } | |||
| public String getCountry() { | |||
| return country; | |||
| } | |||
| public void setCountry(String country) { | |||
| this.country = country; | |||
| } | |||
| public String getProvince() { | |||
| return province; | |||
| } | |||
| public void setProvince(String province) { | |||
| this.province = province; | |||
| } | |||
| public String getCity() { | |||
| return city; | |||
| } | |||
| public void setCity(String city) { | |||
| this.city = city; | |||
| } | |||
| public String getClientPlatformType() { | |||
| return clientPlatformType; | |||
| } | |||
| public void setClientPlatformType(String clientPlatformType) { | |||
| this.clientPlatformType = clientPlatformType; | |||
| } | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "matchrule:{" + | |||
| "tag_id='" + tagId + '\'' + | |||
| ", sex='" + sex + '\'' + | |||
| ", country" + country + '\'' + | |||
| ", province" + province + '\'' + | |||
| ", city" + city + '\'' + | |||
| ", client_platform_type" + clientPlatformType + '\'' + | |||
| ", language" + language + '\'' + | |||
| "}"; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,69 @@ | |||
| package me.chanjar.weixin.common.bean.menu; | |||
| import java.io.InputStream; | |||
| import java.io.InputStreamReader; | |||
| import java.io.Serializable; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | |||
| /** | |||
| * 企业号菜单 | |||
| * | |||
| * @author Daniel Qian | |||
| */ | |||
| public class WxMenu implements Serializable { | |||
| private static final long serialVersionUID = -7083914585539687746L; | |||
| private List<WxMenuButton> buttons = new ArrayList<WxMenuButton>(); | |||
| private WxMenuRule matchRule; | |||
| /** | |||
| * 要用 http://mp.weixin.qq.com/wiki/16/ff9b7b85220e1396ffa16794a9d95adc.html 格式来反序列化 | |||
| * 相比 http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 的格式,外层多套了一个menu | |||
| */ | |||
| public static WxMenu fromJson(String json) { | |||
| return WxGsonBuilder.create().fromJson(json, WxMenu.class); | |||
| } | |||
| /** | |||
| * 要用 http://mp.weixin.qq.com/wiki/16/ff9b7b85220e1396ffa16794a9d95adc.html 格式来反序列化 | |||
| * 相比 http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 的格式,外层多套了一个menu | |||
| */ | |||
| public static WxMenu fromJson(InputStream is) { | |||
| return WxGsonBuilder.create().fromJson(new InputStreamReader(is, StandardCharsets.UTF_8), WxMenu.class); | |||
| } | |||
| public List<WxMenuButton> getButtons() { | |||
| return buttons; | |||
| } | |||
| public void setButtons(List<WxMenuButton> buttons) { | |||
| this.buttons = buttons; | |||
| } | |||
| public WxMenuRule getMatchRule() { | |||
| return matchRule; | |||
| } | |||
| public void setMatchRule(WxMenuRule matchRule) { | |||
| this.matchRule = matchRule; | |||
| } | |||
| public String toJson() { | |||
| return WxGsonBuilder.create().toJson(this); | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return "WxMenu{" + | |||
| "buttons=" + buttons + | |||
| '}'; | |||
| } | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| package me.chanjar.weixin.common.bean.menu; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import org.apache.commons.lang3.builder.ToStringBuilder; | |||
| import org.apache.commons.lang3.builder.ToStringStyle; | |||
| public class WxMenuButton { | |||
| private String type; | |||
| private String name; | |||
| private String key; | |||
| private String url; | |||
| private List<WxMenuButton> subButtons = new ArrayList<WxMenuButton>(); | |||
| public String getType() { | |||
| return type; | |||
| } | |||
| public void setType(String type) { | |||
| this.type = type; | |||
| } | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| public String getKey() { | |||
| return key; | |||
| } | |||
| public void setKey(String key) { | |||
| this.key = key; | |||
| } | |||
| public String getUrl() { | |||
| return url; | |||
| } | |||
| public void setUrl(String url) { | |||
| this.url = url; | |||
| } | |||
| public List<WxMenuButton> getSubButtons() { | |||
| return subButtons; | |||
| } | |||
| public void setSubButtons(List<WxMenuButton> subButtons) { | |||
| this.subButtons = subButtons; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); | |||
| } | |||
| } | |||
| @@ -0,0 +1,75 @@ | |||
| package me.chanjar.weixin.common.bean.menu; | |||
| import org.apache.commons.lang3.builder.ToStringBuilder; | |||
| import org.apache.commons.lang3.builder.ToStringStyle; | |||
| public class WxMenuRule { | |||
| private String tagId; | |||
| private String sex; | |||
| private String country; | |||
| private String province; | |||
| private String city; | |||
| private String clientPlatformType; | |||
| private String language; | |||
| public String getTagId() { | |||
| return tagId; | |||
| } | |||
| public void setTagId(String tagId) { | |||
| this.tagId = tagId; | |||
| } | |||
| public String getSex() { | |||
| return sex; | |||
| } | |||
| public void setSex(String sex) { | |||
| this.sex = sex; | |||
| } | |||
| public String getCountry() { | |||
| return country; | |||
| } | |||
| public void setCountry(String country) { | |||
| this.country = country; | |||
| } | |||
| public String getProvince() { | |||
| return province; | |||
| } | |||
| public void setProvince(String province) { | |||
| this.province = province; | |||
| } | |||
| public String getCity() { | |||
| return city; | |||
| } | |||
| public void setCity(String city) { | |||
| this.city = city; | |||
| } | |||
| public String getClientPlatformType() { | |||
| return clientPlatformType; | |||
| } | |||
| public void setClientPlatformType(String clientPlatformType) { | |||
| this.clientPlatformType = clientPlatformType; | |||
| } | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); | |||
| } | |||
| } | |||
| @@ -2,8 +2,9 @@ package me.chanjar.weixin.common.util.json; | |||
| import com.google.gson.Gson; | |||
| import com.google.gson.GsonBuilder; | |||
| import me.chanjar.weixin.common.bean.WxAccessToken; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.result.WxError; | |||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||
| @@ -8,11 +8,22 @@ | |||
| */ | |||
| package me.chanjar.weixin.common.util.json; | |||
| import com.google.gson.*; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import java.lang.reflect.Type; | |||
| import com.google.gson.JsonArray; | |||
| import com.google.gson.JsonDeserializationContext; | |||
| import com.google.gson.JsonDeserializer; | |||
| import com.google.gson.JsonElement; | |||
| import com.google.gson.JsonObject; | |||
| import com.google.gson.JsonParseException; | |||
| import com.google.gson.JsonSerializationContext; | |||
| import com.google.gson.JsonSerializer; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuRule; | |||
| /** | |||
| * @author Daniel Qian | |||
| */ | |||
| @@ -22,7 +33,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| JsonObject json = new JsonObject(); | |||
| JsonArray buttonArray = new JsonArray(); | |||
| for (WxMenu.WxMenuButton button : menu.getButtons()) { | |||
| for (WxMenuButton button : menu.getButtons()) { | |||
| JsonObject buttonJson = convertToJson(button); | |||
| buttonArray.add(buttonJson); | |||
| } | |||
| @@ -35,7 +46,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| return json; | |||
| } | |||
| protected JsonObject convertToJson(WxMenu.WxMenuButton button) { | |||
| protected JsonObject convertToJson(WxMenuButton button) { | |||
| JsonObject buttonJson = new JsonObject(); | |||
| buttonJson.addProperty("type", button.getType()); | |||
| buttonJson.addProperty("name", button.getName()); | |||
| @@ -43,7 +54,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| 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 (WxMenuButton sub_button : button.getSubButtons()) { | |||
| buttonArray.add(convertToJson(sub_button)); | |||
| } | |||
| buttonJson.add("sub_button", buttonArray); | |||
| @@ -51,7 +62,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| return buttonJson; | |||
| } | |||
| protected JsonObject convertToJson(WxMenu.WxMenuRule menuRule) { | |||
| protected JsonObject convertToJson(WxMenuRule menuRule) { | |||
| JsonObject matchRule = new JsonObject(); | |||
| matchRule.addProperty("tag_id", menuRule.getTagId()); | |||
| matchRule.addProperty("sex", menuRule.getSex()); | |||
| @@ -74,7 +85,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| JsonArray buttonsJson = menuJson.get("button").getAsJsonArray(); | |||
| for (int i = 0; i < buttonsJson.size(); i++) { | |||
| JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject(); | |||
| WxMenu.WxMenuButton button = convertFromJson(buttonJson); | |||
| WxMenuButton button = convertFromJson(buttonJson); | |||
| menu.getButtons().add(button); | |||
| if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) { | |||
| continue; | |||
| @@ -88,8 +99,8 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||
| return menu; | |||
| } | |||
| protected WxMenu.WxMenuButton convertFromJson(JsonObject json) { | |||
| WxMenu.WxMenuButton button = new WxMenu.WxMenuButton(); | |||
| protected WxMenuButton convertFromJson(JsonObject json) { | |||
| WxMenuButton button = new WxMenuButton(); | |||
| button.setName(GsonHelper.getString(json, "name")); | |||
| button.setKey(GsonHelper.getString(json, "key")); | |||
| button.setUrl(GsonHelper.getString(json, "url")); | |||
| @@ -1,10 +1,13 @@ | |||
| package me.chanjar.weixin.common.bean; | |||
| import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton; | |||
| import org.testng.Assert; | |||
| import org.testng.annotations.DataProvider; | |||
| import org.testng.annotations.Test; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuRule; | |||
| @Test | |||
| public class WxMenuTest { | |||
| @@ -66,7 +69,7 @@ public class WxMenuTest { | |||
| menu.getButtons().add(button1); | |||
| WxMenu.WxMenuRule wxMenuRule = new WxMenu.WxMenuRule(); | |||
| WxMenuRule wxMenuRule = new WxMenuRule(); | |||
| wxMenuRule.setTagId("2"); | |||
| wxMenuRule.setSex("1"); | |||
| wxMenuRule.setCountry("中国"); | |||
| @@ -1,7 +1,12 @@ | |||
| package me.chanjar.weixin.cp.api; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.util.List; | |||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import me.chanjar.weixin.common.session.WxSession; | |||
| @@ -12,11 +17,6 @@ import me.chanjar.weixin.cp.bean.WxCpMessage; | |||
| import me.chanjar.weixin.cp.bean.WxCpTag; | |||
| import me.chanjar.weixin.cp.bean.WxCpUser; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.util.List; | |||
| /** | |||
| * 微信API的Service | |||
| */ | |||
| @@ -1,5 +1,23 @@ | |||
| package me.chanjar.weixin.cp.api; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.StringReader; | |||
| import java.security.NoSuchAlgorithmException; | |||
| import java.util.List; | |||
| import java.util.UUID; | |||
| import org.apache.http.HttpHost; | |||
| import org.apache.http.client.ClientProtocolException; | |||
| import org.apache.http.client.config.RequestConfig; | |||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||
| import org.apache.http.client.methods.HttpGet; | |||
| import org.apache.http.impl.client.BasicResponseHandler; | |||
| import org.apache.http.impl.client.CloseableHttpClient; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import com.google.gson.JsonArray; | |||
| import com.google.gson.JsonElement; | |||
| import com.google.gson.JsonObject; | |||
| @@ -7,9 +25,10 @@ import com.google.gson.JsonPrimitive; | |||
| import com.google.gson.internal.Streams; | |||
| import com.google.gson.reflect.TypeToken; | |||
| import com.google.gson.stream.JsonReader; | |||
| import me.chanjar.weixin.common.bean.WxAccessToken; | |||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.result.WxError; | |||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| @@ -20,30 +39,20 @@ import me.chanjar.weixin.common.util.RandomUtils; | |||
| import me.chanjar.weixin.common.util.StringUtils; | |||
| import me.chanjar.weixin.common.util.crypto.SHA1; | |||
| import me.chanjar.weixin.common.util.fs.FileUtils; | |||
| import me.chanjar.weixin.common.util.http.*; | |||
| import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder; | |||
| import me.chanjar.weixin.common.util.http.DefaultApacheHttpHttpClientBuilder; | |||
| import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.RequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.URIUtil; | |||
| import me.chanjar.weixin.common.util.json.GsonHelper; | |||
| import me.chanjar.weixin.cp.bean.WxCpDepart; | |||
| import me.chanjar.weixin.cp.bean.WxCpMessage; | |||
| import me.chanjar.weixin.cp.bean.WxCpTag; | |||
| import me.chanjar.weixin.cp.bean.WxCpUser; | |||
| import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; | |||
| import org.apache.http.HttpHost; | |||
| import org.apache.http.client.ClientProtocolException; | |||
| import org.apache.http.client.config.RequestConfig; | |||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||
| import org.apache.http.client.methods.HttpGet; | |||
| import org.apache.http.impl.client.BasicResponseHandler; | |||
| import org.apache.http.impl.client.CloseableHttpClient; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.StringReader; | |||
| import java.security.NoSuchAlgorithmException; | |||
| import java.util.List; | |||
| import java.util.UUID; | |||
| public class WxCpServiceImpl implements WxCpService { | |||
| @@ -1,15 +1,17 @@ | |||
| package me.chanjar.weixin.cp.api; | |||
| import com.google.inject.Inject; | |||
| import me.chanjar.weixin.common.api.WxConsts; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import org.testng.Assert; | |||
| import org.testng.annotations.DataProvider; | |||
| import org.testng.annotations.Guice; | |||
| import org.testng.annotations.Test; | |||
| import com.google.inject.Inject; | |||
| import me.chanjar.weixin.common.api.WxConsts; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| /** | |||
| * 测试菜单 | |||
| * @author Daniel Qian | |||
| @@ -1,6 +1,6 @@ | |||
| package me.chanjar.weixin.mp.api; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| /** | |||
| @@ -1,6 +1,6 @@ | |||
| package me.chanjar.weixin.mp.api.impl; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | |||
| @@ -1,16 +1,18 @@ | |||
| package me.chanjar.weixin.mp.api.impl; | |||
| import com.google.inject.Inject; | |||
| import me.chanjar.weixin.common.api.WxConsts; | |||
| import me.chanjar.weixin.common.bean.WxMenu; | |||
| import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import me.chanjar.weixin.mp.api.ApiTestModule; | |||
| import org.testng.Assert; | |||
| import org.testng.annotations.DataProvider; | |||
| import org.testng.annotations.Guice; | |||
| import org.testng.annotations.Test; | |||
| import com.google.inject.Inject; | |||
| import me.chanjar.weixin.common.api.WxConsts; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||
| import me.chanjar.weixin.mp.api.ApiTestModule; | |||
| /** | |||
| * 测试菜单 | |||
| * @author chanjarster | |||