igl 4 bulan lalu
induk
melakukan
2bc54683cb
20 mengubah file dengan 157 tambahan dan 75 penghapusan
  1. 7 1
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/OmsOrderClient.java
  2. 11 3
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/constant/TradeConstant.java
  3. 1 7
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/MerchantApplyRecordParam.java
  4. 2 2
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/OmsOrderModifyParam.java
  5. 17 0
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/SxyNotifyParam.java
  6. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/MerchantController.java
  7. 11 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/OmsOrderController.java
  8. 3 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java
  9. 2 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrder.java
  10. 1 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/CustomConfig.java
  11. 12 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/TradeHandle.java
  12. 2 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantApplyRecordService.java
  13. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java
  14. 3 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/OmsOrderService.java
  15. 2 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/OnlinePayService.java
  16. 4 10
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantApplyRecordServiceImpl.java
  17. 1 5
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  18. 33 6
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java
  19. 37 34
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OnlinePayServiceImpl.java
  20. 6 0
      vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

+ 7 - 1
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/OmsOrderClient.java

@@ -5,12 +5,12 @@ import com.chelvc.cloud.vehicle.client.dto.OmsOrderDTO;
 import com.chelvc.cloud.vehicle.client.dto.OmsOrderDetailDTO;
 import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.wechat.WechatUnifiedOrder;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.cloud.openfeign.SpringQueryMap;
 import org.springframework.web.bind.annotation.*;
-
 import java.util.Map;
 
 /**
@@ -127,4 +127,10 @@ public interface OmsOrderClient {
      */
     @GetMapping("/omsOrder/getOrderDetail")
     OmsOrderDetailDTO getOrderDetail(@RequestParam("orderSn") Long orderSn,@RequestParam("merchantId") Long merchantId) ;
+
+    /**
+     * 订单支付回调
+     */
+    @PostMapping("/order/notify")
+    void orderNotify(@RequestBody SxyNotifyParam param);
 }

+ 11 - 3
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/constant/TradeConstant.java

