server/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/java/doumeemes/config/shiro/ShiroConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/java/doumeemes/core/utils/Constants.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/java/doumeemes/core/utils/SpringUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/java/doumeemes/core/utils/WxMiniConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
server/pom.xml
@@ -28,6 +28,10 @@ <oshi.version>5.7.0</oshi.version> <jna.version>5.7.0</jna.version> <poi.version>5.0.0</poi.version> <!-- 微信å°ç¨åº --> <weixin-java-miniapp.version>4.1.0</weixin-java-miniapp.version> <!-- 微信æ¯ä» --> <weixin-java-pay.version>4.1.0</weixin-java-pay.version> </properties> <dependencies> @@ -144,6 +148,19 @@ <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- WeChat å°ç¨åº --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>${weixin-java-miniapp.version}</version> </dependency> <!-- WeChat æ¯ä» --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>${weixin-java-pay.version}</version> </dependency> <!--easypoi å¯¼åºæä»¶--> <!-- <dependency> <groupId>cn.afterturn</groupId> server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
@@ -72,6 +72,7 @@ // è·¯å¾æ¦æªé ç½® map.put("/system/login", "anon"); map.put("/system/wxLogin", "anon"); map.put("/system/wxProgramLogin", "anon"); map.put("/system/wxAccountLogin", "anon"); map.put("/system/initCompany", "anon"); map.put("/system/logout", "anon"); server/src/main/java/doumeemes/core/utils/Constants.java
@@ -31,8 +31,14 @@ public static final String WX_CONFIG = "WX_CONFIG"; public static final String APPID = "APPID"; public static final String APPSECRET = "APPSECRET"; public static final String MINIAPPID = "MINIAPPID"; public static final String MINIAPPSECRET = "MINIAPPSECRET"; public static final String WX_TOKEN = "WX_TOKEN"; public static final String OPENID_WX = "wx_"; public static final String OPENID_MINI = "mini_"; public static final String ACCESS_KEY = "ACCESS_KEY"; public static final String ENDPOINT = "ENDPOINT"; public static final String RESOURCE_PATH = "RESOURCE_PATH"; server/src/main/java/doumeemes/core/utils/SpringUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ package doumeemes.core.utils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * NOTICE: NEVER USE IT WHEN REGISTERING A SPRING BEAN. * * @author Guang YANG */ @Component public class SpringUtils implements ApplicationContextAware { private static ApplicationContext CTX; public static ApplicationContext get() { return CTX; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { CTX = applicationContext; } /** * å容å¨ä¸å¨ææ·»å Bean * * @param ctx * @param beanName * @param beanClass */ public static void addBean(ApplicationContext ctx, String beanName, Class beanClass) { BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory(); BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass); BeanDefinition beanDef = beanDefBuilder.getBeanDefinition(); if (!beanDefReg.containsBeanDefinition(beanName)) { beanDefReg.registerBeanDefinition(beanName, beanDef); } } /** * ä»å®¹å¨ä¸ç§»é¤Bean * * @param ctx * @param beanName */ public static void removeBean(ApplicationContext ctx, String beanName) { BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory) ctx.getAutowireCapableBeanFactory(); beanDefReg.getBeanDefinition(beanName); beanDefReg.removeBeanDefinition(beanName); } /** * éåè¾åºææBeançä¿¡æ¯ */ static void showAllBeans(ApplicationContext ctx) { //éå for (String name : ctx.getBeanDefinitionNames()) { System.out.println("name:" + name + ",class:" + ctx.getBean(name).getClass()); } } } server/src/main/java/doumeemes/core/utils/WxMiniConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package doumeemes.core.utils; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import doumeemes.biz.system.SystemDictDataBiz; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; /** * 微信å°ç¨åºç»ä»¶ */ @Configuration public class WxMiniConfig { /********微信å°ç¨åºæå¡**********/ public static WxMaService wxMaService; /********微信å°ç¨åºæ¯ä»**********/ // public static WxPayService wxPayService; /********微信APPæ¯ä»**********/ // public static WxPayService wxAppPayService; @Autowired private SystemDictDataBiz systemDictDataBiz; public static WxMiniConfig me() { return SpringUtils.get().getBean(WxMiniConfig.class); } @PostConstruct void init() { this.load_WxMaService(); // this.load_wxPayService(); // this.load_wxAppPayService(); } /** * åå§å微信å°ç¨åº */ public void load_WxMaService() { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.MINIAPPID).getCode()); config.setSecret(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.MINIAPPSECRET).getCode()); config.setMsgDataFormat("JSON"); //config.setToken(""); //config.setAesKey(""); WxMaService wxMaService = new WxMaServiceImpl(); wxMaService.setWxMaConfig(config); this.wxMaService = wxMaService; } /** * åå§å微信å°ç¨åºæ¯ä» */ // public void load_wxPayService() { // WxPayConfig payConfig = new WxPayConfig(); // payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // payConfig.setSignType(WxPayConstants.SignType.MD5); // payConfig.setAppId(StringUtils.trimToNull(wxPayTeacherProperties.getAppId())); // payConfig.setMchId(StringUtils.trimToNull(wxPayTeacherProperties.getMchId())); // payConfig.setMchKey(StringUtils.trimToNull(wxPayTeacherProperties.getMchKey())); // payConfig.setKeyPath(StringUtils.trimToNull(wxPayTeacherProperties.getKeyPath())); // payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayTeacherProperties.getNotifyUrl())); // WxPayService wxPayService = new WxPayServiceImpl(); // wxPayService.setConfig(payConfig); // this.wxPayService = wxPayService; // } // /** // * åå§åAppæ¯ä» // */ // public void load_wxAppPayService() { // WxPayConfig payConfig = new WxPayConfig(); // payConfig.setTradeType(WxPayConstants.TradeType.APP); // payConfig.setSignType(WxPayConstants.SignType.MD5); // payConfig.setAppId("wx684e49fd8a611334"); // payConfig.setMchId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchId.getCode()))); // payConfig.setMchKey(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchKey.getCode()))); // payConfig.setKeyPath(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_KeyPath.getCode()))); // payConfig.setNotifyUrl(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_NotifyUrl.getCode()))); // WxPayService wxPayService = new WxPayServiceImpl(); // wxPayService.setConfig(payConfig); // this.wxAppPayService = wxPayService; // } } server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
@@ -1,5 +1,6 @@ package doumeemes.service.system.impl; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -11,6 +12,7 @@ import doumeemes.core.utils.Constants; import doumeemes.core.utils.HttpsUtil; import doumeemes.core.utils.Utils; import doumeemes.core.utils.WxMiniConfig; import doumeemes.dao.business.model.Company; import doumeemes.dao.business.model.CompanyUser; import doumeemes.dao.business.model.Department; @@ -32,6 +34,7 @@ import doumeemes.service.system.SystemLoginLogService; import doumeemes.service.system.WxLoginService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; @@ -57,7 +60,6 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Value("${project.version}") private String systemVersion; @@ -85,42 +87,40 @@ */ public static final String GET_USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; public static final String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; /** * 注ï¼å ¬ä¼å·-设置ä¸å¼å-åºæ¬è®¾ç½®ï¼å¿ é¡»ãå·²ç»å®çå¾®ä¿¡å¼æ¾å¹³å°è´¦å·ã * @param code * @param request * @return */ @Override public WxLoginVO wxLogin(String code, HttpServletRequest request) { String appId = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode(); String appSecret = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPSECRET).getCode(); String getTokenUrl = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", appId).replace("SECRET", appSecret); JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true)); if(Objects.isNull(tokenJson.get("access_token"))){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),tokenJson.getString("errmsg")); } String accessToken = tokenJson.getString("access_token"); String openId = tokenJson.getString("openid"); String getUserInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId); JSONObject userInfoJson = JSONObject.parseObject(HttpsUtil.get(getUserInfoUrl,true)); return loginByUnionIdAndReturn(userInfoJson.getString("unionid"),openId,request); //注ï¼å ¬ä¼å·-设置ä¸å¼å-åºæ¬è®¾ç½®ï¼å¿ é¡»ãå·²ç»å®çå¾®ä¿¡å¼æ¾å¹³å°è´¦å·ã String unionId = tokenJson.getString("unionid"); return loginByUnionIdAndReturn(unionId,Constants.OPENID_WX+openId,request); } @Override public WxLoginVO wxProgramLogin(String code, HttpServletRequest request) { //TODO---------------任康 String appId = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode(); String appSecret = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPSECRET).getCode(); String getTokenUrl = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", appId).replace("SECRET", appSecret); JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true)); if(Objects.isNull(tokenJson.get("access_token"))){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),tokenJson.getString("errmsg")); try { WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String unionid = session.getUnionid(); String openId = session.getOpenid(); return loginByUnionIdAndReturn(unionid,Constants.OPENID_MINI+openId,request); } catch (WxErrorException e) { e.printStackTrace(); } String accessToken = tokenJson.getString("access_token"); String openId = tokenJson.getString("openid"); String getUserInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId); JSONObject userInfoJson = JSONObject.parseObject(HttpsUtil.get(getUserInfoUrl,true)); throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"微信ææå¤±è´¥ï¼è¯·è系管çå"); return loginByUnionIdAndReturn(userInfoJson.getString("unionid"),openId,request); } private WxLoginVO loginByUnionIdAndReturn(String unionid,String openId,HttpServletRequest request) {