mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-04-05 17:38:05 +08:00
Merge branch 'release' into develop
# Conflicts: # README.md # others/weixin-java-osgi/pom.xml # pom.xml # spring-boot-starters/pom.xml # spring-boot-starters/wx-java-miniapp-spring-boot-starter/pom.xml # spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/WxMaAutoConfiguration.java # spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/WxMaProperties.java # spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml # spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java # spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java # spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml # spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java # spring-boot-starters/wx-java-pay-spring-boot-starter/pom.xml # weixin-graal/pom.xml # weixin-java-common/pom.xml # weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxErrorException.java # weixin-java-common/src/main/java/me/chanjar/weixin/common/service/WxOAuth2Service.java # weixin-java-cp/pom.xml # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfo.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/FollowedUser.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessageSendStatistics.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessage.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutVideoMessage.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpTpConfigStorage.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedissonConfigImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpTpDefaultConfigImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpTpRedissonConfigImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/message/WxCpTpMessageRouterRule.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java # weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpServiceImpl.java # weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpTpXmlMessageTest.java # weixin-java-miniapp/pom.xml # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaAnalysisServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCodeServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaExpressServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaImgProcServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaJsapiServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveGoodsServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaOcrServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSettingServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSubscribeServiceImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/live/WxMaLiveRoomInfo.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheQrcodeBytesRequestExecutor.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheQrcodeFileRequestExecutor.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/QrcodeBytesRequestExecutor.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/QrcodeRequestExecutor.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/QrcodeBytesRequestExecutor.java # weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/QrcodeRequestExecutor.java # weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java # weixin-java-mp/pom.xml # weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpGuideService.java # weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java # weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java # weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpGuideServiceImpl.java # weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java # weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBusyRetryTest.java # weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpGuideServiceImplTest.java # weixin-java-open/pom.xml # weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java # weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java # weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java # weixin-java-pay/pom.xml # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/PartnerTransactionsResult.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/ecommerce/ProfitSharingRequest.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EcommerceService.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EcommerceServiceImpl.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceApacheHttpImpl.java # weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java # weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/EcommerceServiceImplTest.java
This commit is contained in:
commit
0c4fb44a79
@ -1,169 +0,0 @@
|
||||
package me.chanjar.weixin.cp.tp.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.chanjar.weixin.common.bean.WxAccessToken;
|
||||
import me.chanjar.weixin.common.error.WxErrorException;
|
||||
import me.chanjar.weixin.cp.bean.WxCpProviderToken;
|
||||
|
||||
import java.util.concurrent.locks.Lock;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 默认接口实现类,使用apache httpclient实现
|
||||
* Created by zhenjun cai.
|
||||
* </pre>
|
||||
* <pre>
|
||||
* 实现分布式锁(基于WxCpTpRedissonConfigImpl存储引擎实现类)版本;
|
||||
* 主要封装了suiteAccessToken,corpAccessToken,suiteJsapiTicket,corpJsapiTicket等的获取方法
|
||||
* Updated by zhangq <zhangq002@gmail.com> on 2021-02-13
|
||||
* </pre>
|
||||
*
|
||||
* @author zhenjun cai
|
||||
* @author zhangq
|
||||
*/
|
||||
@Slf4j
|
||||
public class WxCpTpServiceImpl extends WxCpTpServiceApacheHttpClientImpl {
|
||||
|
||||
@Override
|
||||
public WxAccessToken getSuiteAccessTokenEntity() throws WxErrorException {
|
||||
return this.getSuiteAccessTokenEntity(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxAccessToken getSuiteAccessTokenEntity(boolean forceRefresh) throws WxErrorException {
|
||||
if (!this.configStorage.isSuiteAccessTokenExpired() && !forceRefresh) {
|
||||
return this.configStorage.getSuiteAccessTokenEntity();
|
||||
}
|
||||
|
||||
// 此处configStorage推荐使用WxCpTpRedissonConfigImpl实现类,
|
||||
// 它底层采用了redisson提供的并发锁,会自动续期,无需担心异常中断导致的死锁问题,以及锁提前释放导致的并发问题
|
||||
Lock lock = this.configStorage.getSuiteAccessTokenLock();
|
||||
lock.lock();
|
||||
try {
|
||||
if (!this.configStorage.isSuiteAccessTokenExpired() && !forceRefresh) {
|
||||
return this.configStorage.getSuiteAccessTokenEntity();
|
||||
}
|
||||
|
||||
super.getSuiteAccessToken(forceRefresh);
|
||||
return this.configStorage.getSuiteAccessTokenEntity();
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 复写父类方法,使其支持并发锁模式
|
||||
* @param forceRefresh
|
||||
* @return
|
||||
* @throws WxErrorException
|
||||
*/
|
||||
@Override
|
||||
public String getSuiteAccessToken(boolean forceRefresh) throws WxErrorException {
|
||||
WxAccessToken suiteToken = this.getSuiteAccessTokenEntity(forceRefresh);
|
||||
return suiteToken.getAccessToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxCpProviderToken getWxCpProviderTokenEntity() throws WxErrorException {
|
||||
return this.getWxCpProviderTokenEntity(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxCpProviderToken getWxCpProviderTokenEntity(boolean forceRefresh) throws WxErrorException {
|
||||
if (!this.configStorage.isProviderTokenExpired() && !forceRefresh) {
|
||||
return this.configStorage.getProviderTokenEntity();
|
||||
}
|
||||
|
||||
Lock lock = this.configStorage.getProviderAccessTokenLock();
|
||||
lock.lock();
|
||||
try {
|
||||
if (!this.configStorage.isProviderTokenExpired() && !forceRefresh) {
|
||||
return this.configStorage.getProviderTokenEntity();
|
||||
}
|
||||
|
||||
return super.getWxCpProviderTokenEntity(forceRefresh);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxAccessToken getCorpToken(String authCorpId, String permanentCode) throws WxErrorException {
|
||||
return this.getCorpToken(authCorpId, permanentCode, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxAccessToken getCorpToken(String authCorpId, String permanentCode, boolean forceRefresh)
|
||||
throws WxErrorException {
|
||||
if (!this.configStorage.isAccessTokenExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAccessTokenEntity(authCorpId);
|
||||
}
|
||||
|
||||
Lock lock = this.configStorage.getAccessTokenLock(authCorpId);
|
||||
lock.lock();
|
||||
try {
|
||||
if (!this.configStorage.isAccessTokenExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAccessTokenEntity(authCorpId);
|
||||
}
|
||||
|
||||
WxAccessToken accessToken = super.getCorpToken(authCorpId, permanentCode);
|
||||
this.configStorage.updateAccessToken(authCorpId, accessToken.getAccessToken(), accessToken.getExpiresIn());
|
||||
return accessToken;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthCorpJsApiTicket(String authCorpId) throws WxErrorException {
|
||||
return this.getAuthCorpJsApiTicket(authCorpId, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthCorpJsApiTicket(String authCorpId, boolean forceRefresh) throws WxErrorException {
|
||||
if (!this.configStorage.isAuthCorpJsApiTicketExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAuthCorpJsApiTicket(authCorpId);
|
||||
}
|
||||
|
||||
Lock lock = this.configStorage.getAuthCorpJsapiTicketLock(authCorpId);
|
||||
lock.lock();
|
||||
try {
|
||||
if (!this.configStorage.isAuthCorpJsApiTicketExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAuthCorpJsApiTicket(authCorpId);
|
||||
}
|
||||
if (forceRefresh) {
|
||||
this.configStorage.expireAuthCorpJsApiTicket(authCorpId);
|
||||
}
|
||||
return super.getAuthCorpJsApiTicket(authCorpId);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSuiteJsApiTicket(String authCorpId) throws WxErrorException {
|
||||
return this.getSuiteJsApiTicket(authCorpId, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSuiteJsApiTicket(String authCorpId, boolean forceRefresh) throws WxErrorException {
|
||||
if (!this.configStorage.isAuthSuiteJsApiTicketExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAuthSuiteJsApiTicket(authCorpId);
|
||||
}
|
||||
|
||||
Lock lock = this.configStorage.getSuiteJsapiTicketLock(authCorpId);
|
||||
lock.lock();
|
||||
try {
|
||||
if (!this.configStorage.isAuthSuiteJsApiTicketExpired(authCorpId) && !forceRefresh) {
|
||||
return this.configStorage.getAuthSuiteJsApiTicket(authCorpId);
|
||||
}
|
||||
if (forceRefresh) {
|
||||
this.configStorage.expireAuthSuiteJsApiTicket(authCorpId);
|
||||
}
|
||||
return super.getSuiteJsApiTicket(authCorpId);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user