Browse Source

微信第三方平台-统一修改

dev_shibei_match
zxc 5 years ago
parent
commit
803376a0c7
  1. 59
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ThirdApiConstant.java
  2. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/exception/AesException.java
  3. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/AesException.java
  4. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/SHA1.java
  5. 16
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/WXBizMsgCrypt.java
  6. 4
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/XMLParse.java
  7. 19
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java
  8. 17
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java
  9. 1
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/WarrantServiceImpl.java
  10. 51
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java
  11. 55
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/enums/WxMaErrorMsgEnum.java

59
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ThirdApiConstant.java

@ -1,59 +0,0 @@
package com.epmet.constant;
/**
* @Author zxc
* @CreateTime 2020/7/8 17:59
*/
public interface ThirdApiConstant {
/**
* 获取预授权码
*/
String API_CREATE_PREAUTHCODE_URL = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=";
/**
* 使用授权码获取授权信息请求地址
*/
String API_QUERY_AUTH_URL = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth";
/**
* 获取令牌请求地址
*/
String API_COMPONENT_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
String API_AUTHORIZER_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token";
/**
* 授权回调url
*/
String API_REDIRECT_URL = "https://epmet-dev.elinkservice.cn/api/third/redirectauthcode";
/**
* 反参授权回调url
*/
String API_RETURN_REDIRECT_URL = "https://epmet-dev.elinkservice.cn/api/third/redirectauthcode?client=%s&customerId=%s";
/**
* 授权注册页面扫码授权
* component_appid:第三方AppId
* pre_auth_code预授权码
* redirect_uri回调url获取授权码
*/
String API_AUTH_REGISTER_URL = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=%s&pre_auth_code=%s&redirect_uri=%s";
/**
* 创建开放平台帐号并绑定公众号/小程序
*/
String API_CREATE_OPEN = "https://api.weixin.qq.com/cgi-bin/open/create";
/**
* 公众号/小程序绑定到开放平台帐号下
*/
String API_BIND_OPEN = "https://api.weixin.qq.com/cgi-bin/open/bind?";
/**
* 获取授权方的帐号基本信息
*/
String API_GET_AUTHORIZER_INFO = "https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info";
}

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/exception/AesException.java

@ -7,7 +7,7 @@ package com.epmet.exception;
@SuppressWarnings("serial")
public class AesException extends Exception {
public final static int OK = 0;
/*public final static int OK = 0;
public final static int ValidateSignatureError = -40001;
public final static int ParseXmlError = -40002;
public final static int ComputeSignatureError = -40003;
@ -59,7 +59,7 @@ public class AesException extends Exception {
super(getMessage(code));
this.code = code;
}
*/
}

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/AesException.java

@ -3,7 +3,7 @@ package com.epmet.mpaes;
@SuppressWarnings("serial")
public class AesException extends Exception {
public final static int OK = 0;
/*public final static int OK = 0;
public final static int ValidateSignatureError = -40001;
public final static int ParseXmlError = -40002;
public final static int ComputeSignatureError = -40003;
@ -54,6 +54,6 @@ public class AesException extends Exception {
AesException(int code) {
super(getMessage(code));
this.code = code;
}
}*/
}

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/SHA1.java

@ -8,6 +8,8 @@
package com.epmet.mpaes;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.wxapi.enums.WxMaErrorMsgEnum;
import org.springframework.stereotype.Component;
import java.security.MessageDigest;
@ -57,7 +59,7 @@ public class SHA1 {
return hexstr.toString();
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ComputeSignatureError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40003.getMsg());
}
}
}

16
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/WXBizMsgCrypt.java

