TRX 1 year ago
parent
commit
aaf0a5bbda
19 changed files with 355 additions and 40 deletions
  1. 3 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SignParam.java
  2. 26 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SignResponse.java
  3. 12 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/cooperator/QueryWithdrawBalanceParam.java
  4. 2 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/feign/OrderPayFeignController.java
  5. 3 1
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/feign/WalletFeignController.java
  6. 3 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/unionFrictionlessPay/FrictionlessController.java
  7. 5 3
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/unionFrictionlessPay/FrictionlessNotifyController.java
  8. 8 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/CollectionIdDao.java
  9. 7 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/extend/CollectionIdDaoExtend.java
  10. 41 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/impl/CollectionIdDaoImpl.java
  11. 2 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/unionFrictionlessPay/UnionUserOpenInfoDao.java
  12. 17 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/domain/org/CollectionId.java
  13. 80 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/org/CollectionIdService.java
  14. 76 34
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionFrictionlessPayMainService.java
  15. 1 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionNotifyService.java
  16. 0 1
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionRequestService.java
  17. 25 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/config/UnionBalanceConfig.java
  18. 30 1
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/config/UnionPaymentConfig.java
  19. 14 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/utils/AesUtils.java

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

@@ -38,4 +38,7 @@ public class SignParam extends UnionSuperParam {
 
     @Schema(description = "商户微信小程序path, 交易发起场景03:小程序,必传用于签约完成/失败/取消后跳转")
     private String mchntWxMpPath;
+
+    @Schema(description = "客户信息 包括证件类型、证件号、姓名字段")
+    private String custInfo;
 }

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

@@ -0,0 +1,26 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import com.github.microservice.models.requestModel.SuperResponseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 签约请求结果
+ *
+ * @author TRX
+ * @date 2024/8/29
+ */
+@Data
+public class SignResponse extends SuperResponseModel {
+    @Schema(description = "报文应答时间 格式:yyyy-MM-dd HH:mm:ss,同请求报文,查询签约结果时使用")
+    private String responseTimeStamp;
+
+    @Schema(description = "银联受理订单号 商户推送订单后银联移动支付系统返回该流水号,商户调用支付控件时使用。交易成功时返回")
+    private String relateSsn;
+
+    @Schema(description = "云闪付小程序id 交易发起场景03/04,必传 用于商户跳转进行签约")
+    private String cqpMpAppId;
+
+    @Schema(description = "云闪付小程序path 交易发起场景03/04,必传 用于商户跳转进行签约")
+    private String cqpMpPath;
+}

+ 12 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/cooperator/QueryWithdrawBalanceParam.java

