From 34fda26e020b2a812927bb8bc2c74d8b8f716c94 Mon Sep 17 00:00:00 2001 From: Tianmu <277297372@qq.com> Date: Mon, 21 Dec 2015 16:00:18 +0800 Subject: [PATCH 1/7] add conditional menu method --- .../me/chanjar/weixin/common/bean/WxMenu.java | 85 ++++++++++++++++++- .../common/util/json/WxMenuGsonAdapter.java | 10 ++- .../me/chanjar/weixin/mp/api/WxMpService.java | 22 +++++ .../weixin/mp/api/WxMpServiceImpl.java | 28 +++++- 4 files changed, 138 insertions(+), 7 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java index 8e40c113b..5a1f4686a 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java @@ -3,13 +3,13 @@ package me.chanjar.weixin.common.bean; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Serializable; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import me.chanjar.weixin.common.util.json.WxGsonBuilder; import org.apache.commons.codec.Charsets; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + /** * 企业号菜单 * @author Daniel Qian @@ -19,6 +19,8 @@ public class WxMenu implements Serializable { private List buttons = new ArrayList(); + private WxMenuRule matchrule; + public List getButtons() { return buttons; } @@ -27,6 +29,14 @@ public class WxMenu implements Serializable { this.buttons = buttons; } + public WxMenuRule getMatchrule() { + return matchrule; + } + + public void setMatchrule(WxMenuRule matchrule) { + this.matchrule = matchrule; + } + public String toJson() { return WxGsonBuilder.create().toJson(this); } @@ -118,5 +128,74 @@ public class WxMenu implements Serializable { '}'; } } - + + public static class WxMenuRule { + private String groupId; + private String sex; + private String country; + private String province; + private String city; + private String clientPlatformType; + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + 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; + } + + @Override + public String toString() { + return "matchrule:{" + + "group_id='" + groupId + '\'' + + ", sex='" + sex + '\'' + + ", country" + country + '\'' + + ", province" + province + '\'' + + ", city" + city + '\'' + + ", client_platform_type" + clientPlatformType + '\'' + + "}"; + } + } + } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java index 6fc788d30..4b1a720d3 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java @@ -10,8 +10,7 @@ package me.chanjar.weixin.common.util.json; import java.lang.reflect.Type; -import me.chanjar.weixin.common.bean.WxMenu; - +import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; @@ -21,6 +20,8 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; +import me.chanjar.weixin.common.bean.WxMenu; + /** * * @author Daniel Qian @@ -38,6 +39,11 @@ public class WxMenuGsonAdapter implements JsonSerializer, JsonDeserializ } json.add("button", buttonArray); + if (menu.getMatchrule() != null) { + Gson gson = new Gson(); + json.add("matchrule", gson.toJsonTree(menu.getMatchrule())); + } + return json; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index 6dd96f58b..e6ce30cff 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -324,6 +324,8 @@ public interface WxMpService { *
    * 自定义菜单创建接口
    * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单创建接口
+   * 如果要创建个性化菜单,请设置matchrule属性
+   * 详情请见:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
    * 
* @param menu * @throws WxErrorException @@ -339,6 +341,16 @@ public interface WxMpService { */ public void menuDelete() throws WxErrorException; + /** + *
+   * 删除个性化菜单接口
+   * 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
+   * 
+ * @param menuid + * @throws WxErrorException + */ + public void menuDelete(String menuid) throws WxErrorException; + /** *
    * 自定义菜单查询接口
@@ -348,6 +360,16 @@ public interface WxMpService {
    * @throws WxErrorException
    */
   public WxMenu menuGet() throws WxErrorException;
