Bläddra i källkod

优化1.6 拆分费用bug

wuxw 2 år sedan
förälder
incheckning
5c0f842e31

+ 89 - 6
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java

@@ -14,6 +14,8 @@ import com.java110.core.context.DataFlow;
 import com.java110.core.log.LoggerFactory;
 import com.java110.dto.reportData.ReportDataDto;
 import com.java110.dto.reportData.ReportDataHeaderDto;
+import com.java110.dto.system.AppRoute;
+import com.java110.utils.cache.AppRouteCache;
 import com.java110.utils.cache.CommonCache;
 import com.java110.utils.cache.JWTCache;
 import com.java110.utils.cache.MappingCache;
@@ -22,9 +24,12 @@ import com.java110.utils.constant.MappingConstant;
 import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.exception.NoAuthorityException;
 import com.java110.utils.util.Base64Convert;
+import com.java110.utils.util.ListUtil;
 import com.java110.utils.util.StringUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.slf4j.Logger;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
 
 import javax.crypto.Cipher;
 import javax.crypto.SecretKeyFactory;
@@ -37,10 +42,7 @@ import java.io.UnsupportedEncodingException;
 import java.security.*;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.X509EncodedKeySpec;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * 鉴权工厂类
@@ -237,7 +239,7 @@ public class AuthenticationFactory {
         reqInfo += ((dataFlow.getReqBusiness() == null || dataFlow.getReqBusiness().size() == 0)
                 ? dataFlow.getReqData() : dataFlow.getReqBusiness().toJSONString());
         reqInfo += dataFlow.getAppRoutes().get(0).getSecurityCode();
-        logger.debug("加密字符串={}",reqInfo);
+        logger.debug("加密字符串={}", reqInfo);
         return md5(reqInfo);
     }
 
@@ -284,11 +286,92 @@ public class AuthenticationFactory {
         reqInfo += "GET".equals(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_METHOD)) ?
                 param : dataFlow.getReqData();
         reqInfo += dataFlow.getAppRoutes().get(0).getSecurityCode();
-        logger.debug("加密字符串={}",reqInfo);
+        logger.debug("加密字符串={}", reqInfo);
 
         return md5(reqInfo);
     }
 