@@ -7,6 +7,14 @@ public interface TradeConstant {
      */
     static final String PARTNER_ID = "893951545";
 
+    static final String APPID = "wx593877b3c990b15c";
+
+    static final String MCH_ID = "1692584316";
+
+    /**
+     *
+     */
+
     /**
      * 提现url
      */
@@ -40,13 +48,13 @@ public interface TradeConstant {
     /**
      * 下单通知地址
      */
-    static final String ORDER_NOTIFY_URL = "";
+    static final String ORDER_NOTIFY_URL = "http://igl611.a1.luyouxia.net:20487";
     /**
      * 下单回调地址
      */
-    static final String ORDER_CALLBACKURL = "";
+    static final String ORDER_CALLBACKURL = "http://igl611.a1.luyouxia.net:20487/maintain/order/notify";
     /**
-     * (直连)
+     * (直连) 	微信小程序
      */
     static final String MINIAPPS_WEIXIN_PAY_P2P = "MINIAPPS-WEIXIN_PAY-P2P";
     /**

+ 1 - 7
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/MerchantApplyRecordParam.java

@@ -4,16 +4,10 @@ import lombok.Data;
 import java.io.Serializable;
 
 @Data
-public class MerchantApplyRecordParam implements Serializable {
+public class MerchantApplyRecordParam extends SxyNotifyParam implements Serializable {
 
     private static final long serialVersionUID = -2573234532369937880L;
 
-    private String merchantId;
-
-    private String data;
-
-    private String encryptKey;
-
     /**
      * 请求号
      */

+ 2 - 2
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/OmsOrderModifyParam.java

@@ -9,7 +9,7 @@ import java.util.List;
 
 /**
  * 订单对象 oms_order
- * 
+ *
  * @author liude
  * @date 2023-11-08
  */
@@ -34,7 +34,7 @@ public class OmsOrderModifyParam implements Serializable
     private Integer useIntegration;
     /**
      * 支付方式
-     * 支付方式:0->未支付;1->支付宝;2->微信
+     * 支付方式:0->未支付;1->支付宝;2->微信;3->首信易
      */
     private Integer payType;
     /**

+ 17 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/SxyNotifyParam.java

@@ -0,0 +1,17 @@
+package com.chelvc.cloud.vehicle.client.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SxyNotifyParam implements Serializable {
+
+    private static final long serialVersionUID = -257323453435637880L;
+
+    private String merchantId;
+
+    private String data;
+
+    private String encryptKey;
+}

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/MerchantController.java

@@ -285,7 +285,7 @@ public class MerchantController {
      *
      */
     @PostMapping("/merchant/apply/notify")
-    public void merchantApplyNotify(@RequestBody MerchantApplyRecordParam param) {
+    public void merchantApplyNotify(@RequestBody SxyNotifyParam param) {
         merchantService.merchantApplyNotify(param);
     }
 }

+ 11 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/OmsOrderController.java

@@ -7,6 +7,7 @@ import com.chelvc.cloud.vehicle.client.dto.OmsOrderDTO;
 import com.chelvc.cloud.vehicle.client.dto.OmsOrderDetailDTO;
 import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.server.service.OmsOrderService;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.wechat.WechatUnifiedOrder;
@@ -19,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * 订单Service接口
  *
@@ -165,4 +168,12 @@ public class OmsOrderController {
     public OmsOrderDetailDTO getOrderDetail(@RequestParam("orderSn") Long orderSn,@RequestParam("merchantId") Long merchantId) {
         return omsOrderService.getOraderDetail(orderSn,merchantId);
     }
+
+    /**
+     * 订单支付回调
+     */
+    @PostMapping("/order/notify")
+    public void orderNotify(@RequestBody SxyNotifyParam param){
+        omsOrderService.orderNotify(param);
+    }
 }

+ 3 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java

@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -126,4 +127,6 @@ public interface OmsOrderMapper extends EnhanceMapper<OmsOrder>
 
 
     Integer countReservationByOrderId(@Param("orderId") Long orderId);
+
+    void updateStatus(@Param("id")Long id, @Param("status")Integer status, @Param("updateTime")Date updateTime);
 }

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrder.java

@@ -12,7 +12,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 /**
  * 订单对象 oms_order
- * 
+ *
  * @author liude
  * @date 2023-11-08
  */
@@ -70,7 +70,7 @@ public class OmsOrder extends ModifyEntity<Long>
     /** 订单来源:0->PC订单;1->app订单 */
     private Integer sourceType;
 
-    /** 订单状态:0->待付款;1-已付款;2->待发货;3->已发货;4->已完成;5->已关闭;6->无效订单 */
+    /** 订单状态:0->待付款;1-已付款;2->待发货;3->已发货;4->已完成;5->已关闭;6->无效订单;7->已取消;8->支付失败 */
     private Integer status;
 
     /** 订单类型:0->正常订单;1->秒杀订单 */

+ 1 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/CustomConfig.java

@@ -19,6 +19,7 @@ public class CustomConfig {
         map.put("http.content.type.v4", "application/vnd.5upay-v4.0+json");
         map.put("893951545.client.private.key.path", "F:/workspace/after/car/vehicle/vehicle-server/src/main/webapp/cfca/client.pfx");
         map.put("893951545.client.private.key.password", "123456");
+        map.put("onlinepay.order.url", "https://apis.5upay.com/onlinePay/order");
         map.put("onlinepay.query.url", "https://apis.5upay.com/onlinePay/query");
         map.put("ehking.sdk.net.client.defaultConnectTimeout", "30000");
         map.put("ehking.sdk.net.client.defaultReadTimeout", "30000");

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/TradeHandle.java

@@ -1,9 +1,11 @@
 package com.chelvc.cloud.vehicle.server.handle;
 
 import com.alibaba.fastjson.JSONObject;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.client.util.JsonBuilder;
 import com.chelvc.cloud.vehicle.client.util.MyExecuter;
 import com.upay.sdk.ConfigurationUtils;
+import com.upay.sdk.core.CipherWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.configuration.MapConfiguration;
 
@@ -24,6 +26,16 @@ public class TradeHandle {
         return rawRespJsonData;
     }
 
+    public static JSONObject decrypt(SxyNotifyParam param){
+        JSONObject responseData = new JSONObject();
+        responseData.put("merchantId", param.getMerchantId());
+        responseData.put("partnerId", null);
+        responseData.put("encryptKey", param.getEncryptKey());
+        responseData.put("data", param.getData());
+        //解密
+        return CipherWrapper.bothDecryptWrap(responseData);
+    }
+
     public static void main(String[] args) {
 
         Map<String, Object> map = new HashMap<>();

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantApplyRecordService.java

@@ -1,12 +1,12 @@
 package com.chelvc.cloud.vehicle.server.service;
 
 
-import com.chelvc.cloud.vehicle.client.param.MerchantApplyRecordParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.server.entity.MerchantApplyRecord;
 
 public interface MerchantApplyRecordService {
 
     int insert(MerchantApplyRecord record);
 
-    void updateByNotify(MerchantApplyRecordParam param);
+    void updateByNotify(SxyNotifyParam param);
 }

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java

@@ -236,7 +236,7 @@ public interface MerchantService extends IService<Merchant> {
 
     MerchantDTO queryCheck(Long merchantId, Long userId);
 
-    void merchantApplyNotify(MerchantApplyRecordParam param);
+    void merchantApplyNotify(SxyNotifyParam param);
 
     Merchant queryByApplicant(Long applicant);
 }

+ 3 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/OmsOrderService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.chelvc.cloud.vehicle.client.dto.*;
 import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.database.support.EnhanceService;
@@ -141,4 +142,6 @@ public interface OmsOrderService extends EnhanceService<OmsOrder>
      * @param orderResponse
      */
     void orderCallBacl(OrderResponse orderResponse);
+
+    void orderNotify(SxyNotifyParam param);
 }

+ 2 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/OnlinePayService.java

@@ -4,6 +4,7 @@ import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderReturnApplyModifyParam;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
+import com.chelvc.framework.wechat.WechatUnifiedOrder;
 import com.upay.sdk.onlinepay.builder.OrderResponse;
 
 import java.util.List;
@@ -18,7 +19,7 @@ public interface OnlinePayService{
     /**
      * 商户发送请求参数给首信易支付,并接收同步返回的支付信息,用支付信息拉起对应支付方式,并在订单终态后接收异步通知结果。
      */
-    OrderResponse order(OmsOrder omsOrder, List<OmsOrderItem> orderItemList, OmsOrderModifyParam orderParam);
+    WechatUnifiedOrder order(OmsOrder omsOrder, List<OmsOrderItem> orderItemList, OmsOrderModifyParam orderParam);
 
     /**
      * 商户通过单笔订单查询接口查询首信易支付平台的订单状态,并且通过主动查询订单来获知订单信息

+ 4 - 10
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantApplyRecordServiceImpl.java

@@ -5,15 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.vehicle.client.constant.MerchantApplyStatus;
-import com.chelvc.cloud.vehicle.client.param.MerchantApplyRecordParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.server.dao.MerchantApplyRecordMapper;
 import com.chelvc.cloud.vehicle.server.entity.MerchantApplyRecord;
+import com.chelvc.cloud.vehicle.server.handle.TradeHandle;
 import com.chelvc.cloud.vehicle.server.service.MerchantApplyRecordService;
 import com.chelvc.cloud.vehicle.server.service.MerchantAuthService;
 import com.chelvc.cloud.vehicle.server.service.MerchantRelationService;
 import com.chelvc.cloud.vehicle.server.service.UserAuthService;
 import com.upay.sdk.Constants;
-import com.upay.sdk.core.CipherWrapper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -35,14 +35,8 @@ public class MerchantApplyRecordServiceImpl extends
     }
 
     @Override
-    public void updateByNotify(MerchantApplyRecordParam param) {
-        JSONObject responseData = new JSONObject();
-        responseData.put("merchantId", param.getMerchantId());
-        responseData.put("partnerId", null);
-        responseData.put("encryptKey", param.getEncryptKey());
-        responseData.put("data", param.getData());
-        //解密
-        responseData = CipherWrapper.bothDecryptWrap(responseData);
+    public void updateByNotify(SxyNotifyParam param) {
+        JSONObject responseData = TradeHandle.decrypt(param);
         String status = responseData.getString("subMerchantReviewStatus");
         if (Constants.ERROR.equals(status)) {
             //解密后报文,如果status=ERROR时,不需要验签

+ 1 - 5
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -37,10 +37,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.time.DayOfWeek;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -560,7 +556,7 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
     }
 
     @Override
-    public void merchantApplyNotify(MerchantApplyRecordParam param) {
+    public void merchantApplyNotify(SxyNotifyParam param) {
         merchantApplyRecordService.updateByNotify(param);
     }
 

+ 33 - 6
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.user.client.UserClient;
@@ -9,11 +10,13 @@ import com.chelvc.cloud.vehicle.client.constant.ReserveStatus;
 import com.chelvc.cloud.vehicle.client.dto.*;
 import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.client.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.copier.OrderCopier;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
 import com.chelvc.cloud.vehicle.server.entity.*;
+import com.chelvc.cloud.vehicle.server.handle.TradeHandle;
 import com.chelvc.cloud.vehicle.server.service.*;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
@@ -236,7 +239,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         order.setUserId(userId);
         order.setCreateTime(new Date());
         order.setMemberUsername(userId.toString());
-        //支付方式:0->未支付;1->支付宝;2->微信
+        //支付方式:0->未支付;1->支付宝;2->微信;3->首信易(微信小程序)
         order.setPayType(orderParam.getPayType());
         //订单来源:0->PC订单;1->app订单
         order.setSourceType(1);
@@ -307,11 +310,8 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
 //        }
 //        request.setOpenid(openid);
         //WechatPaymentHandler wechatPaymentHandler = applicationContext.getBean(WechatPaymentHandler.class);
-//        return this.wechatPaymentHandler.unifiedorder("applet", request);
-        OrderResponse orderResponse = this.onlinePayService.order(order,orderItemList,orderParam);
-        WechatUnifiedOrder wechatUnifiedOrder = new WechatUnifiedOrder();
-        wechatUnifiedOrder.setOrder(orderResponse.getReceiptOrderId());
-        return wechatUnifiedOrder;
+        //return this.wechatPaymentHandler.unifiedorder("applet", request);
+        return this.onlinePayService.order(order,orderItemList,orderParam);
     }
 
     @Override
@@ -1017,4 +1017,31 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
                 orderHandleService.paySuccess(order)
         );
     }
+
+    @Override
+    public void orderNotify(SxyNotifyParam param) {
+        JSONObject responseData = TradeHandle.decrypt(param);
+        String requestId = responseData.getString("requestId");
+        OmsOrder omsOrder = baseMapper.selectById(requestId);
+        if(omsOrder == null){
+            //订单不存在
+            return;
+        }
+        BigDecimal payAmount = omsOrder.getPayAmount();
+        String orderAmount = responseData.getString("orderAmount");
+        if(payAmount.multiply(new BigDecimal("100")).compareTo(new BigDecimal(orderAmount)) != 0){
+            //订单金额不一样
+            return;
+        }
+        String status = responseData.getString("status");
+        Integer orderStatus = 0;
+        if("SUCCESS".equals(status)){
+            orderStatus = 1;
+        } else if("FAILED".equals(status)){
+            orderStatus = 8;
+        } else if("CANCEL".equals(status)){
+            orderStatus = 7;
+        }
+        baseMapper.updateStatus(omsOrder.getId(), orderStatus, new Date());
+    }
 }

+ 37 - 34
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OnlinePayServiceImpl.java

@@ -1,7 +1,5 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
-import cn.hutool.core.codec.Base64;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.nacos.shaded.com.google.gson.Gson;
 import com.chelvc.cloud.user.client.UserClient;
 import com.chelvc.cloud.user.client.dto.UserDTO;
 import com.chelvc.cloud.vehicle.client.constant.TradeConstant;
@@ -9,10 +7,11 @@ import com.chelvc.cloud.vehicle.client.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.client.param.OrderReturnApplyModifyParam;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.handle.TradeHandle;
-import com.chelvc.cloud.vehicle.server.service.MerchantAuthService;
-import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.cloud.vehicle.server.service.OnlinePayService;
+import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.wechat.PayChannel;
+import com.chelvc.framework.wechat.PayMode;
+import com.chelvc.framework.wechat.WechatUnifiedOrder;
 import com.upay.sdk.entity.Payer;
 import com.upay.sdk.entity.ProductDetail;
 import com.upay.sdk.exception.HmacVerifyException;
@@ -30,7 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
-import java.util.LinkedList;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -46,32 +45,32 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
     private final UserClient userService;
 
     @Override
-    public OrderResponse  order(OmsOrder omsOrder, List<OmsOrderItem> orderItemList, OmsOrderModifyParam orderParam){
-        OrderBuilder builder = new OrderBuilder(omsOrder.getMerchantId().toString());
+    public WechatUnifiedOrder order(OmsOrder omsOrder, List<OmsOrderItem> orderItemList, OmsOrderModifyParam orderParam){
+        OrderBuilder builder = new OrderBuilder(TradeConstant.PARTNER_ID);
         builder.setRequestId(omsOrder.getId().toString())
-                .setOrderAmount(omsOrder.getPayAmount().toString())
+                .setOrderAmount(String.valueOf(omsOrder.getPayAmount().multiply(new BigDecimal("100")))) //单位:分
                 .setOrderCurrency("CNY")
                 .setNotifyUrl(TradeConstant.ORDER_NOTIFY_URL)
                 .setCallbackUrl(TradeConstant.ORDER_CALLBACKURL)
                 .setRemark(omsOrder.getNote())
                 .setPaymentModeCode(TradeConstant.MINIAPPS_WEIXIN_PAY_P2P)
-                .setAuthCode("")
+                //.setAuthCode("")
                 .setMerchantUserId(omsOrder.getUserId().toString())
-                .setBindCardId("")
-                .setClientIp("");
+                //.setBindCardId("")
+                .setClientIp(SessionContextHolder.getHost());
         builder.setTimeout("15");
-        builder.setPaymentToken("");
-        builder.setAppId("");
+        //builder.setPaymentToken("");
+        builder.setAppId(TradeConstant.APPID);
 
-        builder.setSerialNumber("");
-        builder.setApCardNo("");
-        builder.setApTransData("");
-        builder.setApUserData("");
-        builder.setReportSerialNo("");
-        builder.setReportTerminalNo("");
-        builder.setPartnerId(TradeConstant.PARTNER_ID);
-        builder.setProjectId(TradeConstant.PARTNER_ID);
-        builder.setSplitMark("");
+        //builder.setSerialNumber("");
+        //builder.setApCardNo("");
+        //builder.setApTransData("");
+        //builder.setApUserData("");
+        //builder.setReportSerialNo("");
+        //builder.setReportTerminalNo("");
+        //builder.setPartnerId(TradeConstant.PARTNER_ID);
+        builder.setProjectId(String.valueOf(omsOrder.getMerchantId()));
+        //builder.setSplitMark("");  //不传默认不分账
 
 
         //productDetails(商品信息)
@@ -95,6 +94,7 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
         payer.setEmail("");
         builder.setPayer(payer);
         OrderResponse orderResponse = new OrderResponse();
+        WechatUnifiedOrder wechatUnifiedOrder = new WechatUnifiedOrder();
         //分期支付参数
 //        InstalmentParams instalmentParams = new InstalmentParams();
 //        instalmentParams.setInterestType(interestType);
@@ -103,8 +103,6 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
 //        instalmentParams.setStoreNo(storeNo);
 //        instalmentParams.setStoreName(storeName);
 //        builder.setInstalmentParams(instalmentParams);
-
-
 //        builder.setSubsidyMark(subsidyMark);
 //        builder.setSubsidyAmount(subsidyAmount);
 
@@ -119,14 +117,12 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
                 public void success(JSONObject jsonObject) {
                     if (jsonObject.get("scanCode") != null) {
                         try {
-
                             orderResponse.setHmac(jsonObject.getString("hmac"));
                             orderResponse.setMerchantId(jsonObject.getString("merchantId"));
                             orderResponse.setRequestId(jsonObject.getString("requestId"));
                             orderResponse.setStatus(jsonObject.getString("status"));
                             String scanCodeStr = jsonObject.getString("scanCode");
 //                            orderResponse.setScanCode(Base64.decodeBase64(scanCodeStr));
-//
 //                            session.setAttribute("orderResponse", orderResponse);
 //                            resp.sendRedirect("scancode.jsp");
                         } catch (Exception e) {
@@ -134,11 +130,20 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
                             System.out.println(e.toString());
                         }
                     } else if (jsonObject.get("jsString") != null) {
-                        //微信公众号支付
+                        //微信小程序支付
                         try {
-//                            HttpSession session = req.getSession();
-//                            session.setAttribute("jsString", jsonObject.get("jsString"));
-//                            resp.sendRedirect("wechatjsapi.jsp");
+                            String jsString = jsonObject.getString("jsString");
+                            JSONObject json = JSONObject.parseObject(jsString);
+                            wechatUnifiedOrder.setAppid(json.getString("appId"));
+                            wechatUnifiedOrder.setMchid(TradeConstant.MCH_ID);
+                            wechatUnifiedOrder.setChannel(PayChannel.WECHAT);
+                            wechatUnifiedOrder.setNonce(json.getString("nonceStr"));
+                            wechatUnifiedOrder.setSign(json.getString("paySign"));
+                            wechatUnifiedOrder.setTimestamp(json.getString("timeStamp"));
+                            wechatUnifiedOrder.setAlgorithm(json.getString("signType"));
+                            wechatUnifiedOrder.setPack(json.getString("package"));
+                            wechatUnifiedOrder.setOrder(jsonObject.getString("requestId"));
+                            wechatUnifiedOrder.setMode(PayMode.JSAPI);
                         } catch (Exception e) {
                             System.out.println("响应异常</br>");
                             System.out.println(e.toString());
@@ -147,7 +152,6 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
                     System.out.println("提交成功</br>");
                     System.out.println(jsonObject);
                 }
-
                 @Override
                 public void redirect(JSONObject jsonObject, String redirectUrl) throws IOException {
 //                    resp.sendRedirect(redirectUrl);
@@ -166,8 +170,7 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
             System.out.println("未知异常</br>");
             System.out.println(e.toString());
         }
-        return orderResponse;
-
+        return wechatUnifiedOrder;
     }
     @Override
     public String query(OmsOrder omsOrder) {

+ 6 - 0
vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

@@ -906,6 +906,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
+    <update id="updateStatus">
+        update oms_order
+        set status = #{status}, update_time = #{updateTime}
+        where id = #{id}
+    </update>
+
     <update id="releaseSkuStockLock">
         UPDATE pms_sku_stock
         SET