TRX 1 rok pred
rodič
commit
1bd0c05be7
13 zmenil súbory, kde vykonal 756 pridanie a 9 odobranie
  1. 40 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/GoodsParam.java
  2. 38 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/OrderQueryParam.java
  3. 104 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/OrderQueryResponse.java
  4. 100 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/PayNotifyResponse.java
  5. 62 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SenselessPayParam.java
  6. 71 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SenselessPayResponse.java
  7. 45 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/UacRefundParam.java
  8. 35 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/UacRefundQueryParam.java
  9. 91 0
      PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/UacRefundResponse.java
  10. 9 1
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/controller/unionFrictionlessPay/FrictionlessNotifyController.java
  11. 99 7
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionFrictionlessPayMainService.java
  12. 17 0
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionNotifyService.java
  13. 45 1
      PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/config/UnionFrictionlessPayApiConfig.java

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

@@ -0,0 +1,40 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class GoodsParam {
+
+    @Schema(description = "商品ID")
+    private String goodsId;
+
+    @Schema(description = "商品名称")
+    private String goodsName;
+
+    @Schema(description = "商品数量")
+    private Integer quantity;
+
+    @Schema(description = "商品单价(分)")
+    private Integer price;
+
+    @Schema(description = "商品分类")
+    private String goodsCategory;
+
+    @Schema(description = "商品说明")
+    private String body;
+
+    @Schema(description = "折扣")
+    private Integer discount;
+
+    @Schema(description = "单位")
+    private String unit;
+}

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

@@ -0,0 +1,38 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderQueryParam extends UnionSuperParam {
+
+    @Schema(description = "消息ID")
+    private String msgId;
+
+    @Schema(description = "消息类型, wx.h5EntrustSign:微信H5免密支付签约")
+    private String msgType;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "系统ID")
+    private String systemId;
+
+}

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

@@ -0,0 +1,104 @@
+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.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 交易查询 返回
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderQueryResponse extends SuperResponseModel {
+
+    @Schema(description = "消息ID,原样返回")
+    private String msgId;
+
+    @Schema(description = "商户名称")
+    private String merName;
+
+    @Schema(description = "链接系统")
+    private String connectSys;
+
+    @Schema(description = "银商商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "银行卡号")
+    private String bankCardNo;
+
+    @Schema(description = "银行信息")
+    private String bankInfo;
+
+    @Schema(description = "交易状态")
+    private String status;
+
+    @Schema(description = "平台流水号")
+    private String seqId;
+
+    @Schema(description = "清分ID")
+    private String settleRefId;
+
+    @Schema(description = "结算日期, 格式yyyy-MM-dd")
+    private String settleDate;
+
+    @Schema(description = "支付总金额")
+    private Integer totalAmount;
+
+    @Schema(description = "交易中可给用户开具发票的金额")
+    private Integer invoiceAmount;
+
+    @Schema(description = "优惠金额")
+    private Integer couponAmount;
+
+    @Schema(description = "实付金额")
+    private Integer buyerPayAmount;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "支付渠道商户号")
+    private String targetMid;
+
+    @Schema(description = "支付渠道列表")
+    private String billFunds;
+
+    @Schema(description = "支付渠道描述")
+    private String billFundsDesc;
+
+    @Schema(description = "商户附加数据")
+    private String attachedData;
+
+    @Schema(description = "第三方订单号")
+    private String targetOrderId;
+
+    @Schema(description = "支付时间, 格式yyyy-MM-dd HH:mm:ss")
+    private String payTime;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "业务类型")
+    private String instMid;
+
+    @Schema(description = "买家ID")
+    private String buyerId;
+
+    @Schema(description = "子买家ID 比如微信的subOpenId")
+    private String subBuyerId;
+
+    @Schema(description = "目标平台状态")
+    private String targetStatus;
+
+    @Schema(description = "目标平台代码")
+    private String targetSys;
+
+}

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

