@@ -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?" | |||||
+ "code=" + code | |||||
+ "&agentid=" + agentId; | |||||
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?code=%s&agentid=%d", | |||||
code, 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"); | ||||