Procházet zdrojové kódy

支付接口切换

xdd před 1 měsícem
rodič
revize
bd72c0df62

+ 4 - 27
fs-admin/src/test/java/com/fs/store/controller/FsStorePaymentControllerTest.java

@@ -115,44 +115,21 @@ public class FsStorePaymentControllerTest {
     @Test
     public void refund(){
         String[] data = new String[]{
-                "1909861513640804352",
-//                "1909850673067851776",
-//                "1909850015832997888",
-//                "1909843803510931456"
-//                "1909829173233319936",
-//                "1909796083228213248",
-//                "1909793106169954304",
-//                "1909753328464560128",
-//                "1909728664442896384"
-//                "851491647274359744"
-//                "1909799684457627648"
-//                "1909589366116712448",
-//                "1909522277674778624",
-//                "1909492344919425024",
-//                "1909466851759357952",
-//                "1909427177938485248",
-//                "1909400759435264000",
-//                "1909368705347747840",
-//                "1909337288844771328",
-//                "1909330401881489408"
+                "1909907673596297216"
         };
         TzConfigInfoDTO tzConfigInfoDTO = TzConfigUtils.getConfig();
 
         for (String datum : data) {
-//            FsStorePayment payment = fsStorePaymentService.selectFsStorePaymentByCode(datum);
-            FsStorePayment payment = new FsStorePayment();
-            payment.setPayCode(datum);
-            payment.setPayMoney(BigDecimal.valueOf(0.1));
-
+            FsStorePayment payment = fsStorePaymentService.selectFsStorePaymentByCode(datum);
 
             RequestDTO<TzPayRefundDTO> requestDTO = new RequestDTO<TzPayRefundDTO>();
             TzPayRefundDTO tzPayRefundDTO = new TzPayRefundDTO();
             tzPayRefundDTO.setOldPayOutOrderNo(payment.getPayCode());
-            tzPayRefundDTO.setRefundOrderNo(payment.getPayCode());
+            tzPayRefundDTO.setRefundOrderNo(payment.getPayCode()+"1");
             tzPayRefundDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
             tzPayRefundDTO.setTrxSendTime(sdf.format(new Date()));
-            tzPayRefundDTO.setRefundOrdTransAmt(payment.getPayMoney());
+            tzPayRefundDTO.setRefundOrdTransAmt(payment.getPayMoney().subtract(BigDecimal.valueOf(0.1)));
             tzPayRefundDTO.setNotifyURL(tzConfigInfoDTO.getRefundNotifyUrl());
             requestDTO.setReqBody(tzPayRefundDTO);
             requestDTO.setReqHeader(TzReqHeaderDTO.getInstance(payment.getPayCode()));

+ 19 - 0
fs-api/src/main/java/com/fs/app/controller/PayController.java

@@ -13,6 +13,8 @@ import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.huifuPay.domain.HuiFuOnlinePay;
+import com.fs.huifuPay.domain.HuiFuOnlineRefund;
 import com.fs.huifuPay.domain.HuiFuResult;
 import com.fs.huifuPay.dto.*;
 import com.fs.pay.pay.domain.OrderCallback;
@@ -183,6 +185,23 @@ public class PayController {
         return "ok";
     }
 
+    @RequestMapping("/payOnlineNotifyUrl")
+    public String asyncHuFuOnlinePay(@RequestParam String resp_desc,@RequestParam String resp_code,@RequestParam String sign,@RequestParam String resp_data) {
+        HuiFuOnlinePay huFuResult = JSON.parseObject(resp_data, HuiFuOnlinePay.class);
+        return "ok";
+    }
+    @RequestMapping("/onlineRefund")
+    public String onlineRefund(@RequestParam String resp_desc,@RequestParam String resp_code,@RequestParam String sign,@RequestParam String resp_data) {
+        HuiFuOnlineRefund huFuResult = JSON.parseObject(resp_data, HuiFuOnlineRefund.class);
+        return "ok";
+    }
+
+    @RequestMapping("/refundNotifyUrl")
+    public String refundMessage(@RequestParam String resp_desc,@RequestParam String resp_code,@RequestParam String sign,@RequestParam String resp_data) {
+        System.out.println(resp_data);
+        return "ok";
+    }
+
 
     @ApiOperation("小雨点第三方支付回调")
     @PostMapping(value="/payNotify")

+ 15 - 0
fs-service-system/src/main/java/com/fs/pay/pay/util/PayUtil.java

@@ -8,6 +8,7 @@ import com.fs.store.domain.FsPayConfig;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -18,28 +19,39 @@ import org.apache.http.util.EntityUtils;
 
 import java.io.IOException;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.TreeMap;
 
 @SuppressWarnings("all")
+@Slf4j
 public class PayUtil {
 
 
     public static String endPayHttp(String url , Map<String,String> map){
+        log.info("==> 开始执行 endPayHttp 方法, URL: {}, 请求参数Map: {}", url, map);
+
         //获取sign
         String sign = sign(map);
+        log.info("--> 生成签名 sign: {}", sign);
+
         map.put("sign",sign);
         Gson gson = new Gson();
         String json = gson.toJson(map);
+        log.info("--> 构造请求体 JSON: {}", json);
         HttpPost httpPost = new HttpPost(url);
         httpPost.setHeader("Content-Type", "application/json");
+        log.info("--> 设置请求头: {}", Arrays.toString(httpPost.getAllHeaders()));
+
         StringEntity requestEntity = new StringEntity(json, "UTF-8");
         httpPost.setEntity(requestEntity);
         return  sendHttp(httpPost);
     }
 
     public static String sendHttp( HttpPost httpPost){
+        log.info("==> 开始执行 sendHttp 方法, 请求目标 URL: {}", httpPost.getURI());
+
         String responseText=null;
         // 创建HttpClient对象
         CloseableHttpClient httpClient = HttpClients.createDefault();
@@ -63,6 +75,9 @@ public class PayUtil {
                 e.printStackTrace();
             }
         }
+
+        log.info("<== sendHttp 方法执行结束, 返回响应文本: {}", responseText);
+
         return responseText;
     }
 

+ 1 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderService.java

@@ -256,6 +256,7 @@ public interface IFsStoreOrderService
      * @since 2025-03-22
      */
     R getMyStoreOrderById(Long orderId);
+    R getMyStoreOrderByIdOrOrderCode(Long orderId,String orderCode);
 
     /**
      * 编辑支付方式

+ 3 - 1
fs-service-system/src/main/java/com/fs/store/service/channel/YbPaymentHandler.java

@@ -40,6 +40,7 @@ public class YbPaymentHandler extends PaymentHandler{
         p.setAttach("");
         p.setStoreid("0");
         CreateWxOrderResult wxOrder = ybPayService.createWxOrder(p);
+        log.info("yb支付:{}", wxOrder);
         if(wxOrder.getStatus().equals("100")){
             FsStorePayment ment=new FsStorePayment();
             ment.setPaymentId(context.getPaymentId());
@@ -48,7 +49,8 @@ public class YbPaymentHandler extends PaymentHandler{
             return R.ok().put("payType",context.getPayType()).put("result",wxOrder.getPay_info());
         }
         else{
-            return R.error(wxOrder.getMessage());
+            throw new CustomException(String.format("支付出现异常: {}",wxOrder.getMessage()));
+//            return R.error(wxOrder.getMessage());
         }
     }
 

+ 58 - 1
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1639,7 +1639,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Override
     @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     //类型1支付回调 类型2货到付款
-    public synchronized String payConfirm(Integer type,Long orderId,String payCode,String tradeNo,String bankTransactionId,String bankSerialNo) {
+    public synchronized String  payConfirm(Integer type,Long orderId,String payCode,String tradeNo,String bankTransactionId,String bankSerialNo) {
         //支付订单
         try {
             FsStoreOrder order=null;
@@ -3276,6 +3276,63 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 .put("prescribe",prescribe);
     }
 
+    @Override
+    public R getMyStoreOrderByIdOrOrderCode(Long orderId, String orderCode) {
+        FsStoreOrder order;
+        if(orderCode != null){
+            order=orderService.selectFsStoreOrderByOrderCode(orderCode);
+        } else {
+            order=orderService.selectFsStoreOrderById(orderId);
+        }
+
+        order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
+        order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
+        List<FsStoreOrderItemVO> list=itemService.selectFsStoreOrderItemListByOrderId(orderId);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(order.getCreateTime());
+        String json=configService.selectConfigByKey("store.config");
+        StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
+        calendar.add(Calendar.MINUTE,config.getUnPayTime());
+        SimpleDateFormat format = new   SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String payLimitTime = format.format(calendar.getTime() );
+        FsPrescribe prescribe=null;
+        if(order.getPrescribeId()!=null){
+            prescribe=prescribeService.selectFsPrescribeById(order.getPrescribeId());
+        }
+        //处理是否可以申请售后
+        Integer isAfterSales=0;
+        if(order.getStatus().equals(OrderInfoEnum.STATUS_3.getValue())) {
+            //已完成订单 如果是私域用户就不允许售后
+            if(ObjectUtil.isNotNull(order.getCompanyId())){
+                isAfterSales=0;
+            } else {
+                isAfterSales=1;
+                if (order.getFinishTime() != null) {
+                    if (config.getStoreAfterSalesDay() != null && config.getStoreAfterSalesDay() > 0) {
+                        //判断完成时间是否超过指定时间
+                        Calendar calendarAfterSales = new GregorianCalendar();
+                        calendarAfterSales.setTime(order.getFinishTime());
+                        calendarAfterSales.add(calendarAfterSales.DATE, config.getStoreAfterSalesDay()); //把日期往后增加一天,整数  往后推,负数往前移动
+                        if (calendarAfterSales.getTime().getTime() < new Date().getTime()) {
+                            isAfterSales = 0;
+                        }
+                    }
+                }
+            }
+        }
+        else if(order.getStatus()==1||order.getStatus()==2){
+            isAfterSales=1;
+        }
+//        Integer payment = paymentService.selectFsStorePaymentByOrderIdExists(order.getId());
+
+        return R.ok().put("isAfterSales",isAfterSales)
+                .put("order",order)
+                .put("items",list)
+                .put("payLimitTime",payLimitTime)
+//                .put("showCancelOrder", (payment==null?0:payment) != 0)
+                .put("prescribe",prescribe);
+    }
+
     @Override
     @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     public R editPayType(FsStoreOrderPayParam param) {

+ 6 - 2
fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java

@@ -67,9 +67,13 @@ public class StoreOrderController extends  AppBaseController {
     @Login
     @ApiOperation("获取我的订单详情")
     @GetMapping("/getMyStoreOrderById")
-    public R getMyStoreOrderById(@RequestParam("orderId") Long orderId){
+    public R getMyStoreOrderById(@RequestParam(value = "orderId",required = false) Long orderId,
+                                 @RequestParam(value = "orderCode",required = false) String orderCode){
         logger.info("获取我的订单详情, 订单ID: {}", orderId);
-        return orderService.getMyStoreOrderById(orderId);
+        if(ObjectUtil.isEmpty(orderId) && ObjectUtil.isEmpty(orderCode)){
+            throw new CustomException("订单ID和订单号不能同时为空");
+        }
+        return orderService.getMyStoreOrderByIdOrOrderCode(orderId,orderCode);
     }
 
     @Login