package com.qianwen.core.social.request; import com.alibaba.fastjson.JSONObject; import java.util.Date; import java.util.Optional; import java.util.UUID; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.request.AbstractAuthWeChatEnterpriseRequest; import me.zhyd.oauth.utils.HttpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.core.social.props.BladeAuthSource; import com.qianwen.core.tool.utils.DigestUtil; /* loaded from: blade-starter-social-9.3.2.0-SNAPSHOT.jar:org/springblade/core/social/request/CustomAuthWeChatEntWebRequest.class */ public class CustomAuthWeChatEntWebRequest extends AbstractAuthWeChatEnterpriseRequest { private static final Logger log = LoggerFactory.getLogger(CustomAuthWeChatEntWebRequest.class); public static final String DAILY_DING_ACCESS_TOKEN = "weChatEnterprise:accessToken:"; public static final String ENTERPRISE_TICKET_CACHE = "ticket:"; public static final String APP_TICKET_CACHE = "ticket:app:"; public static final String JSAPI_SIGIN_URL = "jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s"; public static final String ENTERPRISE_TICKET = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s"; public static final String APP_TICKET_URL = "https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=%s&type=agent_config"; public static final String GET_USER_DETAIL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=%s"; public CustomAuthWeChatEntWebRequest(AuthConfig config, AuthStateCache authStateCache) { super(config, BladeAuthSource.WECHAT_ENTERPRISE_WEB, authStateCache); } public String getAccessToken() { String appTokenRedisKey = DAILY_DING_ACCESS_TOKEN.concat(this.config.getClientId()).concat(":").concat(this.config.getClientSecret()).concat(":"); String accessToken = this.authStateCache.get(appTokenRedisKey); if (accessToken != null) { return accessToken; } AuthToken authToken = super.getAccessToken(AuthCallback.builder().code((String) null).build()); if (authToken != null) { accessToken = authToken.getAccessToken(); this.authStateCache.cache(appTokenRedisKey, authToken.getAccessToken(), authToken.getExpireIn() * 1000); } log.info("getAccessToken={}", accessToken); return accessToken; } private String getTicket(boolean isAgentTicket) { String concat; if (isAgentTicket) { concat = APP_TICKET_CACHE.concat(this.config.getClientId()).concat(":").concat(this.config.getClientSecret()).concat(":"); } else { concat = ENTERPRISE_TICKET_CACHE.concat(this.config.getClientId()).concat(":"); } String cacheKey = concat; String cacheTicket = this.authStateCache.get(cacheKey); return (String) Optional.ofNullable(cacheTicket).orElseGet(() -> { String token = getAccessToken(); String ticketURL = String.format(isAgentTicket ? APP_TICKET_URL : ENTERPRISE_TICKET, token); String result = new HttpUtils(this.config.getHttpConfig()).get(ticketURL).getBody(); JSONObject jsonObject = JSONObject.parseObject(result); return (String) Optional.ofNullable(jsonObject.getString("ticket")).map(ticket -> { this.authStateCache.cache(cacheKey, ticket, jsonObject.getIntValue("expires_in") * 1000); return ticket; }).orElseThrow(() -> { return new AuthException("获取Ticket失败"); }); }); } public SignatureResult signatureURL(final String url, final boolean isAgentTicket) { String jsapi_ticket = getTicket(isAgentTicket); String nonceStr = UUID.randomUUID().toString(); long timestamp = new Date().getTime() / 1000; String data = String.format(JSAPI_SIGIN_URL, jsapi_ticket, nonceStr, Long.valueOf(timestamp), url); return SignatureResult.builder().nonceStr(nonceStr).timestamp(timestamp).signature(DigestUtil.sha1Hex(data)).appId(this.config.getClientId()).jsapi_ticket(jsapi_ticket).build(); } protected AuthUser getUserInfo(AuthToken authToken) { String response = doGetUserInfo(authToken); log.info("getUserInfo={}", response); JSONObject object = checkResponse(response); if (!object.containsKey("userid")) { throw new AuthException(AuthResponseStatus.UNIDENTIFIED_PLATFORM, this.source); } String userId = object.getString("userid"); AuthUser.AuthUserBuilder builder = AuthUser.builder().uuid(userId).token(authToken).source(this.source.toString()); Optional.ofNullable(object.getString("user_ticket")).map(this::getUserDetail).map(this::checkResponse).ifPresent(detail -> { builder.rawUserInfo(detail).avatar(detail.getString("avatar")).location(detail.getString("address")).email(detail.getString("email")).uuid(userId).gender(AuthUserGender.getWechatRealGender(detail.getString("gender"))); }); return builder.build(); } public String getUserDetail(final String userTicket) { String accessToken = getAccessToken(); String url = String.format(GET_USER_DETAIL, accessToken); JSONObject data = new JSONObject(); data.put("user_ticket", userTicket); String response = new HttpUtils(this.config.getHttpConfig()).post(url, data.toJSONString()).getBody(); log.info("getUserDetail={}", response); return response; } private JSONObject checkResponse(String response) { JSONObject object = JSONObject.parseObject(response); if (object.containsKey("errcode") && object.getIntValue("errcode") != 0) { throw new AuthException(object.getString("errmsg"), this.source); } return object; } /* loaded from: blade-starter-social-9.3.2.0-SNAPSHOT.jar:org/springblade/core/social/request/CustomAuthWeChatEntWebRequest$SignatureResult.class */ public static class SignatureResult { private String nonceStr; private long timestamp; private String signature; private String appId; private String jsapi_ticket; /* loaded from: blade-starter-social-9.3.2.0-SNAPSHOT.jar:org/springblade/core/social/request/CustomAuthWeChatEntWebRequest$SignatureResult$SignatureResultBuilder.class */ public static class SignatureResultBuilder { private String nonceStr; private long timestamp; private String signature; private String appId; private String jsapi_ticket; SignatureResultBuilder() { } public SignatureResultBuilder nonceStr(final String nonceStr) { this.nonceStr = nonceStr; return this; } public SignatureResultBuilder timestamp(final long timestamp) { this.timestamp = timestamp; return this; } public SignatureResultBuilder signature(final String signature) { this.signature = signature; return this; } public SignatureResultBuilder appId(final String appId) { this.appId = appId; return this; } public SignatureResultBuilder jsapi_ticket(final String jsapi_ticket) { this.jsapi_ticket = jsapi_ticket; return this; } public SignatureResult build() { return new SignatureResult(this.nonceStr, this.timestamp, this.signature, this.appId, this.jsapi_ticket); } public String toString() { return "CustomAuthWeChatEntWebRequest.SignatureResult.SignatureResultBuilder(nonceStr=" + this.nonceStr + ", timestamp=" + this.timestamp + ", signature=" + this.signature + ", appId=" + this.appId + ", jsapi_ticket=" + this.jsapi_ticket + ")"; } } public void setNonceStr(final String nonceStr) { this.nonceStr = nonceStr; } public void setTimestamp(final long timestamp) { this.timestamp = timestamp; } public void setSignature(final String signature) { this.signature = signature; } public void setAppId(final String appId) { this.appId = appId; } public void setJsapi_ticket(final String jsapi_ticket) { this.jsapi_ticket = jsapi_ticket; } public boolean equals(final Object o) { if (o == this) { return true; } if (o instanceof SignatureResult) { SignatureResult other = (SignatureResult) o; if (other.canEqual(this) && getTimestamp() == other.getTimestamp()) { Object this$nonceStr = getNonceStr(); Object other$nonceStr = other.getNonceStr(); if (this$nonceStr == null) { if (other$nonceStr != null) { return false; } } else if (!this$nonceStr.equals(other$nonceStr)) { return false; } Object this$signature = getSignature(); Object other$signature = other.getSignature(); if (this$signature == null) { if (other$signature != null) { return false; } } else if (!this$signature.equals(other$signature)) { return false; } Object this$appId = getAppId(); Object other$appId = other.getAppId(); if (this$appId == null) { if (other$appId != null) { return false; } } else if (!this$appId.equals(other$appId)) { return false; } Object this$jsapi_ticket = getJsapi_ticket(); Object other$jsapi_ticket = other.getJsapi_ticket(); return this$jsapi_ticket == null ? other$jsapi_ticket == null : this$jsapi_ticket.equals(other$jsapi_ticket); } return false; } return false; } protected boolean canEqual(final Object other) { return other instanceof SignatureResult; } public int hashCode() { long $timestamp = getTimestamp(); int result = (1 * 59) + ((int) (($timestamp >>> 32) ^ $timestamp)); Object $nonceStr = getNonceStr(); int result2 = (result * 59) + ($nonceStr == null ? 43 : $nonceStr.hashCode()); Object $signature = getSignature(); int result3 = (result2 * 59) + ($signature == null ? 43 : $signature.hashCode()); Object $appId = getAppId(); int result4 = (result3 * 59) + ($appId == null ? 43 : $appId.hashCode()); Object $jsapi_ticket = getJsapi_ticket(); return (result4 * 59) + ($jsapi_ticket == null ? 43 : $jsapi_ticket.hashCode()); } public String toString() { return "CustomAuthWeChatEntWebRequest.SignatureResult(nonceStr=" + getNonceStr() + ", timestamp=" + getTimestamp() + ", signature=" + getSignature() + ", appId=" + getAppId() + ", jsapi_ticket=" + getJsapi_ticket() + ")"; } SignatureResult(final String nonceStr, final long timestamp, final String signature, final String appId, final String jsapi_ticket) { this.nonceStr = nonceStr; this.timestamp = timestamp; this.signature = signature; this.appId = appId; this.jsapi_ticket = jsapi_ticket; } public static SignatureResultBuilder builder() { return new SignatureResultBuilder(); } public String getNonceStr() { return this.nonceStr; } public long getTimestamp() { return this.timestamp; } public String getSignature() { return this.signature; } public String getAppId() { return this.appId; } public String getJsapi_ticket() { return this.jsapi_ticket; } } }