From d166c27fad221e3c12618cded5b65b2801da64eb Mon Sep 17 00:00:00 2001 From: 0katekate0 <32161300+0katekate0@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:34:23 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2742=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=20=E5=AE=B6=E6=A0=A1=E6=B2=9F?= =?UTF-8?q?=E9=80=9A-=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=AE=B6=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/WxCpOAuth2Service.java | 15 ++ .../weixin/cp/api/WxCpSchoolUserService.java | 60 +++++++ .../cp/api/impl/WxCpOAuth2ServiceImpl.java | 14 ++ .../api/impl/WxCpSchoolUserServiceImpl.java | 38 ++++ .../weixin/cp/bean/WxCpOauth2UserInfo.java | 5 + .../user/WxCpBatchCreateParentRequest.java | 88 ++++++++++ .../user/WxCpBatchUpdateParentRequest.java | 88 ++++++++++ .../school/user/WxCpCreateParentRequest.java | 3 + .../weixin/cp/constant/WxCpApiPathConsts.java | 4 + .../weixin/cp/api/WxCpSchoolUserTest.java | 163 ++++++++++++++++++ .../bean/WxMaJscode2SessionResult.java | 3 +- 11 files changed, 480 insertions(+), 1 deletion(-) 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/WxCpOAuth2Service.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOAuth2Service.java index 7c42ea63f..f524ac94b 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 @@ import me.chanjar.weixin.cp.bean.WxCpUserDetail; * 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 b12ba0a14..3c64d72bb 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 @@ package me.chanjar.weixin.cp.api;
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 @@ import java.util.List;
*/
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)
@@ -98,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/WxCpOAuth2ServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOAuth2ServiceImpl.java
index 8f989f23d..aac6e01a4 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 class WxCpOAuth2ServiceImpl implements WxCpOAuth2Service {
.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 cbf049861..dc46ee730 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.common.util.json.GsonParser;
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);
@@ -104,6 +115,33 @@ public class WxCpSchoolUserServiceImpl implements WxCpSchoolUserService {
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/WxCpOauth2UserInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpOauth2UserInfo.java
index 0e10737bf..a35a37c05 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 @@ import java.io.Serializable;
* 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/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 000000000..388ce9169
--- /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
* 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