@@ -0,0 +1,100 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 扣款通知参数
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PayNotifyResponse {
+
+    @Schema(description = "商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "附加数据")
+    private String attachedData;
+
+    @Schema(description = "支付银行信息")
+    private String bankCardNo;
+
+    @Schema(description = "银行信息")
+    private String bankInfo;
+
+    @Schema(description = "资金渠道")
+    private String billFunds;
+
+    @Schema(description = "资金渠道说明")
+    private String billFundsDesc;
+
+    @Schema(description = "卖家ID")
+    private String buyerId;
+
+    @Schema(description = "买家用户名")
+    private String buyerUsername;
+
+    @Schema(description = "订单金额,单位分")
+    private Integer totalAmount;
+
+    @Schema(description = "网付计算的优惠金额,单位分")
+    private Integer couponAmount;
+
+    @Schema(description = "实付金额")
+    private Integer buyerPayAmount;
+
+    @Schema(description = "开票金额")
+    private Integer invoiceAmount;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "支付时间, 格式yyyy-MM-dd HH:mm:ss")
+    private String payTime;
+
+    @Schema(description = "支付银行卡参考号")
+    private String refId;
+
+    @Schema(description = "退款金额")
+    private String refundAmount;
+
+    @Schema(description = "退款说明")
+    private String refundDesc;
+
+    @Schema(description = "系统交易流水号")
+    private String seqId;
+
+    @Schema(description = "结算日期")
+    private String settleDate;
+
+    @Schema(description = "订单状态")
+    private String status;
+
+    @Schema(description = "卖家子ID")
+    private String subBuyerId;
+
+    @Schema(description = "渠道订单号")
+    private String targetOrderId;
+
+    @Schema(description = "支付渠道")
+    private String targetSys;
+
+    @Schema(description = "通知ID,通知唯一ID,重发通知的notifyId不变")
+    private String notifyId;
+
+    @Schema(description = "随机字段,参与签名")
+    private String key;
+
+    @Schema(description = "签名")
+    private String sign;
+
+}

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

@@ -0,0 +1,62 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 无感支付 申请扣款
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+public class SenselessPayParam extends UnionSuperParam {
+
+    @Schema(description = "消息ID")
+    private String msgId;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "银联无感支付签约协议号")
+    private String contractId;
+
+    @Schema(description = "银联无感支付签约模板ID")
+    private String planId;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "订单描述")
+    private String orderDesc;
+
+    @Schema(description = "订单金额")
+    private Integer totalAmount;
+
+    @Schema(description = "商品信息")
+    private List<GoodsParam> goods;
+
+    @Schema(description = "商户附加数据")
+    private String attachedData;
+
+    @Schema(description = "签约结果通知地址")
+    private String notifyUrl;
+
+    @Schema(description = "系统ID")
+    private String systemId;
+
+    @Schema(description = "签约类型, 不传默认为 NONE NONE:普通消费 COMPULSORY:支付并强制开通免密支付 OPTIONAL:支付并可选")
+    private String contractType;
+
+    @Schema(description = "订单过期时间, 订单过期时间,为空则使用系统默认过期时间(30分钟),格式yyyy-MM-dd HH:mm:ss")
+    private String expireTime;
+
+}

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

@@ -0,0 +1,71 @@
+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.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 申请扣款 返回
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SenselessPayResponse extends SuperResponseModel {
+
+    @Schema(description = "消息ID,原样返回")
+    private String msgId;
+
+    @Schema(description = "报文应答时间,格式yyyy-MM-dd HH:mm:ss")
+    private String responseTimeStamp;
+
+    @Schema(description = "银商商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "银联受理订单号")
+    private String relateSsn;
+
+    @Schema(description = "平台流水号")
+    private String seqId;
+
+    @Schema(description = "订单创建时间, 格式:yyyy-MM-dd HH:mm:ss 对应银联交易的报文请求时间,查询签约结果时使用")
+    private String orderCrtTime;
+
+    @Schema(description = "清分ID,如果来源方传了bankRefId就等于bankRefId,否则等于seqId")
+    private String settleRefId;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "支付渠道商户号,各渠道情况不同,酌情转换")
+    private String targetMid;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "商户附加数据")
+    private String attachedData;
+
+    @Schema(description = "订单金额,单位分")
+    private Integer totalAmount;
+
+    @Schema(description = "交易状态")
+    private String status;
+
+    @Schema(description = "链接系统")
+    private String connectSys;
+
+    @Schema(description = "目标平台代码")
+    private String targetSys;
+
+    @Schema(description = "目标平台状态")
+    private String targetStatus;
+
+}

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