@@ -0,0 +1,12 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.cooperator;
+
+import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.UnionSuperParam;
+
+/**
+ * 查询商户可提现金额
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+public class QueryWithdrawBalanceParam extends UnionSuperParam {
+}

+ 2 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/feign/OrderPayFeignController.java

@@ -3,6 +3,7 @@ package com.zhongshu.payment.server.core.controller.feign;
 import com.github.microservice.core.delegate.DelegateMapping;
 import com.zhongshu.payment.client.service.OrderPayFeignService;
 import com.zhongshu.payment.client.service.WalletFeignService;
+import io.swagger.v3.oas.annotations.Hidden;
 import lombok.experimental.Delegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("manager/orderPay")
 @DelegateMapping(types = OrderPayFeignService.class)
+@Hidden
 public class OrderPayFeignController implements OrderPayFeignService {
 
     @Autowired

+ 3 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/feign/WalletFeignController.java

@@ -2,6 +2,7 @@ package com.zhongshu.payment.server.core.controller.feign;
 
 import com.github.microservice.core.delegate.DelegateMapping;
 import com.zhongshu.payment.client.service.WalletFeignService;
+import io.swagger.v3.oas.annotations.Hidden;
 import lombok.experimental.Delegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,7 +16,8 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("manager/wallet")
 @DelegateMapping(types = WalletFeignService.class)
-public class WalletFeignController implements WalletFeignService{
+@Hidden
+public class WalletFeignController implements WalletFeignService {
 
     @Autowired
     @Delegate

+ 3 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/unionFrictionlessPay/FrictionlessController.java

@@ -1,5 +1,7 @@
 package com.zhongshu.payment.server.core.controller.unionFrictionlessPay;
 
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.SignInParam;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.SignParam;
@@ -32,6 +34,7 @@ public class FrictionlessController {
 
     //---------------------------通知 start-----------------------------
     @Operation(summary = "无感支付开始签约")
+    @ResourceAuth(value = "user", type = AuthType.User)
     @PostMapping(value = "sign", consumes = MediaType.APPLICATION_JSON_VALUE)
     public ResultContent payNotify(@RequestBody @Valid SignInParam param) {
         return unionFrictionlessPayMainService.sign(param);

+ 5 - 3
PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/unionFrictionlessPay/FrictionlessNotifyController.java

@@ -30,9 +30,11 @@ public class FrictionlessNotifyController {
 
     //---------------------------通知 start-----------------------------
     @Operation(summary = "商户签约通知回调")
-    @PostMapping(value = "signNotify/{outTradeNo}", consumes = MediaType.APPLICATION_JSON_VALUE)
-    public void signNotify(HttpServletRequest request, @PathVariable(name = "outTradeNo") String outTradeNo) {
-        log.info("收到微信支付通知 appid:{}", outTradeNo);
+    @PostMapping(value = "signNotify/{contractNo}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public void signNotify(
+            HttpServletRequest request,
+            @PathVariable(name = "contractNo") String contractNo) {
+        log.info("收到微信支付通知 appid:{}", contractNo);
         unionNotifyService.signNotify(request);
     }
 

+ 8 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/CollectionIdDao.java

@@ -0,0 +1,8 @@
+package com.zhongshu.payment.server.core.dao;
+
+import com.zhongshu.payment.server.core.dao.extend.CollectionIdDaoExtend;
+import com.zhongshu.payment.server.core.domain.org.CollectionId;
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+
+public interface CollectionIdDao extends MongoDao<CollectionId>, CollectionIdDaoExtend {
+}

+ 7 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/extend/CollectionIdDaoExtend.java

@@ -0,0 +1,7 @@
+package com.zhongshu.payment.server.core.dao.extend;
+
+public interface CollectionIdDaoExtend {
+    Long getNextId(String collectionName);
+
+    Long getNextId(String oid, String collectionName);
+}

+ 41 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/impl/CollectionIdDaoImpl.java

@@ -0,0 +1,41 @@
+package com.zhongshu.payment.server.core.dao.impl;
+
+import com.zhongshu.payment.server.core.dao.extend.CollectionIdDaoExtend;
+import com.zhongshu.payment.server.core.domain.org.CollectionId;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.FindAndModifyOptions;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+
+public class CollectionIdDaoImpl implements CollectionIdDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Override
+    public Long getNextId(String collectionName) {
+        Query query = new Query(Criteria.where("collectionName").is(collectionName));
+        Update update = new Update();
+        update.inc("aid", 1);
+        FindAndModifyOptions options = new FindAndModifyOptions();
+        options.upsert(true);
+        options.returnNew(true);
+        CollectionId collectionId = mongoTemplate.findAndModify(query, update, options, CollectionId.class);
+        return collectionId.getAid();
+    }
+
+    @Override
+    public Long getNextId(String oid, String collectionName) {
+        Query query = new Query(Criteria.where("collectionName").is(collectionName).and("epId").is(oid));
+        Update update = new Update();
+        update.inc("aid", 1);
+        //update.set("epId",epId);
+        FindAndModifyOptions options = new FindAndModifyOptions();
+        options.upsert(true);
+        options.returnNew(true);
+        CollectionId collectionId = mongoTemplate.findAndModify(query, update, options, CollectionId.class);
+        return collectionId.getAid();
+    }
+}

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

@@ -14,4 +14,6 @@ public interface UnionUserOpenInfoDao extends MongoDao<UnionUserOpenInfo>, Union
 
     UnionUserOpenInfo findTopById(String id);
 
+    UnionUserOpenInfo findTopByUserId(String userId);
+
 }

+ 17 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/domain/org/CollectionId.java

@@ -0,0 +1,17 @@
+package com.zhongshu.payment.server.core.domain.org;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+@Document(collection = "collectionId")
+@Data
+public class CollectionId extends SuperEntity {
+
+    @Field("collectionName")
+    private String collectionName;
+
+    // 自增id
+    private Long aid;
+}

+ 80 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/org/CollectionIdService.java

@@ -0,0 +1,80 @@
+package com.zhongshu.payment.server.core.service.org;
+
+import com.zhongshu.payment.server.core.dao.CollectionIdDao;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author TRX
+ * @date 2024/6/28
+ */
+@Slf4j
+@Service
+public class CollectionIdService {
+
+    @Autowired
+    CollectionIdDao collectionIdDao;
+
+    private final static SimpleDateFormat shortSdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+    /**
+     * 生成编码 (每天从 0001开始)
+     *
+     * @param sign 开头,如:XS
+     * @return 如:XS202303290001
+     */
+    public String getNextNo(String sign) {
+        String collectionName = sign + shortSdf.format(new Date());
+        Long no = collectionIdDao.getNextId(collectionName);
+        if (no != null) {
+            return String.format("%s%s%04d", sign, shortSdf.format(new Date()), no);
+        }
+        return "";
+    }
+
+    public String getNextNo() {
+        String sign = "";
+        String collectionName = sign + shortSdf.format(new Date());
+        Long no = collectionIdDao.getNextId(collectionName);
+        if (no != null) {
+            return String.format("%s%s%04d", sign, shortSdf.format(new Date()), no);
+        }
+        return "";
+    }
+
+    /**
+     * 生成编码 (每天从 0001开始)
+     *
+     * @param oid  企业ID
+     * @param sign 开头,如:XS
+     * @return 如:XS202303290001
+     */
+    public String getNo(String oid, String sign) {
+        String collectionName = sign + shortSdf.format(new Date());
+        Long no = collectionIdDao.getNextId(oid, collectionName);
+        if (no != null) {
+            return String.format("%s%s%04d", sign, shortSdf.format(new Date()), no);
+        }
+        return "";
+    }
+
+    /**
+     * 生成编码 (一直累加)
+     *
+     * @param oid  企业ID
+     * @param sign 开头,如:XS
+     * @return 如:XS202303290001
+     */
+    public String getNextNo(String oid, String sign) {
+        Long no = collectionIdDao.getNextId(oid, sign);
+        if (no != null) {
+            return String.format("%s%s%04d", sign, shortSdf.format(new Date()), no);
+        }
+        return "";
+    }
+}

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

