| @@ -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.Gson; | ||||
| import com.google.gson.GsonBuilder; | import com.google.gson.GsonBuilder; | ||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | 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.WxError; | ||||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | ||||
| @@ -8,11 +8,22 @@ | |||||
| */ | */ | ||||
| package me.chanjar.weixin.common.util.json; | package me.chanjar.weixin.common.util.json; | ||||
| import com.google.gson.*; | |||||
| import me.chanjar.weixin.common.bean.WxMenu; | |||||
| import java.lang.reflect.Type; | 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 | * @author Daniel Qian | ||||
| */ | */ | ||||
| @@ -22,7 +33,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| JsonObject json = new JsonObject(); | JsonObject json = new JsonObject(); | ||||
| JsonArray buttonArray = new JsonArray(); | JsonArray buttonArray = new JsonArray(); | ||||
| for (WxMenu.WxMenuButton button : menu.getButtons()) { | |||||
| for (WxMenuButton button : menu.getButtons()) { | |||||
| JsonObject buttonJson = convertToJson(button); | JsonObject buttonJson = convertToJson(button); | ||||
| buttonArray.add(buttonJson); | buttonArray.add(buttonJson); | ||||
| } | } | ||||
| @@ -35,7 +46,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| return json; | return json; | ||||
| } | } | ||||
| protected JsonObject convertToJson(WxMenu.WxMenuButton button) { | |||||
| protected JsonObject convertToJson(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()); | ||||
| @@ -43,7 +54,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| 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 (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); | ||||
| @@ -51,7 +62,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| return buttonJson; | return buttonJson; | ||||
| } | } | ||||
| protected JsonObject convertToJson(WxMenu.WxMenuRule menuRule) { | |||||
| protected JsonObject convertToJson(WxMenuRule menuRule) { | |||||
| JsonObject matchRule = new JsonObject(); | JsonObject matchRule = new JsonObject(); | ||||
| matchRule.addProperty("tag_id", menuRule.getTagId()); | matchRule.addProperty("tag_id", menuRule.getTagId()); | ||||
| matchRule.addProperty("sex", menuRule.getSex()); | matchRule.addProperty("sex", menuRule.getSex()); | ||||
| @@ -74,7 +85,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| JsonArray buttonsJson = menuJson.get("button").getAsJsonArray(); | JsonArray buttonsJson = menuJson.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); | |||||
| 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; | ||||
| @@ -88,8 +99,8 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| return menu; | 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.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")); | ||||
| @@ -1,10 +1,13 @@ | |||||
| package me.chanjar.weixin.common.bean; | package me.chanjar.weixin.common.bean; | ||||
| import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton; | |||||
| 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.common.bean.menu.WxMenu; | |||||
| import me.chanjar.weixin.common.bean.menu.WxMenuButton; | |||||
| import me.chanjar.weixin.common.bean.menu.WxMenuRule; | |||||
| @Test | @Test | ||||
| public class WxMenuTest { | public class WxMenuTest { | ||||
| @@ -66,7 +69,7 @@ public class WxMenuTest { | |||||
| menu.getButtons().add(button1); | menu.getButtons().add(button1); | ||||
| WxMenu.WxMenuRule wxMenuRule = new WxMenu.WxMenuRule(); | |||||
| WxMenuRule wxMenuRule = new WxMenuRule(); | |||||
| wxMenuRule.setTagId("2"); | wxMenuRule.setTagId("2"); | ||||
| wxMenuRule.setSex("1"); | wxMenuRule.setSex("1"); | ||||
| wxMenuRule.setCountry("中国"); | wxMenuRule.setCountry("中国"); | ||||
| @@ -1,7 +1,12 @@ | |||||
| package me.chanjar.weixin.cp.api; | 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.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.bean.result.WxMediaUploadResult; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.session.WxSession; | 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.WxCpTag; | ||||
| import me.chanjar.weixin.cp.bean.WxCpUser; | 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 | * 微信API的Service | ||||
| */ | */ | ||||
| @@ -1,5 +1,23 @@ | |||||
| package me.chanjar.weixin.cp.api; | 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.JsonArray; | ||||
| import com.google.gson.JsonElement; | import com.google.gson.JsonElement; | ||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| @@ -7,9 +25,10 @@ import com.google.gson.JsonPrimitive; | |||||
| import com.google.gson.internal.Streams; | import com.google.gson.internal.Streams; | ||||
| import com.google.gson.reflect.TypeToken; | import com.google.gson.reflect.TypeToken; | ||||
| import com.google.gson.stream.JsonReader; | import com.google.gson.stream.JsonReader; | ||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | import me.chanjar.weixin.common.bean.WxAccessToken; | ||||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | 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.WxError; | ||||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | 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.StringUtils; | ||||
| import me.chanjar.weixin.common.util.crypto.SHA1; | import me.chanjar.weixin.common.util.crypto.SHA1; | ||||
| import me.chanjar.weixin.common.util.fs.FileUtils; | 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.common.util.json.GsonHelper; | ||||
| import me.chanjar.weixin.cp.bean.WxCpDepart; | import me.chanjar.weixin.cp.bean.WxCpDepart; | ||||
| import me.chanjar.weixin.cp.bean.WxCpMessage; | import me.chanjar.weixin.cp.bean.WxCpMessage; | ||||
| import me.chanjar.weixin.cp.bean.WxCpTag; | import me.chanjar.weixin.cp.bean.WxCpTag; | ||||
| import me.chanjar.weixin.cp.bean.WxCpUser; | import me.chanjar.weixin.cp.bean.WxCpUser; | ||||
| import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; | 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 { | public class WxCpServiceImpl implements WxCpService { | ||||
| @@ -1,15 +1,17 @@ | |||||
| package me.chanjar.weixin.cp.api; | 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.Assert; | ||||
| import org.testng.annotations.DataProvider; | import org.testng.annotations.DataProvider; | ||||
| import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
| import org.testng.annotations.Test; | 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 | * @author Daniel Qian | ||||
| @@ -1,6 +1,6 @@ | |||||
| package me.chanjar.weixin.mp.api; | 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; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| /** | /** | ||||
| @@ -1,6 +1,6 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | 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.exception.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | ||||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | ||||
| @@ -1,16 +1,18 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | 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.Assert; | ||||
| import org.testng.annotations.DataProvider; | import org.testng.annotations.DataProvider; | ||||
| import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
| import org.testng.annotations.Test; | 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 | * @author chanjarster | ||||