Просмотр исходного кода

Merge tag 'refs/tags/jenkins-back_end_wechat-157' into release

test
release
Stormeye Wu 7 лет назад
Родитель
Сommit
10c2252eb8
4 измененных файлов: 68 добавлений и 37 удалений
  1. +53
    -12
      mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java
  2. +1
    -8
      mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java
  3. +13
    -16
      mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java
  4. +1
    -1
      mlWechatOpen/src/main/resources/application-dev.yml

+ 53
- 12
mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java Просмотреть файл

@@ -11,6 +11,7 @@ import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.util.Pool;
@@ -76,7 +77,28 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage {
@Override
public String getComponentVerifyTicket() {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.componentVerifyTicketKey);
logger.info("getComponentVerifyTicket " + this.componentVerifyTicketKey);
String ticket = jedis.get(this.componentVerifyTicketKey);
if(StringUtils.isBlank(ticket)) {
String appId;
String [] keys = componentAccessTokenKey.split(":");
if(StringUtils.isBlank(keyPrefix)) {
appId = keys[1];
} else {
appId = keys[2];
}
WxComponentVerifyTicket wxComponentVerifyTicket = new WxComponentVerifyTicket();
wxComponentVerifyTicket.setComponentAppid(getComponentAppId());
try {
wxComponentVerifyTicket = wxComponentVerifyTicketMapper.selectOne(wxComponentVerifyTicket);
if(wxComponentVerifyTicket != null) {
ticket = wxComponentVerifyTicket.getComponentVerifyTicket();
}
}catch (Exception e) {
logger.error(e.getMessage());
}
}
return ticket;
}
}

@@ -84,6 +106,7 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage {
public void setComponentVerifyTicket(String componentVerifyTicket) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.set(this.componentVerifyTicketKey, componentVerifyTicket);
logger.info("setComponentVerifyTicket " + componentVerifyTicket);
}
}

@@ -112,16 +135,22 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage {
public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.setex(this.componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken);
logger.info("updateComponentVerifyTicketAccessToken " + componentAccessToken);

WxComponentVerifyTicket ticket = new WxComponentVerifyTicket();
ticket.setComponentAppid(getComponentAppId());
ticket.setAccessToken(componentAccessToken);
ticket.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000))));
int num = wxComponentVerifyTicketMapper.updateAccessToken(ticket);
logger.info("updateComponentVerifyTicketAccessToken rows: " + num);
saveComponentVerifyTicket(componentAccessToken, expiresInSeconds);
}
}

@Async
public void saveComponentVerifyTicket(String componentAccessToken, int expiresInSeconds) {
WxComponentVerifyTicket ticket = new WxComponentVerifyTicket();
ticket.setComponentAppid(getComponentAppId());
ticket.setAccessToken(componentAccessToken);
ticket.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000))));
int num = wxComponentVerifyTicketMapper.updateAccessToken(ticket);
logger.info("updateComponentVerifyTicketAccessToken rows: " + num);
}

private String getKey(String prefix, String appId) {
return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId);
}
@@ -137,15 +166,20 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage {
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.set(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken);
logger.info("setAuthorizerRefreshToken " + appId);

WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo();
authorizerInfo.setAuthorizerAppid(appId);
authorizerInfo.setRefreshToken(authorizerRefreshToken);
int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo);
logger.info("setAuthorizerRefreshToken " + appId + " rows: " + num);
saveAuthorizerRefreshToken(appId, authorizerRefreshToken);
}
}

@Async
public void saveAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo();
authorizerInfo.setAuthorizerAppid(appId);
authorizerInfo.setRefreshToken(authorizerRefreshToken);
int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo);
}

@Override
public String getAuthorizerAccessToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
@@ -171,6 +205,13 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage {
public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) {
this.updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), authorizerAccessToken.getExpiresIn());

logger.info("updateAuthorizerAccessToken " + appId);

dbUpdateAccessToken(appId, authorizerAccessToken);
}

@Async
public void dbUpdateAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) {
WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo();
authorizerInfo.setAuthorizerAppid(appId);
authorizerInfo.setAccessToken(authorizerAccessToken.getAuthorizerAccessToken());


+ 1
- 8
mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java Просмотреть файл

@@ -72,14 +72,7 @@ public class FmOpenService extends WxOpenServiceImpl {
wxOpenMessageRouter = new WxOpenMessageRouter(this);
wxOpenMessageRouter.rule().handler((wxMpXmlMessage, map, wxMpService, wxSessionManager) -> {
String appId = wxMpService.getWxMpConfigStorage().getAppId();
WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.findByAppid(appId);
String appType;
if(authorizerInfo.getType() <= EnumAppType.C.getCode()) {
appType = "小程序";
} else {
appType = "公众号";
}
logger.info("\n接收到{}{}请求消息,内容:{}", appId, appType, wxMpXmlMessage);
logger.info("\n接收到 {} 请求消息,内容:{}", appId, wxMpXmlMessage);
return null;
}).next();



+ 13
- 16
mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java Просмотреть файл

@@ -79,7 +79,8 @@ public class WechatCalllbackController extends BaseController {
this.logger.info("接收微信回调,消息解密后内容为:{} ", inMessage.toString());

// 处理
return handleTicket(inMessage);
handleTicket(inMessage);
return "success";
}

/**
@@ -87,8 +88,14 @@ public class WechatCalllbackController extends BaseController {
* @param inMessage
* @return
*/
private String handleTicket(WxOpenXmlMessage inMessage) {
if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) {
private void handleTicket(WxOpenXmlMessage inMessage) {
try {
String out = openService.getWxOpenComponentService().route(inMessage);
this.logger.info("组装回复信息:{}", out);
} catch (WxErrorException e) {
this.logger.error("notify", e);
}
if (inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) {
// 保存component_verify_ticket
componentVerifyTicketService.saveOrUpdate(new WxComponentVerifyTicket() {
{
@@ -98,11 +105,10 @@ public class WechatCalllbackController extends BaseController {
setDeadline(new Date(Long.valueOf(System.currentTimeMillis() + (60 * 60 * 1000))));
}
});
return "success";
} else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) ||
inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())) {
} else if (inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) ||
inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())) {
// 审核通过
if (handleWeappAuditedMessage(inMessage)) return "success";
handleWeappAuditedMessage(inMessage);
} else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) {
// 授权取消
authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() {
@@ -112,16 +118,7 @@ public class WechatCalllbackController extends BaseController {
setAuthTime(new Date());
}
});
return "success";
}

try {
String out = openService.getWxOpenComponentService().route(inMessage);
this.logger.info("组装回复信息:{}", out);
} catch (WxErrorException e) {
this.logger.error("notify", e);
}
return "success";
}

/**


+ 1
- 1
mlWechatOpen/src/main/resources/application-dev.yml Просмотреть файл

@@ -32,7 +32,7 @@ spring:
password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA)
timeout: 3600
expire: 1800 #30分钟
database: 10
database: 1
defaultExpiration: 2592000 # 默认生命周期30天
jedis:
pool:


Загрузка…
Отмена
Сохранить