@@ -2,6 +2,7 @@ package com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.github.microservice.models.requestModel.SuperResponseModel;
 import com.github.microservice.models.type.PaymentType;
 import com.github.microservice.net.ResultContent;
@@ -16,17 +17,25 @@ 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.*;
+import com.zhongshu.payment.client.types.unionFrictionlessPayType.ContractState;
+import com.zhongshu.payment.client.types.unionFrictionlessPayType.UnionUserOpenType;
 import com.zhongshu.payment.server.core.dao.unionFrictionlessPay.UnionUserOpenInfoDao;
 import com.zhongshu.payment.server.core.domain.unionFrictionlessPay.UnionUserOpenInfo;
+import com.zhongshu.payment.server.core.service.org.CollectionIdService;
 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;
+import com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config.UnionPaymentConfig;
+import com.zhongshu.payment.server.core.utils.AesUtils;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 /**
  * 银联无感支付服务
  *
@@ -50,6 +59,9 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     @Autowired
     OrganizationFeignService organizationFeignService;
 
+    @Autowired
+    CollectionIdService collectionIdService;
+
     /**
      * 发起签约
      *
@@ -57,49 +69,76 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
      * @return
      */
     public ResultContent sign(SignInParam param) {
-//        String sign = unionRequestService.signParam(param);
-//        log.info("sign: {}", sign);
+        String userId = getCurrentUserId();
         String shopOid = param.getShopOid();
-        // 验证学校信息
-        UnionUserOpenInfo unionUserOpenInfo = new UnionUserOpenInfo();
-        unionUserOpenInfo.setShopOid(shopOid);
 
+        // 验证学校信息
+        String contractNo = collectionIdService.getNextNo();
+        UnionUserOpenInfo unionUserOpenInfo = unionUserOpenInfoDao.findTopByUserId(userId);
+        if (ObjectUtils.isEmpty(unionUserOpenInfo)) {
+            unionUserOpenInfo = new UnionUserOpenInfo();
+            unionUserOpenInfo.setShopOid(shopOid);
+            unionUserOpenInfo.setUserId(userId);
+            unionUserOpenInfo.setUnionUserOpenType(UnionUserOpenType.Shop);
+            unionUserOpenInfo.setContractState(ContractState.UNSIGNED);
+        }
+        unionUserOpenInfo.setContractNo(contractNo);
+        Date expireDate = new Date(System.currentTimeMillis() + UnionPaymentConfig.expireTime);
+        unionUserOpenInfo.setExpiredTime(expireDate.getTime());
 
+        String expireTime = DateUtils.paresTime(expireDate.getTime(), DateUtils.FORMAT_LONG);
         SignParam signParam = new SignParam();
         signParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+        signParam.setMid(UnionPaymentConfig.mid);
+        signParam.setPlanId(UnionPaymentConfig.planId);
+        signParam.setContractNo(contractNo);
+        signParam.setNotifyUrl(UnionPaymentConfig.notifyUrl + "/" + contractNo);
+        signParam.setExpireTime(expireTime);
+        signParam.setInvokeScene(UnionPaymentConfig.invokeScene);
+        signParam.setMchntWxMpAppId(UnionPaymentConfig.mchntWxMpAppId);
+        signParam.setMchntWxMpPath(UnionPaymentConfig.mchntWxMpPath);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("certifTp", "01");
+        jsonObject.set("certifId", "511304198608153312");
+        jsonObject.set("customerNm", "唐仁祥");
+        signParam.setCustInfo(AesUtils.base64Encode(jsonObject.toString()));
+
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.sign);
-        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signParam, SuperResponseModel.class);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signParam, SignResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
-
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.set("walletOption", "SINGLE");
-        jsonObject.set("billNo", "31940000201700002");
-        jsonObject.set("billDate", "2017-06-26");
-        jsonObject.set("sign", "2631915B7F7822C4B00A488A32E03764");
-        jsonObject.set("requestTimestamp", "2017-06-26 17:28:02");
-        jsonObject.set("instMid", "QRPAYDEFAULT");
-        jsonObject.set("msgSrc", "WWW.TEST.COM");
-        jsonObject.set("totalAmount", "1");
-
-        JSONArray array = new JSONArray();
-        JSONObject good = new JSONObject();
-        good.set("body", "微信二维码测试");
-        good.set("price", "1");
-        good.set("goodsName", "微信二维码测试");
-        good.set("goodsId", "1");
-        good.set("quantity", "1");
-        good.set("goodsCategory", "TEST");
-        array.add(good);
-        jsonObject.set("goods", array);
-
-        jsonObject.set("msgType", "bills.getQRCode");
-        jsonObject.set("mid", "898340149000005");
-        jsonObject.set("tid", "88880001");
-
-        String sign1 = unionRequestService.signByJSONObject(jsonObject);
-        log.info("sign1: {}", sign1);
+        SignResponse response = (SignResponse) requestAPI;
+        log.info("response: {}", JSONUtil.toJsonStr(response));
+
+        unionUserOpenInfoDao.save(unionUserOpenInfo);
+//        JSONObject jsonObject = new JSONObject();
+//        jsonObject.set("walletOption", "SINGLE");
+//        jsonObject.set("billNo", "31940000201700002");
+//        jsonObject.set("billDate", "2017-06-26");
+//        jsonObject.set("sign", "2631915B7F7822C4B00A488A32E03764");
+//        jsonObject.set("requestTimestamp", "2017-06-26 17:28:02");
+//        jsonObject.set("instMid", "QRPAYDEFAULT");
+//        jsonObject.set("msgSrc", "WWW.TEST.COM");
+//        jsonObject.set("totalAmount", "1");
+//
+//        JSONArray array = new JSONArray();
+//        JSONObject good = new JSONObject();
+//        good.set("body", "微信二维码测试");
+//        good.set("price", "1");
+//        good.set("goodsName", "微信二维码测试");
+//        good.set("goodsId", "1");
+//        good.set("quantity", "1");
+//        good.set("goodsCategory", "TEST");
+//        array.add(good);
+//        jsonObject.set("goods", array);
+//
+//        jsonObject.set("msgType", "bills.getQRCode");
+//        jsonObject.set("mid", "898340149000005");
+//        jsonObject.set("tid", "88880001");
+//
+//        String sign1 = unionRequestService.signByJSONObject(jsonObject);
+//        log.info("sign1: {}", sign1);
 
         return ResultContent.buildSuccess();
     }
