TRX 1 жил өмнө
parent
commit
ff37bcc89c

+ 28 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SignNotifyParam.java

@@ -0,0 +1,28 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import lombok.Data;
+
+/**
+ * 签约回调的数据
+ *
+ * @author TRX
+ * @date 2024/8/27
+ */
+@Data
+public class SignNotifyParam {
+
+    private String requestTimestamp;
+
+    private String mid;
+
+    private String contractNo;
+
+    private String contractId;
+
+    private String contractState;
+
+    private String contractSignedTime;
+
+    private String contractExpiredTime;
+
+}

+ 52 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/UnionUserOpenInfoModel.java

@@ -0,0 +1,52 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.payment.client.types.unionFrictionlessPayType.UnionUserOpenType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/8/27
+ */
+@Data
+public class UnionUserOpenInfoModel extends SuperModel {
+    @Schema(description = "签约类型")
+    private UnionUserOpenType unionUserOpenType;
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "商户代码")
+    private String mid;
+
+    @Schema(description = "商户oid")
+    private String shopOid;
+
+    @Schema(description = "商户签约协议号(本地生成的唯一号)")
+    private String contractNo;
+
+    @Schema(description = "银商免密支付签约协议号")
+    private String contractId;
+
+    @Schema(description = "签约状态,通知商户,必传。UNSIGNED-未签约 SIGNED-已签约 RESCISSION-已解约 ELETING_CONTRACT-解约中 UNKNOWN-未知")
+    private String contractState;
+
+    @Schema(description = "签约时间")
+    private Long signedTime;
+
+    @Schema(description = "协议签约时间,格式:yyyy-MM-dd HH:mm:ss")
+    private String contractSignedTime;
+
+    @Schema(description = "协议到期时间,格式:yyyy-MM-dd HH:mm:ss")
+    private String contractExpiredTime;
+
+    @Schema(description = "签约订单过期时间")
+    private Long expiredTime;
+
+    @Schema(description = "签约参数")
+    private Object param;
+
+    @Schema(description = "签约返回参数")
+    private Object result;
+}

+ 31 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/UnionUserOpenInfoSearch.java

@@ -0,0 +1,31 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.payment.client.types.unionFrictionlessPayType.UnionUserOpenType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/8/27
+ */
+@Data
+public class UnionUserOpenInfoSearch extends SuperSearch {
+    @Schema(description = "签约类型")
+    private UnionUserOpenType unionUserOpenType;
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "商户代码")
+    private String mid;
+
+    @Schema(description = "商户oid")
+    private String shopOid;
+
+    @Schema(description = "商户签约协议号(本地生成的唯一号)")
+    private String contractNo;
+
+    @Schema(description = "银商免密支付签约协议号")
+    private String contractId;
+}

+ 17 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/unionFrictionlessPay/UnionUserOpenInfoDao.java

@@ -0,0 +1,17 @@
+package com.zhongshu.payment.server.core.dao.unionFrictionlessPay;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.payment.server.core.dao.unionFrictionlessPay.extend.UnionUserOpenInfoDaoExtend;
+import com.zhongshu.payment.server.core.domain.unionFrictionlessPay.UnionUserOpenInfo;
+
+/**
+ * 卡
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface UnionUserOpenInfoDao extends MongoDao<UnionUserOpenInfo>, UnionUserOpenInfoDaoExtend {
+
+    UnionUserOpenInfo findTopById(String id);
+
+}

+ 17 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/unionFrictionlessPay/extend/UnionUserOpenInfoDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zhongshu.payment.server.core.dao.unionFrictionlessPay.extend;
+
+import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.UnionUserOpenInfoSearch;
+import com.zhongshu.payment.server.core.domain.unionFrictionlessPay.UnionUserOpenInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface UnionUserOpenInfoDaoExtend {
+
+    Page<UnionUserOpenInfo> page(Pageable pageable, UnionUserOpenInfoSearch param);
+
+}

+ 74 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/unionFrictionlessPay/impl/UnionUserOpenInfoDaoImpl.java

@@ -0,0 +1,74 @@
+package com.zhongshu.payment.server.core.dao.unionFrictionlessPay.impl;
+
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.zhongshu.card.client.dao.BaseImpl;
+import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.UnionUserOpenInfoSearch;
+import com.zhongshu.payment.server.core.dao.unionFrictionlessPay.extend.UnionUserOpenInfoDaoExtend;
+import com.zhongshu.payment.server.core.domain.unionFrictionlessPay.UnionUserOpenInfo;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class UnionUserOpenInfoDaoImpl extends BaseImpl implements UnionUserOpenInfoDaoExtend {
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<UnionUserOpenInfo> page(Pageable pageable, UnionUserOpenInfoSearch param) {
+        Criteria criteria = new Criteria();
+
+        if (param.getUnionUserOpenType() != null) {
+            criteria.and("unionUserOpenType").is(param.getUnionUserOpenType());
+        }
+
+        if (ObjectUtils.isNotEmpty(param.getShopOid())) {
+            criteria.and("shopOid").is(param.getShopOid());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+
+        if (StringUtils.isNotEmpty(param.getUserId())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUserId() + ".*$");
+            criterias.add(Criteria.where("userId").is(pattern));
+        }
+
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+//        if (StringUtils.isNotEmpty(param.getKeyWord())) {
+//            Pattern pattern = Pattern.compile("^.*" + param.getKeyWord() + ".*$");
+//            criteria.orOperator(
+//                    Criteria.where("name").regex(pattern),
+//                    Criteria.where("code").regex(pattern),
+//                    Criteria.where("userId").regex(pattern),
+//                    Criteria.where("userName").regex(pattern),
+//                    Criteria.where("phone").regex(pattern)
+//            );
+//        }
+
+        criteria.and("isDelete").is(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, UnionUserOpenInfo.class);
+    }
+
+}

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

@@ -14,6 +14,7 @@ import com.zhongshu.payment.client.payModel.commn.CreateOrderParam;
 import com.zhongshu.payment.client.payModel.commn.PayNotifyParam;
 import com.zhongshu.payment.client.payModel.commn.PayOrderParam;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.SignParam;
+import com.zhongshu.payment.server.core.domain.unionFrictionlessPay.UnionUserOpenInfo;
 import com.zhongshu.payment.server.core.service.pay.SuperPayService;
 import com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config.UnionFrictionlessPayApiConfig;
 import com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config.UnionFrictionlessPayConfig;
@@ -40,6 +41,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     @Autowired
     UnionFrictionlessPayApiConfig payApiConfig;
 
+
     /**
      * 发起签约
      *

+ 23 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionNotifyService.java

@@ -1,10 +1,18 @@
 package com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay;
 
+import com.github.microservice.core.helper.JsonHelper;
 import com.github.microservice.net.ResultContent;
+import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.SignNotifyParam;
+import jakarta.servlet.ServletInputStream;
 import jakarta.servlet.http.HttpServletRequest;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
 /**
  * @author TRX
  * @date 2024/8/26
@@ -13,13 +21,28 @@ import org.springframework.stereotype.Service;
 @Service
 public class UnionNotifyService {
 
+    @Autowired
+    JsonHelper jsonHelper;
+
     /**
      * 无感支付签约回调
      *
      * @param request
      * @return
      */