@ -13,6 +13,8 @@
*/
package com.epmet.mpaes;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.wxapi.enums.WxMaErrorMsgEnum;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
@ -54,7 +56,7 @@ public class WXBizMsgCrypt {
*/
public WXBizMsgCrypt(String token, String encodingAesKey, String appId) throws AesException {
if (encodingAesKey.length() != 43) {
throw new AesException(AesException.IllegalAesKey);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40004.getMsg());
}
this.token = token;
@ -137,7 +139,7 @@ public class WXBizMsgCrypt {
return base64Encrypted;
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.EncryptAESError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40006.getMsg());
}
}
@ -164,7 +166,7 @@ public class WXBizMsgCrypt {
original = cipher.doFinal(encrypted);
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.DecryptAESError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40007.getMsg());
}
String xmlContent, from_appid;
@ -182,12 +184,12 @@ public class WXBizMsgCrypt {
CHARSET);
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.IllegalBuffer);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40008.getMsg());
}
// appid不相同的情况
if (!from_appid.equals(appId)) {
throw new AesException(AesException.ValidateAppidError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40005.getMsg());
}
return xmlContent;
@ -249,7 +251,7 @@ public class WXBizMsgCrypt {
// 验证安全签名
String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt);
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40001.getMsg());
}
// 解密
String result = decrypt(encrypt);
@ -271,7 +273,7 @@ public class WXBizMsgCrypt {
String signature = SHA1.getSHA1(token, timeStamp, nonce, echoStr);
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40001.getMsg());
}
String result = decrypt(echoStr);

4
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mpaes/XMLParse.java

@ -8,6 +8,8 @@
package com.epmet.mpaes;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.wxapi.enums.WxMaErrorMsgEnum;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@ -48,7 +50,7 @@ public class XMLParse {
return result;
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ParseXmlError);
throw new RenException(WxMaErrorMsgEnum.CODE_MINUS_40002.getMsg());
}
}

19
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java

@ -1,26 +1,17 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.constant.ModuleConstant;
import com.epmet.constant.ThirdApiConstant;
import com.epmet.dao.ComponentAccessTokenDao;
import com.epmet.dao.PaCustomerAgencyDao;
import com.epmet.dto.form.GoToAuthFormDTO;
import com.epmet.dto.result.GoToAuthResultDTO;
import com.epmet.redis.RedisThird;
import com.epmet.service.AppLetAuthorizationService;
import com.epmet.service.ComponentVerifyTicketService;
import com.google.gson.JsonObject;
import com.epmet.wxapi.constant.WxMaCodeConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @Author zxc
* @CreateTime 2020/7/10 15:52
@ -33,10 +24,6 @@ public class AppLetAuthorizationServiceImpl implements AppLetAuthorizationServic
private PaCustomerAgencyDao paCustomerAgencyDao;
@Autowired
private ComponentVerifyTicketService componentVerifyTicketService;
@Autowired
private ComponentAccessTokenDao componentAccessTokenDao;
@Autowired
private RedisThird redisThird;
@Value("${third.platform.appId}")
private String componentAppId;
@ -52,8 +39,8 @@ public class AppLetAuthorizationServiceImpl implements AppLetAuthorizationServic
String customerId = paCustomerAgencyDao.getCustomerIdByUserId(userId);
//获取预授权码
String preAuthCode = componentVerifyTicketService.preAuthCode();
String redirectUrl = String.format(ThirdApiConstant.API_RETURN_REDIRECT_URL, formDTO.getClientType(), customerId);
String authUrl = String.format(ThirdApiConstant.API_AUTH_REGISTER_URL, componentAppId, preAuthCode, redirectUrl);
String redirectUrl = String.format(WxMaCodeConstant.API_RETURN_REDIRECT_URL, formDTO.getClientType(), customerId);
String authUrl = String.format(WxMaCodeConstant.API_AUTH_REGISTER_URL, componentAppId, preAuthCode, redirectUrl);
result.setUrl(authUrl);
return result;
}

17
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java

