java110 %!s(int64=5) %!d(string=hai) anos
pai
achega
47b5b0a7e0

+ 13 - 0
java110-core/src/main/java/com/java110/core/base/controller/BaseController.java

@@ -118,6 +118,19 @@ public class BaseController extends AppBase {
         return returnMap;
     }
 
+    // 获取HttpServletRequest里面的参数
+    public static Map<String, String> getRequestParams(HttpServletRequest request) {
+        Map<String, String[]> params = request.getParameterMap();
+        Map<String, String> params2 = new HashMap<>();
+        for (String key : params.keySet()) {
+            String[] values = params.get(key);
+            if (values.length > 0) {
+                params2.put(key, request.getParameter(key));
+            }
+        }
+        return params2;
+    }
+
     protected void initHeadParam(HttpServletRequest request, Map headers) {
 
         Enumeration reqHeaderEnum = request.getHeaderNames();

+ 65 - 11
service-front/src/main/java/com/java110/front/controller/app/PaymentController.java

@@ -19,18 +19,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.core.base.controller.BaseController;
 import com.java110.core.context.IPageData;
 import com.java110.core.context.PageData;
-import com.java110.front.smo.payment.IOweFeeToNotifySMO;
-import com.java110.front.smo.payment.IRentingToNotifySMO;
-import com.java110.front.smo.payment.IRentingToPaySMO;
-import com.java110.front.smo.payment.IToNotifySMO;
-import com.java110.front.smo.payment.IToPayBackCitySMO;
-import com.java110.front.smo.payment.IToPayInGoOutSMO;
-import com.java110.front.smo.payment.IToPayOweFeeSMO;
-import com.java110.front.smo.payment.IToPaySMO;
-import com.java110.front.smo.payment.IToPayTempCarInoutSMO;
-import com.java110.front.smo.payment.IToQrPayOweFeeSMO;
+import com.java110.front.smo.payment.*;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.util.StringUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +34,11 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 支付 处理类
@@ -208,11 +206,28 @@ public class PaymentController extends BaseController {
         for (String key : request.getParameterMap().keySet()) {
             paramIn.put(key, request.getParameter(key));
             logger.debug("银联回调报文form" + key + ":: " + request.getParameter(key));
-
         }
         logger.debug("微信支付回调报文" + paramIn.toJSONString());
 
+        /*接收参数*/
+        Map<String, String> params = getRequestParams(request);
+        System.out.println("params:" + params);
+        String sign = params.get("sign");
+        System.out.println(sign);
+
+        /*验签*/
+        //对通知内容生成sign
+        //String strSign = makeSign(md5key, params);
+        //System.out.println("strSign="+strSign);
+        String preStr = buildSignString(params);
+        paramIn.put("preSign",preStr);
+        paramIn.put("sign",sign);
+        //判断签名是否相等
+
+        // 收到通知后记得返回SUCCESS
         return toNotifySMOImpl.toNotify(paramIn.toJSONString(), request);
+
+
     }
 
 
@@ -302,4 +317,43 @@ public class PaymentController extends BaseController {
         return toQrPayOweFeeSMOImpl.toPay(newPd);
     }
 
+    // 构建签名字符串
+    public static String buildSignString(Map<String, String> params) {
+
+        // params.put("Zm","test_test");
+
+        if (params == null || params.size() == 0) {
+            return "";
+        }
+
+        List<String> keys = new ArrayList<>(params.size());
+
+        for (String key : params.keySet()) {
+            if ("sign".equals(key))
+                continue;
+            if (StringUtils.isEmpty(params.get(key)))
+                continue;
+            keys.add(key);
+        }
+        //System.out.println(listToString(keys));
+
+        Collections.sort(keys);
+
+        StringBuilder buf = new StringBuilder();
+
+        for (int i = 0; i < keys.size(); i++) {
+            String key = keys.get(i);
+            String value = params.get(key);
+
+            if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
+                buf.append(key + "=" + value);
+            } else {
+                buf.append(key + "=" + value + "&");
+            }
+        }
+
+        return buf.toString();
+    }
+
+
 }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 24 - 13
service-front/src/main/java/com/java110/front/smo/payment/adapt/chinaums/ChinaUmsPayNotifyAdapt.java