+  
+  /**
+   * 
+   * 测试个性化菜单匹配结果
+   * 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
+   * 
+ * @param userid 可以是粉丝的OpenID,也可以是粉丝的微信号。 + * @throws WxErrorException + */ + public WxMenu menuTryMatch(String userid) throws WxErrorException; /** *
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
index 232dc198d..a77b3c081 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
@@ -230,14 +230,24 @@ public class WxMpServiceImpl implements WxMpService {
   }
 
   public void menuCreate(WxMenu menu) throws WxErrorException {
-    String url = "https://api.weixin.qq.com/cgi-bin/menu/create";
-    execute(new SimplePostRequestExecutor(), url, menu.toJson());
+		if (menu.getMatchrule() != null) {
+			String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional";
+			execute(new SimplePostRequestExecutor(), url, menu.toJson());
+		} else {
+			String url = "https://api.weixin.qq.com/cgi-bin/menu/create";
+			execute(new SimplePostRequestExecutor(), url, menu.toJson());
+		}
   }
 
   public void menuDelete() throws WxErrorException {
     String url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
     execute(new SimpleGetRequestExecutor(), url, null);
   }
+  
+  public void menuDelete(String menuid) throws WxErrorException {
+  	String url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional";
+    execute(new SimpleGetRequestExecutor(), url, "menuid=" + menuid);
+  }
 
   public WxMenu menuGet() throws WxErrorException {
     String url = "https://api.weixin.qq.com/cgi-bin/menu/get";
@@ -252,6 +262,20 @@ public class WxMpServiceImpl implements WxMpService {
       throw e;
     }
   }
+  
+  public WxMenu menuTryMatch(String userid) throws WxErrorException {
+  	String url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch";
+  	try {
+  		String resultContent = execute(new SimpleGetRequestExecutor(), url, "user_id=" + userid);
+  		return WxMenu.fromJson(resultContent);
+  	} catch (WxErrorException e) {
+      // 46003 不存在的菜单数据     46002 不存在的菜单版本
+      if (e.getError().getErrorCode() == 46003 || e.getError().getErrorCode() == 46002) {
+        return null;
+      }
+      throw e;
+    }
+  }
 
   public WxMediaUploadResult mediaUpload(String mediaType, String fileType, InputStream inputStream) throws WxErrorException, IOException {
     return mediaUpload(mediaType, FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType));

From f585385e6e3479552213dd3fe8fd54089e5e962e Mon Sep 17 00:00:00 2001
From: tianmu 
Date: Mon, 21 Dec 2015 16:13:03 +0800
Subject: [PATCH 2/7] change tab space

change tab space
---
 .../src/main/java/me/chanjar/weixin/common/bean/WxMenu.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
index 5a1f4686a..a19257066 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
@@ -197,5 +197,5 @@ public class WxMenu implements Serializable {
 			  "}";
 		}
 	}
-	
+
 }

From 924d3c254ff325866d357c1418f365421df01753 Mon Sep 17 00:00:00 2001
From: tianmu 
Date: Mon, 21 Dec 2015 16:14:48 +0800
Subject: [PATCH 3/7] Update WxMenu.java

---
 .../src/main/java/me/chanjar/weixin/common/bean/WxMenu.java      | 1 -
 1 file changed, 1 deletion(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
index a19257066..b847820f2 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
@@ -197,5 +197,4 @@ public class WxMenu implements Serializable {
 			  "}";
 		}
 	}
-
 }

From f8207ef65f49fc005a28598c98af7384d31fc1b2 Mon Sep 17 00:00:00 2001
From: tianmu 
Date: Mon, 21 Dec 2015 19:33:32 +0800
Subject: [PATCH 4/7] change tab space

change tab space 2 times
---
 .../me/chanjar/weixin/common/bean/WxMenu.java | 113 +++++++++---------
 1 file changed, 57 insertions(+), 56 deletions(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
index b847820f2..ab475b7f5 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
@@ -129,72 +129,73 @@ public class WxMenu implements Serializable {
     }
   }
   
-	public static class WxMenuRule {
-		private String groupId;
-		private String sex;
-		private String country;
-		private String province;
-		private String city;
-		private String clientPlatformType;
-		
-		public String getGroupId() {
-			return groupId;
-		}
+  public static class WxMenuRule {
+    private String groupId;
+    private String sex;
+    private String country;
+    private String province;
+    private String city;
+    private String clientPlatformType;
+    
+    public String getGroupId() {
+      return groupId;
+    }
 	
-		public void setGroupId(String groupId) {
-			this.groupId = groupId;
-		}
+    public void setGroupId(String groupId) {
+      this.groupId = groupId;
+    }
 	
-		public String getSex() {
-			return sex;
-		}
+    public String getSex() {
+      return sex;
+    }
 	
-		public void setSex(String sex) {
-			this.sex = sex;
-		}
+    public void setSex(String sex) {
+      this.sex = sex;
+    }
 	
-		public String getCountry() {
-			return country;
-		}
+    public String getCountry() {
+      return country;
+    }
 	
-		public void setCountry(String country) {
-			this.country = country;
-		}
+    public void setCountry(String country) {
+      this.country = country;
+    }
 	
-		public String getProvince() {
-			return province;
-		}
+    public String getProvince() {
+      return province;
+    }
 	
-		public void setProvince(String province) {
-			this.province = province;
-		}
+    public void setProvince(String province) {
+      this.province = province;
+    }
 	
-		public String getCity() {
-			return city;
-		}
+    public String getCity() {
+      return city;
+    }
 	
-		public void setCity(String city) {
-			this.city = city;
-		}
+    public void setCity(String city) {
+      this.city = city;
+    }
 	
-		public String getClientPlatformType() {
-			return clientPlatformType;
-		}
+    public String getClientPlatformType() {
+      return clientPlatformType;
+    }
 	
-		public void setClientPlatformType(String clientPlatformType) {
-			this.clientPlatformType = clientPlatformType;
-		}
+    public void setClientPlatformType(String clientPlatformType) {
+      this.clientPlatformType = clientPlatformType;
+    }
+	
+    @Override
+    public String toString() {
+      return "matchrule:{" +
+          "group_id='" + groupId + '\'' +
+          ", sex='" + sex + '\'' +
+          ", country" + country + '\'' +
+          ", province" + province + '\'' +
+          ", city" + city + '\'' +
+          ", client_platform_type" + clientPlatformType + '\'' +
+          "}";
+    }
+  }
 	
-		@Override
-		public String toString() {
-			return "matchrule:{" +
-			  "group_id='" + groupId + '\'' +
-			  ", sex='" + sex + '\'' +
-			  ", country" + country + '\'' +
-			  ", province" + province + '\'' +
-			  ", city" + city + '\'' +
-			  ", client_platform_type" + clientPlatformType + '\'' +
-			  "}";
-		}
-	}
 }

From b2e1cca6c23bd99f9ba32f7b9cf5d122c2c3fce3 Mon Sep 17 00:00:00 2001
From: tianmu 
Date: Mon, 21 Dec 2015 19:41:42 +0800
Subject: [PATCH 5/7] change tab space

change tab space 1 time
---
 .../weixin/mp/api/WxMpServiceImpl.java        | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
index a77b3c081..0b3429f8b 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
@@ -230,13 +230,13 @@ public class WxMpServiceImpl implements WxMpService {
   }
 
   public void menuCreate(WxMenu menu) throws WxErrorException {
-		if (menu.getMatchrule() != null) {
-			String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional";
-			execute(new SimplePostRequestExecutor(), url, menu.toJson());
-		} else {
-			String url = "https://api.weixin.qq.com/cgi-bin/menu/create";
-			execute(new SimplePostRequestExecutor(), url, menu.toJson());
-		}
+    if (menu.getMatchrule() != null) {
+      String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional";
+      execute(new SimplePostRequestExecutor(), url, menu.toJson());
+    } else {
+      String url = "https://api.weixin.qq.com/cgi-bin/menu/create";
+      execute(new SimplePostRequestExecutor(), url, menu.toJson());
+    }
   }
 
   public void menuDelete() throws WxErrorException {
@@ -245,7 +245,7 @@ public class WxMpServiceImpl implements WxMpService {
   }
   
   public void menuDelete(String menuid) throws WxErrorException {
-  	String url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional";
+    String url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional";
     execute(new SimpleGetRequestExecutor(), url, "menuid=" + menuid);
   }
 
@@ -264,11 +264,11 @@ public class WxMpServiceImpl implements WxMpService {
   }
   
   public WxMenu menuTryMatch(String userid) throws WxErrorException {
-  	String url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch";
-  	try {
-  		String resultContent = execute(new SimpleGetRequestExecutor(), url, "user_id=" + userid);
-  		return WxMenu.fromJson(resultContent);
-  	} catch (WxErrorException e) {
+    String url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch";
+    try {
+      String resultContent = execute(new SimpleGetRequestExecutor(), url, "user_id=" + userid);
+      return WxMenu.fromJson(resultContent);
+    } catch (WxErrorException e) {
       // 46003 不存在的菜单数据     46002 不存在的菜单版本
       if (e.getError().getErrorCode() == 46003 || e.getError().getErrorCode() == 46002) {
         return null;

From 8d87609c0b8ed38038cefb80a643e60919aa91f3 Mon Sep 17 00:00:00 2001
From: tianmu 
Date: Mon, 21 Dec 2015 21:04:01 +0800
Subject: [PATCH 6/7] Update WxMenu.java

---
 .../src/main/java/me/chanjar/weixin/common/bean/WxMenu.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
index ab475b7f5..25bb2138f 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
@@ -30,11 +30,11 @@ public class WxMenu implements Serializable {
   }
   
   public WxMenuRule getMatchrule() {
-  	return matchrule;
+    return matchrule;
   }
   
   public void setMatchrule(WxMenuRule matchrule) {
-  	this.matchrule = matchrule;
+    this.matchrule = matchrule;
   }
   
   public String toJson() {

From 6b522da55988d8d3283e3e834e4d6328de686ef9 Mon Sep 17 00:00:00 2001
From: Tianmu <277297372@qq.com>
Date: Tue, 22 Dec 2015 10:45:15 +0800
Subject: [PATCH 7/7] change name: matchrule to matchRule

---
 .../java/me/chanjar/weixin/common/bean/WxMenu.java     | 10 +++++-----
 .../weixin/common/util/json/WxMenuGsonAdapter.java     |  6 +++---
 .../java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java |  2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
index 25bb2138f..e20be680f 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/WxMenu.java
@@ -19,7 +19,7 @@ public class WxMenu implements Serializable {
 
   private List buttons = new ArrayList();
 
-  private WxMenuRule matchrule;
+  private WxMenuRule matchRule;
   
   public List getButtons() {
     return buttons;
@@ -29,12 +29,12 @@ public class WxMenu implements Serializable {
     this.buttons = buttons;
   }
   
-  public WxMenuRule getMatchrule() {
-    return matchrule;
+  public WxMenuRule getMatchRule() {
+    return matchRule;
   }
   
-  public void setMatchrule(WxMenuRule matchrule) {
-    this.matchrule = matchrule;
+  public void setMatchRule(WxMenuRule matchRule) {
+    this.matchRule = matchRule;
   }
   
   public String toJson() {
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
index 4b1a720d3..cb3e8c69f 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMenuGsonAdapter.java
@@ -39,9 +39,9 @@ public class WxMenuGsonAdapter implements JsonSerializer, JsonDeserializ
     }
     json.add("button", buttonArray);
     
-    if (menu.getMatchrule() != null) {
-    	Gson gson = new Gson();
-    	json.add("matchrule", gson.toJsonTree(menu.getMatchrule()));
+    if (menu.getMatchRule() != null) {
+      Gson gson = new Gson();
+      json.add("matchrule", gson.toJsonTree(menu.getMatchRule()));
     }
     
     return json;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
index 0b3429f8b..3ad9bf4c6 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
@@ -230,7 +230,7 @@ public class WxMpServiceImpl implements WxMpService {
   }
 
   public void menuCreate(WxMenu menu) throws WxErrorException {
-    if (menu.getMatchrule() != null) {
+    if (menu.getMatchRule() != null) {
       String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional";
       execute(new SimplePostRequestExecutor(), url, menu.toJson());
     } else {