@ -7,7 +7,6 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.constant.ModuleConstant;
import com.epmet.constant.ThirdApiConstant;
import com.epmet.constant.ThirdRunTimeInfoConstant;
import com.epmet.dao.*;
import com.epmet.dto.form.*;
@ -19,6 +18,7 @@ import com.epmet.mpaes.WXBizMsgCrypt;
import com.epmet.mpaes.WXXmlToMapUtil;
import com.epmet.redis.RedisThird;
import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.wxapi.constant.WxMaCodeConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@ -182,7 +182,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
jsonObject.put(ModuleConstant.COMPONENT_APPSECRET, appSecret);
jsonObject.put(ModuleConstant.TICKET_UNDERLINE_KEY, componentVerifyTicket);
String post = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_COMPONENT_TOKEN_URL, JSON.toJSONString(jsonObject)).getData();
String post = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_COMPONENT_TOKEN_URL, JSON.toJSONString(jsonObject)).getData();
Map hashMap = JSON.parseObject(post, Map.class);
String componentAccessToken = hashMap.get(COMPONENT_ACCESS_TOKEN).toString();
Integer expiresIn = (Integer) hashMap.get(ModuleConstant.EXPIRES_IN);
@ -219,7 +219,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
String accessToken = redisThird.getComponentAccessToken();
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
String post = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
String post = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
log.info(String.format(POST_RESULT,post));
Map hashMap = JSON.parseObject(post, Map.class);
preAuthCode = hashMap.get(ModuleConstant.PRE_AUTH_CODE).toString();
@ -259,7 +259,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZATION_CODE, authCode);
String authInfo = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
String authInfo = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
HashMap<String,Map> hashMap = JSON.parseObject(authInfo, HashMap.class);
Map map = hashMap.get(ModuleConstant.AUTHORIZATION_INFO);
authorizationInfoResultDTO = mapToEntity(map, AuthorizationInfoResultDTO.class);
@ -328,7 +328,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
//第三方平台AppId
jsonObject.put(ModuleConstant.COMPONENT_APPID,componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_REFRESH_TOKEN,willOverDueDTO.getAuthorizerRefreshToken());
String data = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_AUTHORIZER_TOKEN_URL, JSON.toJSONString(jsonObject)).getData();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_AUTHORIZER_TOKEN_URL, JSON.toJSONString(jsonObject)).getData();
Map map = JSON.parseObject(data, HashMap.class);
//authorizer_access_token
String authorizerAccessToken = map.get(ModuleConstant.AUTHORIZER_ACCESS_TOKEN).toString();
@ -408,7 +408,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APP_ID,componentAppId);
jsonObject.put(ModuleConstant.AUTHORIZER_APP_ID,authAppId);
String data = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_GET_AUTHORIZER_INFO, JSON.toJSONString(jsonObject)).getData();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_GET_AUTHORIZER_INFO, JSON.toJSONString(jsonObject)).getData();
Map<String,Map> map = JSON.parseObject(data, Map.class);
Map authorizerInfo = map.get(ModuleConstant.AUTHORIZER_INFO);
log.info("授权信息:"+authorizerInfo);
@ -503,7 +503,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
//没有任何一个小程序/公众号授权,【先创建,再绑定】
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.APP_ID,authAppId);
String data = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_CREATE_OPEN, JSON.toJSONString(jsonObject)).getData();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_CREATE_OPEN, JSON.toJSONString(jsonObject)).getData();
Map<String,String> map = JSON.parseObject(data, Map.class);
CreateOpenResultDTO createOpen = new CreateOpenResultDTO();
createOpen.setErrCode(Integer.valueOf(map.get(ModuleConstant.ERR_CODE)));
@ -532,7 +532,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.LOW_APP_ID,componentAppId);
jsonObject.put(ModuleConstant.OPEN_APP_ID,openAppId);
String data = HttpClientManager.getInstance().sendPostByJSON(ThirdApiConstant.API_BIND_OPEN, JSON.toJSONString(jsonObject)).getData();
String data = HttpClientManager.getInstance().sendPostByJSON(WxMaCodeConstant.API_BIND_OPEN, JSON.toJSONString(jsonObject)).getData();
Map<String,String> map = JSON.parseObject(data, Map.class);
CreateOpenResultDTO createOpen = new CreateOpenResultDTO();
createOpen.setErrCode(Integer.valueOf(map.get(ModuleConstant.ERR_CODE)));
@ -607,6 +607,7 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
* @author zxc
*/
public Date countExpirationTime(String expiresIn){
expiresIn = expiresIn + "000";
Date date = new Date();
long l = date.getTime() + Long.valueOf(expiresIn);
date.setTime(l);

1
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/WarrantServiceImpl.java

@ -14,7 +14,6 @@ import com.epmet.exception.AesException;
import com.epmet.mpaes.WXBizMsgCrypt;
import com.epmet.mpaes.WXXmlToMapUtil;
import com.epmet.service.WarrantService;
import com.github.pagehelper.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.DocumentException;

51
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java

@ -7,6 +7,57 @@ package com.epmet.wxapi.constant;
* @date 2020/7/10 12:57
*/
public interface WxMaCodeConstant {
/**
* 获取预授权码
*/
String API_CREATE_PREAUTHCODE_URL = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=";
/**
* 使用授权码获取授权信息请求地址
*/
String API_QUERY_AUTH_URL = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth";
/**
* 获取令牌请求地址
*/
String API_COMPONENT_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
String API_AUTHORIZER_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token";
/**
* 授权回调url
*/
String API_REDIRECT_URL = "https://epmet-dev.elinkservice.cn/api/third/redirectauthcode";
/**
* 反参授权回调url
*/
String API_RETURN_REDIRECT_URL = "https://epmet-dev.elinkservice.cn/api/third/redirectauthcode?client=%s&customerId=%s";
/**
* 授权注册页面扫码授权
* component_appid:第三方AppId
* pre_auth_code预授权码
* redirect_uri回调url获取授权码
*/
String API_AUTH_REGISTER_URL = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=%s&pre_auth_code=%s&redirect_uri=%s";
/**
* 创建开放平台帐号并绑定公众号/小程序
*/
String API_CREATE_OPEN = "https://api.weixin.qq.com/cgi-bin/open/create";
/**
* 公众号/小程序绑定到开放平台帐号下
*/
String API_BIND_OPEN = "https://api.weixin.qq.com/cgi-bin/open/bind?";
/**
* 获取授权方的帐号基本信息
*/
String API_GET_AUTHORIZER_INFO = "https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info";
/**
* 为授权的小程序帐号上传小程序代码.
*/

55
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/enums/WxMaErrorMsgEnum.java

@ -14,6 +14,61 @@ public enum WxMaErrorMsgEnum {
*/
CODE_0(0, "请求成功"),
/**
* 签名验证错误
*/
CODE_MINUS_40001(-40001,"签名验证错误"),
/**
* xml解析失败
*/
CODE_MINUS_40002(-40002,"xml解析失败"),
/**
* sha加密生成签名失败
*/
CODE_MINUS_40003(-40003,"sha加密生成签名失败"),
/**
* SymmetricKey非法
*/
CODE_MINUS_40004(-40004,"SymmetricKey非法"),
/**
* corpid校验失败
*/
CODE_MINUS_40005(-40005,"corpid校验失败"),
/**
* aes加密失败
*/
CODE_MINUS_40006(-40006,"aes加密失败"),
/**
* aes解密失败
*/
CODE_MINUS_40007(-40007,"aes解密失败"),
/**
* 解密后得到的buffer非法
*/
CODE_MINUS_40008(-40008,"解密后得到的buffer非法"),
/**
* base64加密错误
*/
CODE_MINUS_40009(-40009,"base64加密错误"),
/**
* base64解密错误
*/
CODE_MINUS_40010(-40010,"base64解密错误"),
/**
* xml生成失败
*/
CODE_MINUS_40011(-40011,"xml生成失败"),
/**
* <pre>
* 获取 access_token AppSecret 错误

Loading…
Cancel
Save