@@ -184,6 +223,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
 
     /**
      * 云闪付 申请退款
+     *
      * @param param
      * @return
      */
@@ -203,6 +243,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
 
     /**
      * 云闪付 申请退款
+     *
      * @param param
      * @return
      */
@@ -222,6 +263,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
 
     /**
      * 云闪付 申请退款
+     *
      * @param param
      * @return
      */

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

@@ -42,6 +42,7 @@ public class UnionNotifyService {
             stringBuffer.append(s);
         }
         String body = stringBuffer.toString();
+        log.info("签约通知字符串: {}", body);
         SignNotifyParam signNotifyParam = jsonHelper.toObject(body, SignNotifyParam.class);
 
         return ResultContent.buildSuccess();

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

@@ -50,7 +50,6 @@ public class UnionRequestService extends SuperService {
         param.setParam(data);
         param.setApiParam(url);
         param.setUserId(getCurrentUserId());
-
         SuperResponseModel responseModel = null;
         try {
             responseModel = tClass.newInstance();

+ 25 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/config/UnionBalanceConfig.java

@@ -0,0 +1,25 @@
+package com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config;
+
+/**
+ * 悦融益接口测试环境参数
+ *
+ * @author TRX
+ * @date 2024/8/29
+ */
+public class UnionBalanceConfig {
+
+
+    public static final String appId = "10037e6f72da8f490172fa3cb8e80003";
+
+
+    public static final String appKey = "34ba53033a5242158b0e7144aa34a215";
+
+    // 系统编号
+    public static final String sysid = "FZ001_YRY";
+
+    // 商户号
+    public static final String mchntNo = "898460107800191";
+
+    // 多应用类型
+    public static final String appType = "74";
+}

+ 30 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/config/UnionPaymentConfig.java

@@ -1,12 +1,41 @@
 package com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config;
 
 /**
+ * 测试环境签约 无感支付
+ *
  * @author TRX
  * @date 2024/8/27
  */
 public class UnionPaymentConfig {
 
     // 无感支付 秘钥
-    public static final String payKey = "fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhkJwyrW2ysRR";
+    public static final String payKey = "GAhPWQ8D4hXanneneaydaHYHiwn64p7y3A46Jpss87aKWsy5";
+    //
+    public static final String appId = "10037e6f803bc8ab01805fd07db4000d";
+
+    public static final String appKey = "18a3a8d41b9f44d9acdf39c360f7a971";
+
+    // 商户代码 银商商户号
+    public static final String mid = "898100054115259";
+
+    // 终端号
+    public static final String tid = "00000001";
+
+    // 银联无感支付签约模板ID
+    public static final String planId = "d2041b5c28474a2c9bb8b70128d71160";
+
+    public static final String msgSrcId = "103A";
+
+    public static final String notifyUrl = "https://api.dev.qk.zonelife.cn/paymentserver-trx/frictionless/notify/signNotify";
+
+    // 过期时间
+    public static final long expireTime = 30 * 60 * 1000l;
+
+    // 交易发起场景 01:APP 03:小程序 04:公众号 缺省值:01:APP
+    public static final String invokeScene = "03";
+
+    public static final String mchntWxMpAppId = "wx3be1d6d84d46cdf7";
+
+    public static final String mchntWxMpPath = "/page/signResult";
 
 }

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

@@ -2,8 +2,10 @@ package com.zhongshu.payment.server.core.utils;
 
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 
 import java.security.MessageDigest;
+import java.util.Base64;
 
 import static org.apache.tomcat.util.buf.HexUtils.toHexString;
 
@@ -44,4 +46,16 @@ public class AesUtils {
         return ret.toString();
     }
 
+    public static String base64Encode(String str) {
+        if (StringUtils.isNotEmpty(str)) {
+            try {
+                byte[] encoded = Base64.getEncoder().encode(str.getBytes("utf-8"));
+                return new String(encoded);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return str;
+    }
+
 }