TRX 1 anno fa
parent
commit
441a0b68e7

+ 9 - 9
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionFrictionlessPayMainService.java

@@ -88,7 +88,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
             unionUserOpenInfo.setContractState(ContractState.UNSIGNED);
         }
         unionUserOpenInfo.setContractNo(contractNo);
-        Date expireDate = new Date(System.currentTimeMillis() + UnionPaymentConfig.expireTime);
+        Date expireDate = new Date(System.currentTimeMillis() + 60 * 1000);
         unionUserOpenInfo.setExpiredTime(expireDate.getTime());
 
         String expireTime = DateUtils.paresTime(expireDate.getTime(), DateUtils.FORMAT_LONG);
@@ -110,7 +110,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         signParam.setPayKey(UnionPaymentConfig.payKey);
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.sign);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signParam, SignResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, signParam, SignResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -161,7 +161,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         RescissionParam rescissionParam = new RescissionParam();
         rescissionParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.rescission);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, rescissionParam, SuperResponseModel.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, rescissionParam, SuperResponseModel.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -180,7 +180,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         signQueryParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.signQuery);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signQueryParam, SignQueryResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, signQueryParam, SignQueryResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -200,7 +200,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPay);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, SenselessPayResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, senselessPayParam, SenselessPayResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -220,7 +220,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPayAndOpen);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, SenselessPayResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, senselessPayParam, SenselessPayResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -240,7 +240,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.uacRefund);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, UacRefundResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, senselessPayParam, UacRefundResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -260,7 +260,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.uacRefundQuery);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, requestParam, UacRefundResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, requestParam, UacRefundResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
@@ -280,7 +280,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.orderQuery);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, requestParam, OrderQueryResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, requestParam, OrderQueryResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }

+ 43 - 3
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionRequestService.java

@@ -13,11 +13,13 @@ import com.github.microservice.models.requestModel.SuperResponseModel;
 import com.zhongshu.card.client.model.payment.RequestInfoSaveParam;
 import com.zhongshu.card.client.service.feign.RequestInfoFeignService;
 import com.zhongshu.card.client.type.payment.RequestType;
+import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.ApiConfParam;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.UnionSuperParam;
 import com.zhongshu.payment.server.core.service.base.SuperService;
 import com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config.UnionPaymentConfig;
 import com.zhongshu.payment.server.core.utils.AesUtils;
+import com.zhongshu.payment.server.core.utils.CommonUtil;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,7 +44,15 @@ public class UnionRequestService extends SuperService {
 
     private static final List<String> exitKeys = List.of("signType", "sign", "payKey");
 
-    public SuperResponseModel requestAPI(String url,
+    /**
+     * 银联请求
+     *
+     * @param url
+     * @param data
+     * @param tClass
+     * @return
+     */
+    public SuperResponseModel requestUnionAPI(String url,
             Object data,
             Class<? extends SuperResponseModel> tClass) {
         RequestInfoSaveParam param = new RequestInfoSaveParam();
@@ -56,16 +66,45 @@ public class UnionRequestService extends SuperService {
             apiConfParam.setApiName(url);
             apiConfParam.setMethodType(MethodType.Json);
 
+            data = "A";
+//            String sign = sign(JSONUtil.parseObj(JSONUtil.toJsonStr(data)));
+            String sign = AesUtils.signData(String.valueOf(data));
+            log.info("sign: {}", sign);
+
+
             // 请求时间记时
             StopWatch stopWatch = new StopWatch();
             stopWatch.start();
+
+
+            String timestamp = DateUtils.paresTime(System.currentTimeMillis(), DateUtils.unionAuth);
+            String nonce = CommonUtil.UUID();
+            Map<String, Object> header = new HashMap<>();
+            String c = String.format("%s%s%s%s", UnionPaymentConfig.appId, timestamp, nonce, sign);
+
+            log.info("appId: {}", UnionPaymentConfig.appId);
+            log.info("timestamp: {}", timestamp);
+            log.info("nonce: {}", nonce);
+
+            String signature = AesUtils.signMacSHA256(c, UnionPaymentConfig.payKey);
+            log.info("signature: {}", signature);
+            String sig = String.format("AppId=%s,Timestamp=%s,Nonce=%s,Signature=%s",
+                    UnionPaymentConfig.appId, timestamp, nonce, signature);
+
+            header.put("OPEN-BODY-SIG", sig);
+
+            header.put("Authorization", sig);
+
+            header.put("AppId", UnionPaymentConfig.appId);
+            header.put("Timestamp", timestamp);
+            header.put("Nonce", nonce);
+            header.put("Signature", signature);
+
             // 发送请求
             HttpModel httpModel = HttpModel.builder()
                     .url(url).method(apiConfParam.getMethodType())
                     .charset("utf-8").body(data).build();
 
-            Map<String, Object> header = new HashMap<>();
-            header.put("Authorization", sign(JSONUtil.parseObj(JSONUtil.toJsonStr(data))));
             httpModel.setHeader(header);
             ResponseModel request = HttpClientUtil.request(httpModel);
 
@@ -77,6 +116,7 @@ public class UnionRequestService extends SuperService {
             } else {
                 BeanUtil.copyProperties(request.getBody(), responseModel);
             }
+            log.info("response: {}", responseModel.getErrCode());
             responseModel.setCode(code);
             stopWatch.stop();
             responseModel.setMillis(stopWatch.getTotalTimeMillis());

+ 23 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/utils/AesUtils.java

@@ -4,6 +4,8 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
 import java.security.MessageDigest;
 import java.util.Base64;
 
@@ -20,6 +22,15 @@ public class AesUtils {
         return toHexString(md.digest());
     }
 
+    @SneakyThrows
+    public static String signMacSHA256(String str, String key) {
+        Mac mac = Mac.getInstance("HmacSHA256");
+        mac.init(new SecretKeySpec(key.getBytes("utf-8"), "HmacSHA256"));
+        mac.update(str.getBytes("utf-8"));
+        byte[] arr = mac.doFinal();
+        return Base64.getEncoder().encodeToString(arr);
+    }
+
     public static String getMD5Str(String s) {
         try {
             MessageDigest md = MessageDigest.getInstance("MD5");
@@ -58,4 +69,16 @@ public class AesUtils {
         return str;
     }
 
+    public static String base64Decode(String str) {
+        if (StringUtils.isNotEmpty(str)) {
+            try {
+                byte[] decoded = Base64.getDecoder().decode(str.getBytes("utf-8"));
+                return new String(decoded);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return str;
+    }
+
 }