|
|
@@ -45,25 +45,15 @@ public class EnterpriseWechatEventHandler {
|
|
|
/** 授权事件 */
|
|
|
@EventListener(value = {EnterpriseWechatEvent.class}, condition = "#event.source.toString()=='create_auth'")
|
|
|
public void createAuth(EnterpriseWechatEvent event) {
|
|
|
-
|
|
|
EnterpriseWechatAuthNotice authNotice = XmlUtil.fromXml(event.getCallbackXml(), EnterpriseWechatAuthNotice.class);
|
|
|
boolean locked = redissonService.tryLock("hanle-create-auth-event::" + authNotice.getSuiteId());
|
|
|
if (!locked) return;
|
|
|
try {
|
|
|
- String key = SUITE_TICKET_KEY_PREFIX + authNotice.getSuiteId();
|
|
|
- String suiteTicket = redisCache.getCacheObject(key);
|
|
|
- Assert.notBlank(suiteTicket, "suite_ticket不存在");
|
|
|
- EnterpriseWechatSuiteAccessTokenRsp tokenRsp = enterpriseWechatApi.getSuiteAccessToken(
|
|
|
- wechatProperties.getSuiteId(), wechatProperties.getSuiteSecret(), suiteTicket);
|
|
|
- String tokenKey = SUITE_ACCESS_TOKEN_KEY_PREFIX + authNotice.getSuiteId();
|
|
|
- redisCache.setCacheObject(tokenKey, tokenRsp.getSuiteAccessToken(), tokenRsp.getExpiresIn(), TimeUnit.SECONDS);
|
|
|
-
|
|
|
- EnterpriseWechatPermanentCodeRsp permanentCodeRsp = enterpriseWechatApi.getPermanentCode(tokenRsp.getSuiteAccessToken(), authNotice.getAuthCode());
|
|
|
+ EnterpriseWechatPermanentCodeRsp permanentCodeRsp = this.fetchPermanentCode(authNotice);
|
|
|
String corpid = permanentCodeRsp.getAuthCorpInfo().getCorpid();
|
|
|
EnterpriseWechatCorp wechatCorp = corpMapper.selectByCorpIdAndSuiteId(corpid, authNotice.getSuiteId());
|
|
|
if (wechatCorp == null) {
|
|
|
- EnterpriseWechatCorp corp = assembler.assembleCorp(permanentCodeRsp);
|
|
|
- corpMapper.insert(corp);
|
|
|
+ corpMapper.insert(assembler.assembleCorp(permanentCodeRsp));
|
|
|
} else {
|
|
|
wechatCorp.setPermanentCode(permanentCodeRsp.getPermanentCode());
|
|
|
corpMapper.updateById(wechatCorp);
|
|
|
@@ -87,4 +77,35 @@ public class EnterpriseWechatEventHandler {
|
|
|
redisCache.setCacheObject(key, suiteTicket.getSuiteTicket(), 60 * 30, TimeUnit.SECONDS);
|
|
|
}
|
|
|
|
|
|
+ /** 永久授权码更新事件(企业重新授权时触发) */
|
|
|
+ @EventListener(value = {EnterpriseWechatEvent.class}, condition = "#event.source.toString()=='reset_permanent_code'")
|
|
|
+ public void resetPermanentCode(EnterpriseWechatEvent event) {
|
|
|
+ EnterpriseWechatAuthNotice authNotice = XmlUtil.fromXml(event.getCallbackXml(), EnterpriseWechatAuthNotice.class);
|
|
|
+ boolean locked = redissonService.tryLock("handle-reset-permanent-code::" + authNotice.getSuiteId());
|
|
|
+ if (!locked) return;
|
|
|
+ try {
|
|
|
+ EnterpriseWechatPermanentCodeRsp permanentCodeRsp = this.fetchPermanentCode(authNotice);
|
|
|
+ String corpid = permanentCodeRsp.getAuthCorpInfo().getCorpid();
|
|
|
+ EnterpriseWechatCorp wechatCorp = corpMapper.selectByCorpIdAndSuiteId(corpid, authNotice.getSuiteId());
|
|
|
+ if (wechatCorp != null) {
|
|
|
+ wechatCorp.setPermanentCode(permanentCodeRsp.getPermanentCode());
|
|
|
+ wechatCorp.setCorpName(permanentCodeRsp.getAuthCorpInfo().getCorpName());
|
|
|
+ corpMapper.updateById(wechatCorp);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ redissonService.unlock("handle-reset-permanent-code::" + authNotice.getSuiteId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 获取永久授权码:suite_ticket → suite_access_token → permanent_code */
|
|
|
+ private EnterpriseWechatPermanentCodeRsp fetchPermanentCode(EnterpriseWechatAuthNotice authNotice) {
|
|
|
+ String suiteTicket = redisCache.getCacheObject(SUITE_TICKET_KEY_PREFIX + authNotice.getSuiteId());
|
|
|
+ Assert.notBlank(suiteTicket, "suite_ticket不存在");
|
|
|
+ EnterpriseWechatSuiteAccessTokenRsp tokenRsp = enterpriseWechatApi.getSuiteAccessToken(
|
|
|
+ wechatProperties.getSuiteId(), wechatProperties.getSuiteSecret(), suiteTicket);
|
|
|
+ redisCache.setCacheObject(SUITE_ACCESS_TOKEN_KEY_PREFIX + authNotice.getSuiteId(),
|
|
|
+ tokenRsp.getSuiteAccessToken(), tokenRsp.getExpiresIn(), TimeUnit.SECONDS);
|
|
|
+ return enterpriseWechatApi.getPermanentCode(tokenRsp.getSuiteAccessToken(), authNotice.getAuthCode());
|
|
|
+ }
|
|
|
+
|
|
|
}
|