mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 02:28:25 +08:00 
			
		
		
		
	#520 企业微信网页授权增加使用user_ticket获取成员详情的接口
This commit is contained in:
		| @ -1,6 +1,7 @@ | |||||||
| package me.chanjar.weixin.cp.api; | package me.chanjar.weixin.cp.api; | ||||||
|  |  | ||||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||||
|  | import me.chanjar.weixin.cp.bean.WxCpUserDetail; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * <pre> |  * <pre> | ||||||
| @ -64,4 +65,19 @@ public interface WxCpOAuth2Service { | |||||||
|    */ |    */ | ||||||
|   String[] getUserInfo(Integer agentId, String code) throws WxErrorException; |   String[] getUserInfo(Integer agentId, String code) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 使用user_ticket获取成员详情. | ||||||
|  |    * | ||||||
|  |    * 文档地址:https://work.weixin.qq.com/api/doc#10028/%E4%BD%BF%E7%94%A8user_ticket%E8%8E%B7%E5%8F%96%E6%88%90%E5%91%98%E8%AF%A6%E6%83%85 | ||||||
|  |    * 请求方式:POST(HTTPS) | ||||||
|  |    * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token=ACCESS_TOKEN | ||||||
|  |    * | ||||||
|  |    * 权限说明: | ||||||
|  |    * 需要有对应应用的使用权限,且成员必须在授权应用的可见范围内。 | ||||||
|  |    * </pre> | ||||||
|  |    * | ||||||
|  |    * @param userTicket  成员票据 | ||||||
|  |    */ | ||||||
|  |   WxCpUserDetail getUserDetail(String userTicket) throws WxErrorException; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| package me.chanjar.weixin.cp.api.impl; | package me.chanjar.weixin.cp.api.impl; | ||||||
|  |  | ||||||
|  | import com.google.gson.GsonBuilder; | ||||||
| import com.google.gson.JsonElement; | import com.google.gson.JsonElement; | ||||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||||
| import com.google.gson.JsonParser; | import com.google.gson.JsonParser; | ||||||
| @ -8,6 +9,7 @@ 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.api.WxCpOAuth2Service; | import me.chanjar.weixin.cp.api.WxCpOAuth2Service; | ||||||
| import me.chanjar.weixin.cp.api.WxCpService; | import me.chanjar.weixin.cp.api.WxCpService; | ||||||
|  | import me.chanjar.weixin.cp.bean.WxCpUserDetail; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * <pre> |  * <pre> | ||||||
| @ -52,9 +54,8 @@ public class WxCpOAuth2ServiceImpl implements WxCpOAuth2Service { | |||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public String[] getUserInfo(Integer agentId, String code) throws WxErrorException { |   public String[] getUserInfo(Integer agentId, String code) throws WxErrorException { | ||||||
|     String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?" |     String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?code=%s&agentid=%d", | ||||||
|       + "code=" + code |       code, agentId); | ||||||
|       + "&agentid=" + agentId; |  | ||||||
|     String responseText = this.mainService.get(url, null); |     String responseText = this.mainService.get(url, null); | ||||||
|     JsonElement je = new JsonParser().parse(responseText); |     JsonElement je = new JsonParser().parse(responseText); | ||||||
|     JsonObject jo = je.getAsJsonObject(); |     JsonObject jo = je.getAsJsonObject(); | ||||||
| @ -63,4 +64,12 @@ public class WxCpOAuth2ServiceImpl implements WxCpOAuth2Service { | |||||||
|       GsonHelper.getString(jo, "OpenId")}; |       GsonHelper.getString(jo, "OpenId")}; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxCpUserDetail getUserDetail(String userTicket) throws WxErrorException { | ||||||
|  |     String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail"; | ||||||
|  |     JsonObject param = new JsonObject(); | ||||||
|  |     param.addProperty("user_ticket", userTicket); | ||||||
|  |     String responseText = this.mainService.post(url, param.toString()); | ||||||
|  |     return new GsonBuilder().create().fromJson(responseText, WxCpUserDetail.class); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,47 @@ | |||||||
|  | package me.chanjar.weixin.cp.bean; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  *  性别枚举 | ||||||
|  |  *  Created by BinaryWang on 2018/4/22. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | public enum Gender { | ||||||
|  |   /** | ||||||
|  |    * 男 | ||||||
|  |    */ | ||||||
|  |   MALE("男", "1"), | ||||||
|  |   /** | ||||||
|  |    * 女 | ||||||
|  |    */ | ||||||
|  |   FEMALE("女", "2"); | ||||||
|  |  | ||||||
|  |   private String genderName; | ||||||
|  |   private String code; | ||||||
|  |  | ||||||
|  |   Gender(String genderName, String code) { | ||||||
|  |     this.genderName = genderName; | ||||||
|  |     this.code = code; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getGenderName() { | ||||||
|  |     return this.genderName; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getCode() { | ||||||
|  |     return this.code; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public static Gender fromCode(String code) { | ||||||
|  |     if ("1".equals(code)) { | ||||||
|  |       return Gender.MALE; | ||||||
|  |     } | ||||||
|  |     if ("2".equals(code)) { | ||||||
|  |       return Gender.FEMALE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -15,44 +15,6 @@ import java.util.List; | |||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| public class WxCpUser implements Serializable { | public class WxCpUser implements Serializable { | ||||||
|   public enum Gender { |  | ||||||
|     /** |  | ||||||
|      * 男 |  | ||||||
|      */ |  | ||||||
|     MALE("男", "1"), |  | ||||||
|     /** |  | ||||||
|      * 女 |  | ||||||
|      */ |  | ||||||
|     FEMALE("女", "2"); |  | ||||||
|  |  | ||||||
|     private String genderName; |  | ||||||
|     private String code; |  | ||||||
|  |  | ||||||
|     Gender(String genderName, String code) { |  | ||||||
|       this.genderName = genderName; |  | ||||||
|       this.code = code; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public String getGenderName() { |  | ||||||
|       return this.genderName; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public String getCode() { |  | ||||||
|       return this.code; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static Gender fromCode(String code) { |  | ||||||
|       if ("1".equals(code)) { |  | ||||||
|         return Gender.MALE; |  | ||||||
|       } |  | ||||||
|       if ("2".equals(code)) { |  | ||||||
|         return Gender.FEMALE; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   private static final long serialVersionUID = -5696099236344075582L; |   private static final long serialVersionUID = -5696099236344075582L; | ||||||
|   private String userId; |   private String userId; | ||||||
|   private String name; |   private String name; | ||||||
|  | |||||||
| @ -0,0 +1,24 @@ | |||||||
|  | package me.chanjar.weixin.cp.bean; | ||||||
|  |  | ||||||
|  | import com.google.gson.annotations.SerializedName; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  *  使用user_ticket获取成员详情接口返回类. | ||||||
|  |  *  Created by BinaryWang on 2018/4/22. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class WxCpUserDetail { | ||||||
|  |   @SerializedName("userid") | ||||||
|  |   private String userId; | ||||||
|  |   private String name; | ||||||
|  |   private String mobile; | ||||||
|  |   private String gender; | ||||||
|  |   private String email; | ||||||
|  |   @SerializedName("qr_code") | ||||||
|  |   private String qrCode; | ||||||
|  | } | ||||||
| @ -10,6 +10,7 @@ package me.chanjar.weixin.cp.util.json; | |||||||
|  |  | ||||||
| import com.google.gson.*; | import com.google.gson.*; | ||||||
| import me.chanjar.weixin.common.util.json.GsonHelper; | import me.chanjar.weixin.common.util.json.GsonHelper; | ||||||
|  | import me.chanjar.weixin.cp.bean.Gender; | ||||||
| import me.chanjar.weixin.cp.bean.WxCpUser; | import me.chanjar.weixin.cp.bean.WxCpUser; | ||||||
|  |  | ||||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||||
| @ -39,7 +40,7 @@ public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSeri | |||||||
|     user.setName(GsonHelper.getString(o, "name")); |     user.setName(GsonHelper.getString(o, "name")); | ||||||
|     user.setPosition(GsonHelper.getString(o, "position")); |     user.setPosition(GsonHelper.getString(o, "position")); | ||||||
|     user.setMobile(GsonHelper.getString(o, "mobile")); |     user.setMobile(GsonHelper.getString(o, "mobile")); | ||||||
|     user.setGender(WxCpUser.Gender.fromCode(GsonHelper.getString(o, "gender"))); |     user.setGender(Gender.fromCode(GsonHelper.getString(o, "gender"))); | ||||||
|     user.setEmail(GsonHelper.getString(o, "email")); |     user.setEmail(GsonHelper.getString(o, "email")); | ||||||
|     user.setAvatar(GsonHelper.getString(o, "avatar")); |     user.setAvatar(GsonHelper.getString(o, "avatar")); | ||||||
|     user.setStatus(GsonHelper.getInteger(o, "status")); |     user.setStatus(GsonHelper.getInteger(o, "status")); | ||||||
|  | |||||||
| @ -56,7 +56,7 @@ public class WxCpDepartmentServiceImplTest { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Test(dependsOnMethods = {"testListAll", "testCreate"}) |   @Test(dependsOnMethods = {"testList", "testCreate"}) | ||||||
|   public void testUpdate() throws Exception { |   public void testUpdate() throws Exception { | ||||||
|     System.out.println("=================更新部门"); |     System.out.println("=================更新部门"); | ||||||
|     this.depart.setName("子部门改名" + System.currentTimeMillis()); |     this.depart.setName("子部门改名" + System.currentTimeMillis()); | ||||||
|  | |||||||
| @ -0,0 +1,33 @@ | |||||||
|  | package me.chanjar.weixin.cp.api.impl; | ||||||
|  |  | ||||||
|  | import com.google.inject.Inject; | ||||||
|  | import me.chanjar.weixin.common.exception.WxErrorException; | ||||||
|  | import me.chanjar.weixin.cp.api.ApiTestModule; | ||||||
|  | import me.chanjar.weixin.cp.api.WxCpService; | ||||||
|  | import me.chanjar.weixin.cp.bean.WxCpUserDetail; | ||||||
|  | import org.testng.annotations.Guice; | ||||||
|  | import org.testng.annotations.Test; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  *  Created by BinaryWang on 2018/4/22. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | @Guice(modules = ApiTestModule.class) | ||||||
|  | public class WxCpOAuth2ServiceImplTest { | ||||||
|  |   @Inject | ||||||
|  |   private WxCpService wxService; | ||||||
|  |  | ||||||
|  |   @Test | ||||||
|  |   public void testGetUserDetail() throws WxErrorException { | ||||||
|  |     WxCpUserDetail userDetail = this.wxService.getOauth2Service().getUserDetail("b"); | ||||||
|  |     System.out.println(userDetail); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Test | ||||||
|  |   public void testGetUserInfo() throws WxErrorException { | ||||||
|  |     this.wxService.getOauth2Service().getUserInfo("abc"); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -3,6 +3,7 @@ package me.chanjar.weixin.cp.api.impl; | |||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import me.chanjar.weixin.cp.api.ApiTestModule; | import me.chanjar.weixin.cp.api.ApiTestModule; | ||||||
| import me.chanjar.weixin.cp.api.WxCpService; | import me.chanjar.weixin.cp.api.WxCpService; | ||||||
|  | import me.chanjar.weixin.cp.bean.Gender; | ||||||
| import me.chanjar.weixin.cp.bean.WxCpUser; | import me.chanjar.weixin.cp.bean.WxCpUser; | ||||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | import org.apache.commons.lang3.builder.ToStringBuilder; | ||||||
| import org.apache.commons.lang3.builder.ToStringStyle; | import org.apache.commons.lang3.builder.ToStringStyle; | ||||||
| @ -40,7 +41,7 @@ public class WxCpUserServiceImplTest { | |||||||
|     user.setName("Some Woman"); |     user.setName("Some Woman"); | ||||||
|     user.setDepartIds(new Integer[]{2}); |     user.setDepartIds(new Integer[]{2}); | ||||||
|     user.setEmail("none@none.com"); |     user.setEmail("none@none.com"); | ||||||
|     user.setGender(WxCpUser.Gender.FEMALE); |     user.setGender(Gender.FEMALE); | ||||||
|     user.setMobile("13560084979"); |     user.setMobile("13560084979"); | ||||||
|     user.setPosition("woman"); |     user.setPosition("woman"); | ||||||
|     user.setTelephone("3300393"); |     user.setTelephone("3300393"); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang