TRX 1 vuosi sitten
vanhempi
commit
91cd567fbf

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

@@ -97,4 +97,7 @@ public class PayNotifyResponse {
     @Schema(description = "签名")
     private String sign;
 
+    @Schema(description = "借贷记卡信息 DEBIT_CARD(借记卡);CREDIT_CARD(贷记卡)")
+    private String cardAttr;
+
 }

+ 35 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/unionFrictionlessPay/model/SenselessPayAndOpenParam.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;
+import org.checkerframework.common.aliasing.qual.NonLeaked;
+
+/**
+ * 申请扣款并开通
+ *
+ * @author TRX
+ * @date 2024/9/3
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SenselessPayAndOpenParam extends SenselessPayParam {
+
+    @Schema(description = "客户信息 包括证件类型、证件号、姓名字段, 格式如下:{certifTp=值&certifId=值&customerNm=值},整体做Base64编码。 其中certifTp证件类型取值: 01:身份证 02:军官证 03:护照 04:港澳居民来往内地通行证; 05: 台湾居民来往大陆通行证; 06:警官证 07:士兵证 09:外国护照 12:港澳居民居住证 13:台湾居民居住证 99:其它证件")
+    private String custInfo;
+
+    @Schema(description = "优惠码 云闪付优惠码")
+    private String discountCode;
+
+    @Schema(description = "交易发起场景 01:app 03:小程序 04:公众号 缺省值为01")
+    private String invokeScene;
+
+    @Schema(description = "商户微信appId 商家的微信小程序或公众号的appId,交易发起场景为小程序或公众号时必填。")
+    private String mchntWxMpAppId;
+
+    @Schema(description = "商户小程序path 用于签约完成/失败/取消后使用微信接口navigateToMiniProgram跳转,不上送则使用navigateBackMiniProgram接口返回上一个小程序")
+    private String mchntWxMpPath;
+
+}

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

@@ -0,0 +1,24 @@
+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 SenselessPayAndOpenResponse extends SenselessPayResponse {
+
+    @Schema(description = "云闪付小程序appId 云闪付小程序id 交易发起场景03/04,必传 用于商户跳转进行签约")
+    private String cqpMpAppId;
+
+    @Schema(description = "云闪付小程序path 交易发起场景03/04,必传 用于商户跳转进行签约")
+    private String cqpMpPath;
+
+}

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

@@ -233,7 +233,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
 
 
     /**
-     * 创建订单并申请扣款 /v1/netpay/uac/senseless-pay
+     * 创建本地订单并申请扣款 /v1/netpay/uac/senseless-pay
      *
      * @param param
      * @return
@@ -298,21 +298,21 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     }
 
     /**
-     * 创建订单并申请扣款
+     * 创建订单并申请扣款 支付并签约 /v1/netpay/uac/senseless-pay-and-open
      *
      * @param param
      * @return
      */
     public ResultContent senselessPayAndOpen(CreateOrderParam param) {
-        SenselessPayParam senselessPayParam = new SenselessPayParam();
-        senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+        SenselessPayAndOpenParam requestParam = new SenselessPayAndOpenParam();
+        requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
 
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPayAndOpen);
-        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, senselessPayParam, SenselessPayResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, requestParam, SenselessPayResponse.class);
         if (requestAPI.isFailed()) {
             return ResultContent.buildFail(requestAPI.getMsg());
         }
-        SenselessPayResponse response = (SenselessPayResponse) requestAPI;
+        SenselessPayAndOpenResponse response = (SenselessPayAndOpenResponse) requestAPI;
 
         return ResultContent.buildSuccess();
     }
@@ -357,7 +357,7 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     }
 
     /**
-     * 云闪付 申请退款查询 v1/netpay/refund-query
+     * 云闪付 申请退款查询 /v1/netpay/refund-query
      *
      * @param param
      * @return

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

@@ -165,6 +165,12 @@ public class UnionNotifyService extends SuperService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 扣款结果通知
+     *
+     * @param request
+     * @return
+     */
     @SneakyThrows
     public ResultContent payNotify(HttpServletRequest request) {
         ServletInputStream inputStream = request.getInputStream();
@@ -176,7 +182,30 @@ public class UnionNotifyService extends SuperService {
             stringBuffer.append(s);
         }
         String body = stringBuffer.toString();
-        PayNotifyResponse notifyResponse = jsonHelper.toObject(body, PayNotifyResponse.class);
+        log.info("body: {}", body);
+//        PayNotifyResponse notifyResponse = jsonHelper.toObject(body, PayNotifyResponse.class);
+
+
+        Map<String, String> header = new HashMap<>();
+        log.info("stringBuffer: {}", stringBuffer.toString());
+        Enumeration<String> exception = request.getHeaderNames();
+        while (exception.hasMoreElements()) {
+            String key = exception.nextElement();
+            String value = request.getHeader(key);
+            log.info("key: {}, value: {}", key, value);
+            header.put(key, value);
+        }
+
+        String authorization = request.getHeader("X-Authorization");
+        log.info("authorization: {}", authorization);
+        Map<String, String[]> map = request.getParameterMap();
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        map.forEach((String key, String[] values) -> {
+            log.info("key: {}, values: {}", key, values);
+            paramMap.put(key, values[0]);
+        });
+        JSONObject jsonObject = new JSONObject(paramMap);
+        PayNotifyResponse notifyResponse = JSONUtil.toBean(jsonObject, PayNotifyResponse.class);
 
         return ResultContent.buildSuccess();
     }

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

@@ -22,6 +22,9 @@ public class UnionFrictionlessPayConfig {
     @Schema(description = "签约状态通知地址")
     private String notifyUrl = "";
 
+    @Schema(description = "支付结果通知地址")
+    private String payNotifyUrl = "";
+
     @Schema(description = "无感支付 秘钥 测试环境通知加密密钥")
     private String notifySecret;