mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-04 04:37:46 +08:00
🆕 #2742【企业微信】 家校沟通-增加批量更新家长接口支持
This commit is contained in:
parent
c68f2d2f36
commit
d166c27fad
@ -9,6 +9,8 @@ import me.chanjar.weixin.cp.bean.WxCpUserDetail;
|
|||||||
* OAuth2相关管理接口.
|
* OAuth2相关管理接口.
|
||||||
* Created by BinaryWang on 2017/6/24.
|
* Created by BinaryWang on 2017/6/24.
|
||||||
* </pre>
|
* </pre>
|
||||||
|
* <p>
|
||||||
|
* 文档1:https://developer.work.weixin.qq.com/document/path/91856
|
||||||
*
|
*
|
||||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
*/
|
*/
|
||||||
@ -84,6 +86,19 @@ public interface WxCpOAuth2Service {
|
|||||||
*/
|
*/
|
||||||
WxCpOauth2UserInfo getUserInfo(Integer agentId, String code) throws WxErrorException;
|
WxCpOauth2UserInfo getUserInfo(Integer agentId, String code) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取家校访问用户身份
|
||||||
|
* 该接口用于根据code获取家长或者学生信息
|
||||||
|
* <p>
|
||||||
|
* 请求方式:GET(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/school/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
|
||||||
|
*
|
||||||
|
* @param code
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpOauth2UserInfo getSchoolUserInfo(String code) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
* 使用user_ticket获取成员详情.
|
* 使用user_ticket获取成员详情.
|
||||||
|
@ -3,6 +3,7 @@ package me.chanjar.weixin.cp.api;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
||||||
|
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
|
||||||
import me.chanjar.weixin.cp.bean.school.user.*;
|
import me.chanjar.weixin.cp.bean.school.user.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -16,6 +17,32 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface WxCpSchoolUserService {
|
public interface WxCpSchoolUserService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取访问用户身份
|
||||||
|
* 该接口用于根据code获取成员信息
|
||||||
|
* <p>
|
||||||
|
* 请求方式:GET(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
|
||||||
|
*
|
||||||
|
* @param code
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpOauth2UserInfo getUserInfo(@NonNull String code) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取家校访问用户身份
|
||||||
|
* 该接口用于根据code获取家长或者学生信息
|
||||||
|
* <p>
|
||||||
|
* 请求方式:GET(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/school/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
|
||||||
|
*
|
||||||
|
* @param code
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpOauth2UserInfo getSchoolUserInfo(@NonNull String code) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建学生
|
* 创建学生
|
||||||
* 请求方式:POST(HTTPS)
|
* 请求方式:POST(HTTPS)
|
||||||
@ -98,6 +125,39 @@ public interface WxCpSchoolUserService {
|
|||||||
*/
|
*/
|
||||||
WxCpBaseResp createParent(@NonNull WxCpCreateParentRequest request) throws WxErrorException;
|
WxCpBaseResp createParent(@NonNull WxCpCreateParentRequest request) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量创建家长
|
||||||
|
* 请求方式:POST(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/school/user/batch_create_parent?access_token=ACCESS_TOKEN
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpBatchResultList batchCreateParent(@NonNull WxCpBatchCreateParentRequest request) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除家长
|
||||||
|
* 请求方式:POST(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/school/user/batch_delete_parent?access_token=ACCESS_TOKEN
|
||||||
|
*
|
||||||
|
* @param userIdList
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpBatchResultList batchDeleteParent(@NonNull String... userIdList) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新家长
|
||||||
|
* 请求方式:POST(HTTPS)
|
||||||
|
* 请求地址:https://qyapi.weixin.qq.com/cgi-bin/school/user/batch_update_parent?access_token=ACCESS_TOKEN
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
* @throws WxErrorException
|
||||||
|
*/
|
||||||
|
WxCpBatchResultList batchUpdateParent(@NonNull WxCpBatchUpdateParentRequest request) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新家长
|
* 更新家长
|
||||||
* 请求方式:POST(HTTPS)
|
* 请求方式:POST(HTTPS)
|
||||||
|
@ -77,6 +77,20 @@ public class WxCpOAuth2ServiceImpl implements WxCpOAuth2Service {
|
|||||||
.userTicket(GsonHelper.getString(jo, "user_ticket"))
|
.userTicket(GsonHelper.getString(jo, "user_ticket"))
|
||||||
.expiresIn(GsonHelper.getString(jo, "expires_in"))
|
.expiresIn(GsonHelper.getString(jo, "expires_in"))
|
||||||
.externalUserId(GsonHelper.getString(jo, "external_userid"))
|
.externalUserId(GsonHelper.getString(jo, "external_userid"))
|
||||||
|
.parentUserId(GsonHelper.getString(jo, "parent_userid"))
|
||||||
|
.studentUserId(GsonHelper.getString(jo, "student_userid"))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpOauth2UserInfo getSchoolUserInfo(String code) throws WxErrorException {
|
||||||
|
String responseText = this.mainService.get(String.format(this.mainService.getWxCpConfigStorage().getApiUrl(GET_SCHOOL_USER_INFO), code), null);
|
||||||
|
JsonObject jo = GsonParser.parse(responseText);
|
||||||
|
|
||||||
|
return WxCpOauth2UserInfo.builder()
|
||||||
|
.deviceId(GsonHelper.getString(jo, "DeviceId"))
|
||||||
|
.parentUserId(GsonHelper.getString(jo, "parent_userid"))
|
||||||
|
.studentUserId(GsonHelper.getString(jo, "student_userid"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import me.chanjar.weixin.common.util.json.GsonParser;
|
|||||||
import me.chanjar.weixin.cp.api.WxCpSchoolUserService;
|
import me.chanjar.weixin.cp.api.WxCpSchoolUserService;
|
||||||
import me.chanjar.weixin.cp.api.WxCpService;
|
import me.chanjar.weixin.cp.api.WxCpService;
|
||||||
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
||||||
|
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
|
||||||
import me.chanjar.weixin.cp.bean.school.user.*;
|
import me.chanjar.weixin.cp.bean.school.user.*;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -32,6 +33,16 @@ public class WxCpSchoolUserServiceImpl implements WxCpSchoolUserService {
|
|||||||
|
|
||||||
private final WxCpService cpService;
|
private final WxCpService cpService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpOauth2UserInfo getUserInfo(@NonNull String code) throws WxErrorException {
|
||||||
|
return cpService.getOauth2Service().getUserInfo(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpOauth2UserInfo getSchoolUserInfo(@NonNull String code) throws WxErrorException {
|
||||||
|
return cpService.getOauth2Service().getSchoolUserInfo(code);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WxCpBaseResp createStudent(@NonNull String studentUserId, @NonNull String name, @NonNull List<Integer> departments) throws WxErrorException {
|
public WxCpBaseResp createStudent(@NonNull String studentUserId, @NonNull String name, @NonNull List<Integer> departments) throws WxErrorException {
|
||||||
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CREATE_STUDENT);
|
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CREATE_STUDENT);
|
||||||
@ -104,6 +115,33 @@ public class WxCpSchoolUserServiceImpl implements WxCpSchoolUserService {
|
|||||||
return WxCpBaseResp.fromJson(responseContent);
|
return WxCpBaseResp.fromJson(responseContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpBatchResultList batchCreateParent(@NonNull WxCpBatchCreateParentRequest request) throws WxErrorException {
|
||||||
|
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(BATCH_CREATE_PARENT);
|
||||||
|
String responseContent = this.cpService.post(apiUrl, request.toJson());
|
||||||
|
return WxCpBatchResultList.fromJson(responseContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpBatchResultList batchDeleteParent(@NonNull String... userIdList) throws WxErrorException {
|
||||||
|
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(BATCH_DELETE_PARENT);
|
||||||
|
JsonObject jsonObject = new JsonObject();
|
||||||
|
JsonArray jsonArray = new JsonArray();
|
||||||
|
for (String userId : userIdList) {
|
||||||
|
jsonArray.add(new JsonPrimitive(userId));
|
||||||
|
}
|
||||||
|
jsonObject.add("useridlist", jsonArray);
|
||||||
|
String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
|
||||||
|
return WxCpBatchResultList.fromJson(responseContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxCpBatchResultList batchUpdateParent(@NonNull WxCpBatchUpdateParentRequest request) throws WxErrorException {
|
||||||
|
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(BATCH_UPDATE_PARENT);
|
||||||
|
String responseContent = this.cpService.post(apiUrl, request.toJson());
|
||||||
|
return WxCpBatchResultList.fromJson(responseContent);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WxCpBaseResp updateParent(@NonNull WxCpUpdateParentRequest request) throws WxErrorException {
|
public WxCpBaseResp updateParent(@NonNull WxCpUpdateParentRequest request) throws WxErrorException {
|
||||||
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(UPDATE_PARENT);
|
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(UPDATE_PARENT);
|
||||||
|
@ -14,6 +14,8 @@ import java.io.Serializable;
|
|||||||
* Created by BinaryWang on 2019/5/26.
|
* Created by BinaryWang on 2019/5/26.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
* 文档1:https://developer.work.weixin.qq.com/document/path/91707
|
||||||
|
*
|
||||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@ -30,4 +32,7 @@ public class WxCpOauth2UserInfo implements Serializable {
|
|||||||
private String userTicket;
|
private String userTicket;
|
||||||
private String expiresIn;
|
private String expiresIn;
|
||||||
private String externalUserId;
|
private String externalUserId;
|
||||||
|
private String parentUserId;
|
||||||
|
private String studentUserId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
package me.chanjar.weixin.cp.bean.school.user;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量创建家长.
|
||||||
|
*
|
||||||
|
* @author Wang_Wong
|
||||||
|
* @date 2022-07-11
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class WxCpBatchCreateParentRequest implements Serializable {
|
||||||
|
private static final long serialVersionUID = -4960239393895754138L;
|
||||||
|
|
||||||
|
@SerializedName("parents")
|
||||||
|
private List<Parent> parents;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class Parent implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("parent_userid")
|
||||||
|
private String parentUserId;
|
||||||
|
|
||||||
|
@SerializedName("mobile")
|
||||||
|
private String mobile;
|
||||||
|
|
||||||
|
@SerializedName("to_invite")
|
||||||
|
private Boolean toInvite;
|
||||||
|
|
||||||
|
@SerializedName("children")
|
||||||
|
private List<Children> children;
|
||||||
|
|
||||||
|
public static Parent fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, Parent.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class Children implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("student_userid")
|
||||||
|
private String studentUserId;
|
||||||
|
|
||||||
|
@SerializedName("relation")
|
||||||
|
private String relation;
|
||||||
|
|
||||||
|
public static Children fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, Children.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WxCpBatchCreateParentRequest fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, WxCpBatchCreateParentRequest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package me.chanjar.weixin.cp.bean.school.user;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新家长.
|
||||||
|
*
|
||||||
|
* @author Wang_Wong
|
||||||
|
* @date 2022-07-11
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class WxCpBatchUpdateParentRequest implements Serializable {
|
||||||
|
private static final long serialVersionUID = -4960239393895754138L;
|
||||||
|
|
||||||
|
@SerializedName("parents")
|
||||||
|
private List<Parent> parents;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class Parent implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("parent_userid")
|
||||||
|
private String parentUserId;
|
||||||
|
|
||||||
|
@SerializedName("new_parent_userid")
|
||||||
|
private String newParentUserId;
|
||||||
|
|
||||||
|
@SerializedName("mobile")
|
||||||
|
private String mobile;
|
||||||
|
|
||||||
|
@SerializedName("children")
|
||||||
|
private List<Children> children;
|
||||||
|
|
||||||
|
public static Parent fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, Parent.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class Children implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("student_userid")
|
||||||
|
private String studentUserId;
|
||||||
|
|
||||||
|
@SerializedName("relation")
|
||||||
|
private String relation;
|
||||||
|
|
||||||
|
public static Children fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, Children.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WxCpBatchUpdateParentRequest fromJson(String json) {
|
||||||
|
return WxCpGsonBuilder.create().fromJson(json, WxCpBatchUpdateParentRequest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJson() {
|
||||||
|
return WxCpGsonBuilder.create().toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -36,6 +36,9 @@ public class WxCpCreateParentRequest implements Serializable {
|
|||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
@Getter
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public static class Children implements Serializable {
|
public static class Children implements Serializable {
|
||||||
|
|
||||||
@SerializedName("student_userid")
|
@SerializedName("student_userid")
|
||||||
|
@ -67,6 +67,7 @@ public interface WxCpApiPathConsts {
|
|||||||
|
|
||||||
interface OAuth2 {
|
interface OAuth2 {
|
||||||
String GET_USER_INFO = "/cgi-bin/user/getuserinfo?code=%s&agentid=%d";
|
String GET_USER_INFO = "/cgi-bin/user/getuserinfo?code=%s&agentid=%d";
|
||||||
|
String GET_SCHOOL_USER_INFO = "/cgi-bin/school/getuserinfo?code=%s";
|
||||||
String GET_USER_DETAIL = "/cgi-bin/user/getuserdetail";
|
String GET_USER_DETAIL = "/cgi-bin/user/getuserdetail";
|
||||||
String URL_OAUTH2_AUTHORIZE = "https://open.weixin.qq.com/connect/oauth2/authorize";
|
String URL_OAUTH2_AUTHORIZE = "https://open.weixin.qq.com/connect/oauth2/authorize";
|
||||||
}
|
}
|
||||||
@ -195,6 +196,9 @@ public interface WxCpApiPathConsts {
|
|||||||
String BATCH_CREATE_STUDENT = "/cgi-bin/school/user/batch_create_student";
|
String BATCH_CREATE_STUDENT = "/cgi-bin/school/user/batch_create_student";
|
||||||
String BATCH_DELETE_STUDENT = "/cgi-bin/school/user/batch_delete_student";
|
String BATCH_DELETE_STUDENT = "/cgi-bin/school/user/batch_delete_student";
|
||||||
String BATCH_UPDATE_STUDENT = "/cgi-bin/school/user/batch_update_student";
|
String BATCH_UPDATE_STUDENT = "/cgi-bin/school/user/batch_update_student";
|
||||||
|
String BATCH_CREATE_PARENT = "/cgi-bin/school/user/batch_create_parent";
|
||||||
|
String BATCH_DELETE_PARENT = "/cgi-bin/school/user/batch_delete_parent";
|
||||||
|
String BATCH_UPDATE_PARENT = "/cgi-bin/school/user/batch_update_parent";
|
||||||
|
|
||||||
String CREATE_STUDENT = "/cgi-bin/school/user/create_student";
|
String CREATE_STUDENT = "/cgi-bin/school/user/create_student";
|
||||||
String DELETE_STUDENT = "/cgi-bin/school/user/delete_student?userid=";
|
String DELETE_STUDENT = "/cgi-bin/school/user/delete_student?userid=";
|
||||||
|
@ -5,8 +5,10 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import lombok.var;
|
import lombok.var;
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.common.util.XmlUtils;
|
import me.chanjar.weixin.common.util.XmlUtils;
|
||||||
|
import me.chanjar.weixin.common.util.json.GsonParser;
|
||||||
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
|
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
|
||||||
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
|
||||||
|
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
|
||||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
|
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
|
||||||
import me.chanjar.weixin.cp.bean.school.user.*;
|
import me.chanjar.weixin.cp.bean.school.user.*;
|
||||||
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
|
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
|
||||||
@ -19,6 +21,8 @@ import java.io.InputStream;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业微信家校沟通相关接口.
|
* 企业微信家校沟通相关接口.
|
||||||
* https://developer.work.weixin.qq.com/document/path/91638
|
* https://developer.work.weixin.qq.com/document/path/91638
|
||||||
@ -52,6 +56,165 @@ public class WxCpSchoolUserTest {
|
|||||||
final String exUserId = "wmOQpTDwAAJFHrryZ8I8ALLEZuLHIUKA";
|
final String exUserId = "wmOQpTDwAAJFHrryZ8I8ALLEZuLHIUKA";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新家长
|
||||||
|
*
|
||||||
|
* https://developer.work.weixin.qq.com/document/path/92336
|
||||||
|
*/
|
||||||
|
String batchUpdateParentRequestParam = "{\n" +
|
||||||
|
" \"parents\":[\n" +
|
||||||
|
" { \n" +
|
||||||
|
" \"parent_userid\": \"zhangsan_baba\",\n" +
|
||||||
|
"\t\t\t\"new_parent_userid\":\"zhangsan_baba_new\",\n" +
|
||||||
|
" \"mobile\": \"10000000000\",\n" +
|
||||||
|
" \"children\":[\n" +
|
||||||
|
" { \n" +
|
||||||
|
" \"student_userid\": \"zhangsan\",\n" +
|
||||||
|
" \"relation\": \"爸爸\"\n" +
|
||||||
|
" } \n" +
|
||||||
|
" ] \n" +
|
||||||
|
" }, \n" +
|
||||||
|
" { \n" +
|
||||||
|
" \"parent_userid\": \"lisi_mama\",\n" +
|
||||||
|
" \"mobile\": \"10000000001\",\n" +
|
||||||
|
" \"children\":[\n" +
|
||||||
|
" {\n" +
|
||||||
|
" \"student_userid\": \"lisi\",\n" +
|
||||||
|
" \"relation\": \"妈妈\"\n" +
|
||||||
|
" } \n" +
|
||||||
|
" ] \n" +
|
||||||
|
" } \n" +
|
||||||
|
" ] \n" +
|
||||||
|
"}";
|
||||||
|
WxCpBatchUpdateParentRequest batchUpdateParentRequest = WxCpBatchUpdateParentRequest.fromJson(batchUpdateParentRequestParam);
|
||||||
|
WxCpBatchResultList batchUpdateParentResult = cpService.getSchoolUserService().batchUpdateParent(batchUpdateParentRequest);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除家长
|
||||||
|
*
|
||||||
|
* https://developer.work.weixin.qq.com/document/path/92335
|
||||||
|
*/
|
||||||
|
WxCpBatchResultList batchDeleteParentResult = cpService.getSchoolUserService().batchDeleteParent(new String[]{"abc", userId});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量创建家长 封装请求参数
|
||||||
|
*
|
||||||
|
* https://developer.work.weixin.qq.com/document/path/92334
|
||||||
|
*/
|
||||||
|
var child1 = WxCpBatchCreateParentRequest.Children.builder()
|
||||||
|
.relation("爸爸")
|
||||||
|
.studentUserId("zhangsan")
|
||||||
|
.build();
|
||||||
|
var child2 = WxCpBatchCreateParentRequest.Children.builder()
|
||||||
|
.relation("伯父")
|
||||||
|
.studentUserId("lisi")
|
||||||
|
.build();
|
||||||
|
var child3 = WxCpBatchCreateParentRequest.Children.builder()
|
||||||
|
.relation("爸爸")
|
||||||
|
.studentUserId("lisi")
|
||||||
|
.build();
|
||||||
|
var child4 = WxCpBatchCreateParentRequest.Children.builder()
|
||||||
|
.relation("伯父")
|
||||||
|
.studentUserId("zhangsan")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<WxCpBatchCreateParentRequest.Children> childrenList1 = Lists.newArrayList();
|
||||||
|
childrenList1.add(child1);
|
||||||
|
childrenList1.add(child2);
|
||||||
|
|
||||||
|
List<WxCpBatchCreateParentRequest.Children> childrenList2 = Lists.newArrayList();
|
||||||
|
childrenList2.add(child3);
|
||||||
|
childrenList2.add(child4);
|
||||||
|
|
||||||
|
var zhangsanParent = WxCpBatchCreateParentRequest.Parent.builder()
|
||||||
|
.parentUserId("zhangsan_parent_userid")
|
||||||
|
.mobile("18000000000")
|
||||||
|
.toInvite(false)
|
||||||
|
.children(childrenList1)
|
||||||
|
.build();
|
||||||
|
var lisiParent = WxCpBatchCreateParentRequest.Parent.builder()
|
||||||
|
.parentUserId("lisi_parent_userid")
|
||||||
|
.mobile("18000000001")
|
||||||
|
.children(childrenList2)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<WxCpBatchCreateParentRequest.Parent> batchCreateParent = Lists.newArrayList();
|
||||||
|
batchCreateParent.add(zhangsanParent);
|
||||||
|
batchCreateParent.add(lisiParent);
|
||||||
|
WxCpBatchCreateParentRequest wxCpBatchCreateParentRequest = WxCpBatchCreateParentRequest.builder()
|
||||||
|
.parents(batchCreateParent)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 请求参数json
|
||||||
|
String batchCreateParentRequestParam = "{\n" +
|
||||||
|
"\t\"parents\":[\n" +
|
||||||
|
"\t\t{\n" +
|
||||||
|
"\t\t\t\"parent_userid\": \"zhangsan_parent_userid\",\n" +
|
||||||
|
" \t\t\"mobile\": \"18000000000\",\n" +
|
||||||
|
"\t\t\t\"to_invite\": false,\n" +
|
||||||
|
"\t\t\t\"children\":[\n" +
|
||||||
|
"\t\t\t\t{\n" +
|
||||||
|
"\t\t\t\t\t\"student_userid\": \"zhangsan\",\n" +
|
||||||
|
" \t\t \"relation\": \"爸爸\"\n" +
|
||||||
|
" \t\t },\n" +
|
||||||
|
" \t\t {\n" +
|
||||||
|
"\t\t\t\t\t\"student_userid\": \"lisi\",\n" +
|
||||||
|
" \t\t \"relation\": \"伯父\"\n" +
|
||||||
|
" \t\t }\n" +
|
||||||
|
" \t\t]\n" +
|
||||||
|
"\t\t},\n" +
|
||||||
|
"\t\t{\n" +
|
||||||
|
"\t\t\t\"parent_userid\": \"lisi_parent_userid\",\n" +
|
||||||
|
" \t\t\"mobile\": \"18000000001\",\n" +
|
||||||
|
"\t\t\t\"children\":[\n" +
|
||||||
|
"\t\t\t\t{\n" +
|
||||||
|
"\t\t\t\t\t\"student_userid\": \"lisi\",\n" +
|
||||||
|
" \t\t \"relation\": \"爸爸\"\n" +
|
||||||
|
" \t\t },\n" +
|
||||||
|
" \t\t {\n" +
|
||||||
|
"\t\t\t\t\t\"student_userid\": \"zhangsan\",\n" +
|
||||||
|
" \t\t \"relation\": \"伯父\"\n" +
|
||||||
|
" \t\t }\n" +
|
||||||
|
" \t\t]\n" +
|
||||||
|
"\t\t}\n" +
|
||||||
|
"\t]\n" +
|
||||||
|
"}";
|
||||||
|
assertThat(wxCpBatchCreateParentRequest.toJson()).isEqualTo(GsonParser.parse(batchCreateParentRequestParam).toString());
|
||||||
|
|
||||||
|
WxCpBatchResultList batchCreateParentResult = cpService.getSchoolUserService().batchCreateParent(wxCpBatchCreateParentRequest);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
String batchResultStr = "{\n" +
|
||||||
|
"\t\"errcode\": 1,\n" +
|
||||||
|
"\t\"errmsg\": \"invalid parent_userid: lisi_parent_userid\",\n" +
|
||||||
|
"\t\"result_list\": [\n" +
|
||||||
|
"\t\t{\n" +
|
||||||
|
"\t\t\t\"parent_userid\": \"lisi_parent_userid\",\n" +
|
||||||
|
"\t\t\t\"errcode\": 1,\n" +
|
||||||
|
"\t\t\t\"errmsg\": \"invalid parent_userid: lisi_parent_userid\",\n" +
|
||||||
|
"\t\t}\n" +
|
||||||
|
"\t]\n" +
|
||||||
|
"}";
|
||||||
|
assertThat(batchCreateParentResult.toJson()).isEqualTo(GsonParser.parse(batchResultStr).toString());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取家校访问用户身份
|
||||||
|
*
|
||||||
|
* https://developer.work.weixin.qq.com/document/path/95791
|
||||||
|
*/
|
||||||
|
WxCpOauth2UserInfo schoolUserInfo = cpService.getSchoolUserService().getSchoolUserInfo("abc");
|
||||||
|
assertThat(schoolUserInfo).isNotNull();
|
||||||
|
|
||||||
|
WxCpOauth2UserInfo oauth2UserInfo = cpService.getSchoolUserService().getUserInfo("abc");
|
||||||
|
assertThat(oauth2UserInfo).isNotNull();
|
||||||
|
|
||||||
|
WxCpOauth2UserInfo userInfo = cpService.getOauth2Service().getUserInfo("abc");
|
||||||
|
assertThat(userInfo).isNotNull();
|
||||||
|
|
||||||
|
|
||||||
// 返回值
|
// 返回值
|
||||||
String batchResult = "{\n" +
|
String batchResult = "{\n" +
|
||||||
"\t\"errcode\": 1,\n" +
|
"\t\"errcode\": 1,\n" +
|
||||||
|
@ -10,7 +10,8 @@ import java.io.Serializable;
|
|||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
* code换取session_key接口的响应
|
* code换取session_key接口的响应
|
||||||
* 文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
|
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
|
||||||
|
*
|
||||||
* 微信返回报文:{"session_key":"nzoqhc3OnwHzeTxJs+inbQ==","openid":"oVBkZ0aYgDMDIywRdgPW8-joxXc4"}
|
* 微信返回报文:{"session_key":"nzoqhc3OnwHzeTxJs+inbQ==","openid":"oVBkZ0aYgDMDIywRdgPW8-joxXc4"}
|
||||||
* </pre>
|
* </pre>
|
||||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
|
Loading…
Reference in New Issue
Block a user