From 75802dd71e1db6c73862c647a4f53abc94012263 Mon Sep 17 00:00:00 2001 From: 0katekate0 <1960779692@qq.com> Date: Fri, 8 Jul 2022 18:39:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E3=80=91=20=E5=AE=B6=E6=A0=A1=E6=B2=9F=E9=80=9A-?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E8=AE=BF=E9=97=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=BA=AB=E4=BB=BD=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/cp/api/WxCpOAuth2Service.java | 15 +++++++++++ .../weixin/cp/api/WxCpSchoolUserService.java | 27 +++++++++++++++++++ .../cp/api/impl/WxCpOAuth2ServiceImpl.java | 14 ++++++++++ .../api/impl/WxCpSchoolUserServiceImpl.java | 11 ++++++++ .../weixin/cp/bean/WxCpOauth2UserInfo.java | 5 ++++ .../weixin/cp/constant/WxCpApiPathConsts.java | 1 + .../weixin/cp/api/WxCpSchoolUserTest.java | 17 ++++++++++++ .../bean/WxMaJscode2SessionResult.java | 3 ++- 8 files changed, 92 insertions(+), 1 deletion(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOAuth2Service.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOAuth2Service.java index 7c42ea63fc..f524ac94bb 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOAuth2Service.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOAuth2Service.java @@ -9,6 +9,8 @@ * OAuth2相关管理接口. * Created by BinaryWang on 2017/6/24. * + *

+ * 文档1:https://developer.work.weixin.qq.com/document/path/91856 * * @author Binary Wang */ @@ -84,6 +86,19 @@ public interface WxCpOAuth2Service { */ WxCpOauth2UserInfo getUserInfo(Integer agentId, String code) throws WxErrorException; + /** + * 获取家校访问用户身份 + * 该接口用于根据code获取家长或者学生信息 + *

+ * 请求方式: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; + /** *

    * 使用user_ticket获取成员详情.
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java
index b12ba0a14a..6a1fe6707a 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java
@@ -3,6 +3,7 @@
 import lombok.NonNull;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
 import me.chanjar.weixin.cp.bean.school.user.*;
 
 import java.util.List;
@@ -16,6 +17,32 @@
  */
 public interface WxCpSchoolUserService {
 
+  /**
+   * 获取访问用户身份
+   * 该接口用于根据code获取成员信息
+   * 

+ * 请求方式: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获取家长或者学生信息 + *

+ * 请求方式: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) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java index 8f989f23d8..aac6e01a45 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java @@ -77,6 +77,20 @@ public WxCpOauth2UserInfo getUserInfo(Integer agentId, String code) throws WxErr .userTicket(GsonHelper.getString(jo, "user_ticket")) .expiresIn(GsonHelper.getString(jo, "expires_in")) .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(); } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java index cbf0498617..cbdcc9089b 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java @@ -11,6 +11,7 @@ import me.chanjar.weixin.cp.api.WxCpSchoolUserService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo; import me.chanjar.weixin.cp.bean.school.user.*; import org.apache.commons.lang3.StringUtils; @@ -32,6 +33,16 @@ public class WxCpSchoolUserServiceImpl implements WxCpSchoolUserService { 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 public WxCpBaseResp createStudent(@NonNull String studentUserId, @NonNull String name, @NonNull List departments) throws WxErrorException { String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(CREATE_STUDENT); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java index 0e10737bf6..a35a37c05c 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java @@ -14,6 +14,8 @@ * Created by BinaryWang on 2019/5/26. *

* + * 文档1:https://developer.work.weixin.qq.com/document/path/91707 + * * @author Binary Wang */ @Data @@ -30,4 +32,7 @@ public class WxCpOauth2UserInfo implements Serializable { private String userTicket; private String expiresIn; private String externalUserId; + private String parentUserId; + private String studentUserId; + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java index 042d13485b..be0f0bf91c 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java @@ -67,6 +67,7 @@ interface WorkBench { interface OAuth2 { 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 URL_OAUTH2_AUTHORIZE = "https://open.weixin.qq.com/connect/oauth2/authorize"; } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java index dca1c04c45..dc8eaea675 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java @@ -7,6 +7,7 @@ import me.chanjar.weixin.common.util.XmlUtils; import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; 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.school.user.*; import me.chanjar.weixin.cp.config.WxCpConfigStorage; @@ -19,6 +20,8 @@ import java.util.List; import java.util.Map; +import static org.assertj.core.api.Assertions.assertThat; + /** * 企业微信家校沟通相关接口. * https://developer.work.weixin.qq.com/document/path/91638 @@ -52,6 +55,20 @@ public void test() throws WxErrorException { final String exUserId = "wmOQpTDwAAJFHrryZ8I8ALLEZuLHIUKA"; + /** + * 获取家校访问用户身份 + * 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" + "\t\"errcode\": 1,\n" + diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java index af113e4ec5..1b0f6f28a1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java @@ -10,7 +10,8 @@ /** *
  * 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"}
  * 
* @author Binary Wang From d1a9eb653c351f2318b03555649c49841ee12055 Mon Sep 17 00:00:00 2001 From: 0katekate0 <1960779692@qq.com> Date: Mon, 11 Jul 2022 17:29:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E3=80=91=20=E5=AE=B6=E6=A0=A1=E6=B2=9F=E9=80=9A-?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E6=9B=B4=E6=96=B0=E5=AE=B6?= =?UTF-8?q?=E9=95=BF=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/cp/api/WxCpSchoolUserService.java | 33 ++++ .../api/impl/WxCpSchoolUserServiceImpl.java | 27 ++++ .../user/WxCpBatchCreateParentRequest.java | 88 +++++++++++ .../user/WxCpBatchUpdateParentRequest.java | 88 +++++++++++ .../school/user/WxCpCreateParentRequest.java | 3 + .../weixin/cp/constant/WxCpApiPathConsts.java | 3 + .../weixin/cp/api/WxCpSchoolUserTest.java | 146 ++++++++++++++++++ 7 files changed, 388 insertions(+) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchCreateParentRequest.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchUpdateParentRequest.java diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java index 6a1fe6707a..3c64d72bb7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolUserService.java @@ -125,6 +125,39 @@ public interface WxCpSchoolUserService { */ 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) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java index cbdcc9089b..dc46ee7301 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolUserServiceImpl.java @@ -115,6 +115,33 @@ public WxCpBaseResp createParent(@NonNull WxCpCreateParentRequest request) throw 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 public WxCpBaseResp updateParent(@NonNull WxCpUpdateParentRequest request) throws WxErrorException { String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(UPDATE_PARENT); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchCreateParentRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchCreateParentRequest.java new file mode 100644 index 0000000000..388ce91697 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchCreateParentRequest.java @@ -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 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; + + 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); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchUpdateParentRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchUpdateParentRequest.java new file mode 100644 index 0000000000..18a659d7d4 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpBatchUpdateParentRequest.java @@ -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 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; + + 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); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpCreateParentRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpCreateParentRequest.java index f97a3c48b1..21de39b8cd 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpCreateParentRequest.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/user/WxCpCreateParentRequest.java @@ -36,6 +36,9 @@ public class WxCpCreateParentRequest implements Serializable { @Setter @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor public static class Children implements Serializable { @SerializedName("student_userid") diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java index be0f0bf91c..1d8f3a537e 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java @@ -196,6 +196,9 @@ interface School { String BATCH_CREATE_STUDENT = "/cgi-bin/school/user/batch_create_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_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 DELETE_STUDENT = "/cgi-bin/school/user/delete_student?userid="; diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java index dc8eaea675..f881724ac1 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolUserTest.java @@ -5,6 +5,7 @@ import lombok.var; import me.chanjar.weixin.common.error.WxErrorException; 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.bean.WxCpBaseResp; import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo; @@ -55,8 +56,153 @@ public void test() throws WxErrorException { 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 childrenList1 = Lists.newArrayList(); + childrenList1.add(child1); + childrenList1.add(child2); + + List 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 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");