@@ -0,0 +1,45 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.checkerframework.common.aliasing.qual.NonLeaked;
+
+/**
+ * 云闪付 申请退款
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UacRefundParam extends UnionSuperParam{
+    @Schema(description = "消息ID")
+    private String msgId;
+
+    @Schema(description = "商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "要退款的金额,单位分")
+    private Integer refundAmount;
+
+    @Schema(description = "退货说明")
+    private String refundDesc;
+
+    @Schema(description = "退货交易的订单号")
+    private String refundOrderId;
+
+    @Schema(description = "系统ID")
+    private String systemId;
+
+}

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

@@ -0,0 +1,35 @@
+package com.zhongshu.payment.client.payModel.unionFrictionlessPay.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 云闪付 申请退款 查询
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UacRefundQueryParam extends UnionSuperParam{
+    @Schema(description = "消息ID")
+    private String msgId;
+
+    @Schema(description = "商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "系统ID")
+    private String systemId;
+
+}

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

@@ -0,0 +1,91 @@
+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.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 云闪付 - 申请退款返回
+ *
+ * @author TRX
+ * @date 2024/8/28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UacRefundResponse extends SuperResponseModel {
+    @Schema(description = "消息ID,原样返回")
+    private String msgId;
+
+    @Schema(description = "报文应答时间")
+    private String responseTimeStamp;
+
+    @Schema(description = "商户名称")
+    private String merName;
+
+    @Schema(description = "银商商户号")
+    private String mid;
+
+    @Schema(description = "终端号")
+    private String tid;
+
+    @Schema(description = "商户订单号")
+    private String merOrderId;
+
+    @Schema(description = "请求系统预留字段")
+    private String srcReserve;
+
+    @Schema(description = "结算日期 格式yyyy-MM-dd")
+    private String settleDate;
+
+    @Schema(description = "平台流水号")
+    private String seqId;
+
+    @Schema(description = "交易状态")
+    private String status;
+
+    @Schema(description = "链接系统")
+    private String connectSys;
+
+    @Schema(description = "清分ID, 如果来源方传了bankRefId就等于bankRefId,否则等于seqId")
+    private String settleRefId;
+
+    @Schema(description = "银行信息")
+    private String bankInfo;
+
+    @Schema(description = "退款状态, SUCCESS-成功FAIL-失败PROCESSING-处理中UNKNOWN-未知")
+    private String refundStatus;
+
+    @Schema(description = "支付渠道商户号")
+    private String targetMid;
+
+    @Schema(description = "第三方订单号")
+    private String targetOrderId;
+
+    @Schema(description = "目标平台状态")
+    private String targetStatus;
+
+    @Schema(description = "目标平台代码")
+    private String targetSys;
+
+    @Schema(description = "支付总金额")
+    private Integer totalAmount;
+
+    @Schema(description = "总退款金额")
+    private Integer refundAmount;
+
+    @Schema(description = "退款渠道列表")
+    private String refundFunds;
+
+    @Schema(description = "退款渠道描述")
+    private String refundFundsDesc;
+
+    @Schema(description = "退货交易的订单号")
+    private String refundOrderId;
+
+    @Schema(description = "目标系统退货订单号")
+    private String refundTargetOrderId;
+
+}

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

@@ -30,10 +30,18 @@ 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);
+        unionNotifyService.signNotify(request);
+    }
+
+    //---------------------------通知 start-----------------------------
+    @Operation(summary = "支付-扣款通知回调")
     @PostMapping(value = "payNotify/{outTradeNo}", consumes = MediaType.APPLICATION_JSON_VALUE)
     public void payNotify(HttpServletRequest request, @PathVariable(name = "outTradeNo") String outTradeNo) {
         log.info("收到微信支付通知 appid:{}", outTradeNo);
-        unionNotifyService.signNotify(request);
+        unionNotifyService.payNotify(request);
     }
 
 }

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

@@ -67,7 +67,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
 
         SignParam signParam = new SignParam();
         signParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
-        String url = payApiConfig.getUlr(UnionFrictionlessPayApiConfig.sign);
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.sign);
         SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signParam, SuperResponseModel.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
@@ -113,7 +113,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     public ResultContent rescission(SignInParam param) {
         RescissionParam rescissionParam = new RescissionParam();
         rescissionParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
-        String url = payApiConfig.getUlr(UnionFrictionlessPayApiConfig.sign);
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.rescission);
         SuperResponseModel requestAPI = unionRequestService.requestAPI(url, rescissionParam, SuperResponseModel.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
@@ -132,7 +132,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         SignQueryParam signQueryParam = new SignQueryParam();
         signQueryParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
-        String url = payApiConfig.getUlr(UnionFrictionlessPayApiConfig.sign);
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.signQuery);
         SuperResponseModel requestAPI = unionRequestService.requestAPI(url, signQueryParam, SignQueryResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
@@ -142,21 +142,113 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 创建订单并申请扣款
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent createAndPayOrder(CreateOrderParam param) {
+        SenselessPayParam senselessPayParam = new SenselessPayParam();
+        senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPay);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, SenselessPayResponse.class);
+        if (requestAPI.isFailed()) {
+            return ResultContent.buildFail(requestAPI.getMsg());
+        }
+        SenselessPayResponse response = (SenselessPayResponse) requestAPI;
+
+        return ResultContent.buildSuccess();
+    }
 
     /**
-     * 创建支付渠道订单
+     * 创建订单并申请扣款
      *
      * @param param
      * @return
      */
