|
|
@@ -1,17 +1,26 @@
|
|
|
package com.usoftchina.uas.office.qywx.manage.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.usoftchina.qywx.sdk.DevSDK;
|
|
|
+import com.usoftchina.qywx.sdk.dto.GetProviderTokenResp;
|
|
|
+import com.usoftchina.qywx.sdk.util.QywxConst;
|
|
|
import com.usoftchina.qywx.sdk.weixin.AesException;
|
|
|
import com.usoftchina.qywx.sdk.weixin.WXBizJsonMsgCrypt;
|
|
|
import com.usoftchina.uas.office.dto.Result;
|
|
|
import com.usoftchina.uas.office.entity.DataCenter;
|
|
|
import com.usoftchina.uas.office.jdbc.DataSourceHolder;
|
|
|
+import com.usoftchina.uas.office.qywx.config.ProviderConfig;
|
|
|
import com.usoftchina.uas.office.service.AbstractService;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@Service
|
|
|
public class QywxCallbackService extends AbstractService {
|
|
|
@@ -20,24 +29,23 @@ public class QywxCallbackService extends AbstractService {
|
|
|
@Lazy
|
|
|
private QywxSettingService settingService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProviderConfig providerConfig;
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private RedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DevSDK devSDK;
|
|
|
+
|
|
|
private final Logger logger = LoggerFactory.getLogger(QywxCallbackService.class);
|
|
|
|
|
|
public String verifyURL(String msgSignature, Integer timestamp, String nonce, String echostr){
|
|
|
//TODO 获取参数回调配置
|
|
|
- String sToken = "fD8frpMuXpkPLUM";
|
|
|
- String sEncodingAESKey = "73euRc0KW5IbOPNmD6IRFqGAYhcCBRUBrIloAPBLvsR";
|
|
|
- String sCorpID = "wwbb7e27c4decb7872";
|
|
|
- DataCenter dataCenter = DataCenter.INSTANCE;
|
|
|
- try {
|
|
|
- DataSourceHolder.set(dataCenter);
|
|
|
- sCorpID = settingService.find().getCorpId();
|
|
|
- } finally {
|
|
|
- DataSourceHolder.clear();
|
|
|
- }
|
|
|
String callBackStr = null;
|
|
|
try {
|
|
|
- logger.info("企业微信MsgCrypt sToken {} sEncodingAESKey{} sCorpID{}", sToken, sEncodingAESKey, sCorpID);
|
|
|
- WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(sToken, sEncodingAESKey, sCorpID);
|
|
|
+ logger.info("企业微信MsgCrypt sToken {} sEncodingAESKey{} sCorpID{}", providerConfig.getToken() , providerConfig.getEncodingAESKey(), getCropId());
|
|
|
+ WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(providerConfig.getToken(), providerConfig.getEncodingAESKey() , getCropId());
|
|
|
callBackStr = wxcpt.VerifyURL(msgSignature, String.valueOf(timestamp),
|
|
|
nonce, echostr);
|
|
|
} catch (AesException e) {
|
|
|
@@ -49,13 +57,10 @@ public class QywxCallbackService extends AbstractService {
|
|
|
|
|
|
public String callBack(String msgSignature, String timestamp, String nonce, String jsonMsg){
|
|
|
//TODO 获取参数回调配置
|
|
|
- String sToken = "fD8frpMuXpkPLUM";
|
|
|
- String sEncodingAESKey = "73euRc0KW5IbOPNmD6IRFqGAYhcCBRUBrIloAPBLvsR";
|
|
|
- String sCorpID = "wwbb7e27c4decb7872";
|
|
|
String decryptMsg = null;
|
|
|
logger.info("企业微信CallBack POST ");
|
|
|
try {
|
|
|
- WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(sToken, sEncodingAESKey, sCorpID);
|
|
|
+ WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(providerConfig.getToken(), providerConfig.getEncodingAESKey(), getCropId());
|
|
|
decryptMsg = wxcpt.DecryptMsg(msgSignature, timestamp, nonce, jsonMsg);
|
|
|
logger.info("企业微信CallBack POST {}", decryptMsg);
|
|
|
JSON.parseObject(decryptMsg);
|
|
|
@@ -66,5 +71,36 @@ public class QywxCallbackService extends AbstractService {
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取服务商授权Token
|
|
|
+ * */
|
|
|
+ public String getProviderToken(){
|
|
|
+ String providerToken = String.valueOf(redisTemplate.opsForValue().get("QywxProviderToken"));
|
|
|
+ if(StringUtils.isEmpty(providerToken)){
|
|
|
+ GetProviderTokenResp resp = devSDK.getProviderToken();
|
|
|
+ providerToken = resp.getProvider_access_token();
|
|
|
+ redisTemplate.opsForValue().set(QywxConst.PROVIDER_TOKEN, providerToken , resp.getExpires_in(), TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+ return providerToken;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 获取企业cropID
|
|
|
+ * */
|
|
|
+ private String getCropId () {
|
|
|
+ String sCorpID = "";
|
|
|
+ DataCenter dataCenter = DataCenter.INSTANCE;
|
|
|
+ try {
|
|
|
+ DataSourceHolder.set(dataCenter);
|
|
|
+ sCorpID = settingService.find().getCorpId();
|
|
|
+ } finally {
|
|
|
+ DataSourceHolder.clear();
|
|
|
+ }
|
|
|
+ if(!providerConfig.getCorpID().equals(sCorpID)) {
|
|
|
+ //当前回调用户不为服务商时,企业corpID 为密文 详见https://developer.work.weixin.qq.com/document/path/97104
|
|
|
+ sCorpID = devSDK.getCorpid_to_openCorpid(sCorpID, getProviderToken()).getOpen_corpid();
|
|
|
+ }
|
|
|
+ return sCorpID;
|
|
|
+ }
|
|
|
}
|
|
|
|