+    @SneakyThrows
     public ResultContent signNotify(HttpServletRequest request) {
+        ServletInputStream inputStream = request.getInputStream();
+        StringBuffer stringBuffer = new StringBuffer();
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+        String s;
+        //读取回调请求体
+        while ((s = bufferedReader.readLine()) != null) {
+            stringBuffer.append(s);
+        }
+        String body = stringBuffer.toString();
+        SignNotifyParam signNotifyParam = jsonHelper.toObject(body, SignNotifyParam.class);
+
 
         return ResultContent.buildSuccess();
     }

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

@@ -112,30 +112,9 @@ public class UnionRequestService extends SuperService {
             }
         }
 
-        StringBuffer signPara = new StringBuffer();//代签名的字符串
-        StringBuffer reqPara = new StringBuffer();// 组织请求参数
+        StringBuffer signPara = buildSignStr(entries); // 代签名的字符串
+        StringBuffer reqPara = signPara; // 组织请求参数
 
-        for (String key : map.keySet()) {
-            Object o = map.get(key);
-            String val = "";
-            if (o instanceof ArrayList) {
-                val = JSONUtil.toJsonStr(o);
-            } else if (o instanceof JSONArray) {
-                val = JSONUtil.toJsonStr(o);
-            } else if (o instanceof JSONObject) {
-                val = JSONUtil.toJsonStr(o);
-            } else {
-                val = String.valueOf(map.get(key));
-            }
-//            val = URLEncoder.encode(val, "UTF-8");
-            if (signPara.length() == 0) {
-                signPara.append(key + "=" + val);
-                reqPara.append(key + "=" + val);
-            } else {
-                signPara.append("&" + key + "=" + val);
-                reqPara.append("&" + key + "=" + val);
-            }
-        }
         String signStr = signPara.toString() + UnionPaymentConfig.payKey;
         log.info("s: {}", signStr);
         String sign = AesUtils.signData(signStr);
@@ -149,14 +128,20 @@ public class UnionRequestService extends SuperService {
 
     @SneakyThrows
     public String sign(JSONObject entries) {
+        String signStr = buildSignStr(entries) + UnionPaymentConfig.payKey;
+        String sign = AesUtils.signData(signStr);
+        log.info("sign: {}", sign);
+        return sign;
+    }
+
+    private StringBuffer buildSignStr(JSONObject entries) {
         TreeMap<String, Object> map = new TreeMap<>();
         for (String key : entries.keySet()) {
             if (!ObjectUtil.isEmpty(entries.get(key)) && !"sign".equals(key)) {
                 map.put(key, String.valueOf(entries.get(key)));
             }
         }
-        StringBuffer signPara = new StringBuffer();//代签名的字符串
-
+        StringBuffer signPara = new StringBuffer(); // 代签名的字符串
         for (String key : map.keySet()) {
             Object o = map.get(key);
             String val = "";
@@ -176,10 +161,7 @@ public class UnionRequestService extends SuperService {
                 signPara.append("&" + key + "=" + val);
             }
         }
-        String signStr = signPara.toString() + UnionPaymentConfig.payKey;
-        String sign = AesUtils.signData(signStr);
-        log.info("sign: {}", sign);
-        return sign;
+        return signPara;
     }
 
 }