-    public ResultContent createChannelOrder(OrderParam param) {
+    public ResultContent senselessPayAndOpen(CreateOrderParam param) {
+        SenselessPayParam senselessPayParam = new SenselessPayParam();
+        senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPayAndOpen);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, SenselessPayResponse.class);
+        if (requestAPI.isFailed()) {
+            return ResultContent.buildFail(requestAPI.getMsg());
+        }
+        SenselessPayResponse response = (SenselessPayResponse) requestAPI;
 
         return ResultContent.buildSuccess();
     }
 
-    public ResultContent createAndPayOrder(CreateOrderParam param) {
+    /**
+     * 云闪付 申请退款
+     * @param param
+     * @return
+     */
+    public ResultContent uacRefund(CreateOrderParam param) {
+        UacRefundParam senselessPayParam = new UacRefundParam();
+        senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
-        return ResultContent.buildFail("暂未实现");
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.uacRefund);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, senselessPayParam, UacRefundResponse.class);
+        if (requestAPI.isFailed()) {
+            return ResultContent.buildFail(requestAPI.getMsg());
+        }
+        UacRefundResponse response = (UacRefundResponse) requestAPI;
+
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 云闪付 申请退款
+     * @param param
+     * @return
+     */
+    public ResultContent uacRefundQuery(CreateOrderParam param) {
+        UacRefundQueryParam requestParam = new UacRefundQueryParam();
+        requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.uacRefundQuery);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, requestParam, UacRefundResponse.class);
+        if (requestAPI.isFailed()) {
+            return ResultContent.buildFail(requestAPI.getMsg());
+        }
+        UacRefundResponse response = (UacRefundResponse) requestAPI;
+
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 云闪付 申请退款
+     * @param param
+     * @return
+     */
+    public ResultContent orderQuery(CreateOrderParam param) {
+        OrderQueryParam requestParam = new OrderQueryParam();
+        requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+
+        String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.orderQuery);
+        SuperResponseModel requestAPI = unionRequestService.requestAPI(url, requestParam, OrderQueryResponse.class);
+        if (requestAPI.isFailed()) {
+            return ResultContent.buildFail(requestAPI.getMsg());
+        }
+        OrderQueryResponse response = (OrderQueryResponse) requestAPI;
+
+        return ResultContent.buildSuccess();
+    }
+
+
+    /**
+     * 创建支付渠道订单
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent createChannelOrder(OrderParam param) {
+
+        return ResultContent.buildSuccess();
     }
 
     public ResultContent payOrder(PayOrderParam param) {

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

@@ -2,6 +2,7 @@ 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.PayNotifyResponse;
 import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.SignNotifyParam;
 import jakarta.servlet.ServletInputStream;
 import jakarta.servlet.http.HttpServletRequest;
@@ -46,4 +47,20 @@ public class UnionNotifyService {
         return ResultContent.buildSuccess();
     }
 
+    @SneakyThrows
+    public ResultContent payNotify(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();
+        PayNotifyResponse notifyResponse = jsonHelper.toObject(body, PayNotifyResponse.class);
+
+        return ResultContent.buildSuccess();
+    }
+
 }

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

@@ -46,6 +46,21 @@ public class UnionFrictionlessPayApiConfig {
     // 签约状态查询
     public static String signQuery = "signQuery";
 
+    // 申请扣款
+    public static String senselessPay = "senselessPay";
+
+    // 支付并签约
+    public static String senselessPayAndOpen = "senselessPayAndOpen";
+
+    // 云闪付申请退款
+    public static String uacRefund = "uacRefund";
+
+    // 云闪付申请退款 状态查询
+    public static String uacRefundQuery = "refundQuery";
+
+    // 云闪付 订单查询
+    public static String orderQuery = "orderQuery";
+
     private static List<UnionPayApi> apis = new ArrayList<>();
 
     static {
@@ -94,11 +109,40 @@ public class UnionFrictionlessPayApiConfig {
                 .devUrl("https://test-api-open.chinaums.com/v1/inip/sign/uac/entrust-pay/sign-query")
                 .prodUrl("https://api-mop.chinaums.com/v1/inip/sign/uac/entrust-pay/sign-query")
                 .build());
+        // 申请扣款
+        apis.add(UnionPayApi.builder().apiKey(senselessPay)
+                .devUrl("https://test-api-open.chinaums.com/v1/netpay/uac/senseless-pay")
+                .prodUrl("https://api-mop.chinaums.com/v1/netpay/uac/senseless-pay")
+                .build());
+
+        // 支付并签约
+        apis.add(UnionPayApi.builder().apiKey(senselessPayAndOpen)
+                .devUrl("https://test-api-open.chinaums.com/v1/netpay/uac/senseless-pay-and-open")
+                .prodUrl("https://api-mop.chinaums.com/v1/netpay/uac/senseless-pay-and-open")
+                .build());
+
+        // 云闪付申请退款
+        apis.add(UnionPayApi.builder().apiKey(uacRefund)
+                .devUrl("https://test-api-open.chinaums.com/v1/netpay/uac/refund")
+                .prodUrl("https://api-mop.chinaums.com/v1/netpay/uac/refund")
+                .build());
+
+        // 云闪付申请退款
+        apis.add(UnionPayApi.builder().apiKey(uacRefundQuery)
+                .devUrl("https://test-api-open.chinaums.com/v1/netpay/uac/refund-query")
+                .prodUrl("https://api-mop.chinaums.com/v1/netpay/uac/refund-query")
+                .build());
+
+        // 云闪付 订单查询
+        apis.add(UnionPayApi.builder().apiKey(orderQuery)
+                .devUrl("https://test-api-open.chinaums.com/v1/netpay/uac/query")
+                .prodUrl("https://api-mop.chinaums.com/v1/netpay/uac/query")
+                .build());
 
 
     }
 
-    public String getUlr(String key) {
+    public String getUrl(String key) {
         if (StringUtils.isNotEmpty(key)) {
             Optional<UnionPayApi> opt = apis.stream().filter(it -> it.getApiKey().equals(key)).findFirst();
             if (opt.isPresent()) {