+    /**
+     * 创建 签名
+     * @param headers
+     * @param httpMethod
+     * @param url
+     * @param param
+     */
+    public static void createSign(HttpHeaders headers, HttpMethod httpMethod, String url, String param) {
+
+
+
+        String appId = headers.getFirst(CommonConstant.HTTP_APP_ID);
+        if (StringUtil.isEmpty(appId)) {
+            appId = headers.getFirst(CommonConstant.APP_ID);
+        }
+        String transactionId = headers.getFirst(CommonConstant.HTTP_TRANSACTION_ID);
+        if (StringUtil.isEmpty(transactionId)) {
+            transactionId = headers.getFirst(CommonConstant.TRANSACTION_ID);
+        }
+        String requestTime = headers.getFirst(CommonConstant.HTTP_REQ_TIME);
+        if (StringUtil.isEmpty(transactionId)) {
+            requestTime = headers.getFirst(CommonConstant.REQUEST_TIME);
+        }
+
+        List<AppRoute> appRoutes = AppRouteCache.getAppRoute(appId);
+        if (ListUtil.isNull(appRoutes)) {
+            return;
+        }
+        if (StringUtil.isEmpty(appRoutes.get(0).getSecurityCode())) {
+            return;
+        }
+        String paramStr = "";
+        if (HttpMethod.GET == httpMethod) {
+            paramStr = url.substring(url.indexOf("?"));
+        } else {
+            paramStr = param;
+        }
+        String sign = transactionId + requestTime + appId + paramStr + appRoutes.get(0).getSecurityCode();
+        headers.remove("sign");
+        headers.add("sign", md5(sign));
+    }
+
+
+    /**
+     * 创建 签名
+     * @param headers
+     * @param httpMethod
+     * @param url
+     * @param param
+     */
+    public static void createSign(Map<String, String> headers, HttpMethod httpMethod, String url, String param) {
+        String appId = headers.get(CommonConstant.HTTP_APP_ID);
+        if (StringUtil.isEmpty(appId)) {
+            appId = headers.get(CommonConstant.APP_ID);
+        }
+        String transactionId = headers.get(CommonConstant.HTTP_TRANSACTION_ID);
+        if (StringUtil.isEmpty(transactionId)) {
+            transactionId = headers.get(CommonConstant.TRANSACTION_ID);
+        }
+        String requestTime = headers.get(CommonConstant.HTTP_REQ_TIME);
+        if (StringUtil.isEmpty(transactionId)) {
+            requestTime = headers.get(CommonConstant.REQUEST_TIME);
+        }
+
+        List<AppRoute> appRoutes = AppRouteCache.getAppRoute(appId);
+        if (ListUtil.isNull(appRoutes)) {
+            return;
+        }
+        if (StringUtil.isEmpty(appRoutes.get(0).getSecurityCode())) {
+            return;
+        }
+        String paramStr = "";
+        if (HttpMethod.GET == httpMethod) {
+            paramStr = url.substring(url.indexOf("?"));
+        } else {
+            paramStr = param;
+        }
+        String sign = transactionId + requestTime + appId + paramStr + appRoutes.get(0).getSecurityCode();
+        headers.put("sign", md5(sign));
+    }
+
     /**
      * md5加密
      *

+ 2 - 1
java110-core/src/main/java/com/java110/core/factory/CallApiServiceFactory.java

@@ -277,7 +277,8 @@ public class CallApiServiceFactory {
         header.add(CommonConstant.USER_ID.toLowerCase(), StringUtil.isEmpty(pd.getUserId()) ? CommonConstant.ORDER_DEFAULT_USER_ID : pd.getUserId());
         header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), StringUtil.isEmpty(pd.getTransactionId()) ? GenerateCodeFactory.getUUID() : pd.getTransactionId());
         header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), StringUtil.isEmpty(pd.getRequestTime()) ? DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT) : pd.getRequestTime());
-        header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        AuthenticationFactory.createSign(header,httpMethod,url,param);
 
         HttpEntity<String> httpEntity = new HttpEntity<String>(param, header);
         //logger.debug("请求中心服务信息,{}", httpEntity);

+ 2 - 1
service-acct/src/main/java/com/java110/acct/payment/business/payFee/PayFeePaymentBusiness.java

@@ -5,6 +5,7 @@ import com.java110.acct.payment.IPaymentBusiness;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.factory.CallApiServiceFactory;
 import com.java110.core.log.LoggerFactory;
+import com.java110.dto.app.AppDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.payment.PaymentOrderDto;
 import com.java110.utils.cache.CommonCache;
@@ -30,7 +31,7 @@ public class PayFeePaymentBusiness implements IPaymentBusiness {
 
         String appId = context.getReqHeaders().get("app-id");
         String userId = context.getReqHeaders().get("user-id");
-        JSONObject orderInfo = CallApiServiceFactory.postForApi(appId, reqJson, "fee.payFeePre", JSONObject.class, userId);
+        JSONObject orderInfo = CallApiServiceFactory.postForApi(AppDto.WEB_APP_ID, reqJson, "fee.payFeePre", JSONObject.class, userId);
         String orderId = orderInfo.getString("oId");
         String feeName = orderInfo.getString("feeName");
         double money = Double.parseDouble(orderInfo.getString("receivedAmount"));

+ 4 - 1
service-api/src/main/java/com/java110/api/smo/payment/impl/GoodsToNotifySMOImpl.java

@@ -1,6 +1,7 @@
 package com.java110.api.smo.payment.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.AuthenticationFactory;
 import com.java110.core.factory.WechatFactory;
 import com.java110.dto.wechat.SmallWeChatDto;
 import com.java110.api.properties.WechatAuthProperties;
@@ -168,7 +169,9 @@ public class GoodsToNotifySMOImpl implements IGoodsToNotifySMO {
         header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), userId);
         header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
         header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
-        header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        AuthenticationFactory.createSign(header,httpMethod,url,param);
+
         header.add("content-type", "application/json");
         HttpEntity<String> httpEntity = new HttpEntity<String>(param, header);
         //logger.debug("请求中心服务信息,{}", httpEntity);

+ 4 - 1
service-common/src/main/java/com/java110/common/thread/UpdateApplicationKeyPwd.java

@@ -1,6 +1,7 @@
 package com.java110.common.thread;
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.AuthenticationFactory;
 import com.java110.intf.common.IApplicationKeyInnerServiceSMO;
 import com.java110.dto.machine.ApplicationKeyDto;
 import com.java110.utils.constant.CommonConstant;
@@ -95,7 +96,9 @@ public class UpdateApplicationKeyPwd implements Runnable {
         header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID);
         header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
         header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
-        header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        AuthenticationFactory.createSign(header,httpMethod,url,param);
+
         HttpEntity<String> httpEntity = new HttpEntity<String>(param, header);
         //logger.debug("请求中心服务信息,{}", httpEntity);
         try {

+ 4 - 1
springboot/src/main/java/com/java110/boot/smo/payment/impl/GoodsToNotifySMOImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.boot.properties.WechatAuthProperties;
 import com.java110.boot.smo.AppAbstractComponentSMO;
 import com.java110.boot.smo.payment.IGoodsToNotifySMO;
+import com.java110.core.factory.AuthenticationFactory;
 import com.java110.core.factory.WechatFactory;
 import com.java110.core.log.LoggerFactory;
 import com.java110.dto.wechat.SmallWeChatDto;
@@ -168,7 +169,9 @@ public class GoodsToNotifySMOImpl implements IGoodsToNotifySMO {
         header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), userId);
         header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
         header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
-        header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        //header.add(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        AuthenticationFactory.createSign(header,httpMethod,url,param);
+
         header.add("content-type", "application/json");
         HttpEntity<String> httpEntity = new HttpEntity<String>(param, header);
         //logger.debug("请求中心服务信息,{}", httpEntity);