Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:更新获取用户身份接口,增加获取用户二次验证信息 #3186

Merged
merged 1 commit into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
import me.chanjar.weixin.cp.bean.WxCpUserDetail;
import me.chanjar.weixin.cp.bean.workbench.WxCpSecondVerificatioInformation;

/**
* <pre>
Expand Down Expand Up @@ -116,4 +117,38 @@ public interface WxCpOAuth2Service {
* @throws WxErrorException 异常
*/
WxCpUserDetail getUserDetail(String userTicket) throws WxErrorException;

/**
* <pre>
* 获取用户登录身份
* https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
* 该接口可使用用户登录成功颁发的code来获取成员信息,适用于自建应用与代开发应用
*
* 注意: 旧的/user/getuserinfo 接口的url已变更为auth/getuserinfo,不过旧接口依旧可以使用,建议是关注新接口即可
*
* 适用范围:身份验证中网页授权开发和企业微信Web登录的获取用户登录身份
* </pre>
*
* @param code 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
* @return WxCpOauth2UserInfo user info
* @throws WxErrorException 异常
* @see #getUserInfo(Integer, String) #getUserInfo(Integer, String)
*/
WxCpOauth2UserInfo getAuthUserInfo(String code) throws WxErrorException;

/**
* 获取用户二次验证信息
*
* https://qyapi.weixin.qq.com/cgi-bin/auth/get_tfa_info?access_token=ACCESS_TOKEN
*
* @author Hugo
* @date 2023/12/14 10:29
* @param code 用户进入二次验证页面时,企业微信颁发的code,每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
* @return me.chanjar.weixin.cp.bean.workbench.WxCpSecondVerificatioInformation 二次验证授权码,开发者可以调用通过二次验证接口,解锁企业微信终端.tfa_code有效期五分钟,且只能使用一次。
*
* 权限说明:仅『通讯录同步』或者自建应用可调用,如用自建应用调用,用户需要在二次验证范围和应用可见范围内。
*
* 并发限制:20
*/
WxCpSecondVerificatioInformation get_tfa_info(String code) throws WxErrorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
import me.chanjar.weixin.cp.bean.WxCpUserDetail;
import me.chanjar.weixin.cp.bean.workbench.WxCpSecondVerificatioInformation;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;

import static me.chanjar.weixin.common.api.WxConsts.OAuth2Scope.*;
Expand Down Expand Up @@ -106,4 +107,27 @@ public WxCpUserDetail getUserDetail(String userTicket) throws WxErrorException {
param.toString());
return WxCpGsonBuilder.create().fromJson(responseText, WxCpUserDetail.class);
}

@Override
public WxCpOauth2UserInfo getAuthUserInfo(String code) throws WxErrorException {
String responseText =
this.mainService.get(String.format(this.mainService.getWxCpConfigStorage().getApiUrl(GET_USER_AUTH_INFO), code), null);
JsonObject jo = GsonParser.parse(responseText);

return WxCpOauth2UserInfo.builder()
.userId(GsonHelper.getString(jo, "UserId"))
.openId(GsonHelper.getString(jo, "OpenId"))
.userTicket(GsonHelper.getString(jo, "user_ticket"))
.externalUserId(GsonHelper.getString(jo, "external_userid"))
.build();
}

@Override
public WxCpSecondVerificatioInformation get_tfa_info(String code) throws WxErrorException {
JsonObject param = new JsonObject();
param.addProperty("code", code);
String responseText = this.mainService.post(this.mainService.getWxCpConfigStorage().getApiUrl(GET_TFA_INFO),
param.toString());
return WxCpGsonBuilder.create().fromJson(responseText, WxCpSecondVerificatioInformation.class);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package me.chanjar.weixin.cp.bean.workbench;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
* @author Hugo
* <pre>
* 获取用户二次验证信息的结果类
* </pre>
* <p>
* 文档1:https://developer.work.weixin.qq.com/document/path/99499
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WxCpSecondVerificatioInformation {
private static final long serialVersionUID = -4301564507150486556L;

private String userId;
private String tfa_code;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个变量命名是否可以规范化呢?

}
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,14 @@ interface OAuth2 {
* The constant URL_OAUTH2_AUTHORIZE.
*/
String URL_OAUTH2_AUTHORIZE = "https://open.weixin.qq.com/connect/oauth2/authorize";
/**
* The constant GET_USER_INFO without agentId.
*/
String GET_USER_AUTH_INFO = "/cgi-bin/auth/getuserinfo?code=%s";
/**
* The constant GET_TFA_INFO.
*/
String GET_TFA_INFO = "/cgi-bin/auth/get_tfa_info";
}

/**
Expand Down