Przeglądaj źródła

fix 支付回调

he2802 4 lat temu
rodzic
commit
7e7cc6ad51

+ 9 - 3
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -5,11 +5,14 @@ import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
 import com.zhongzheng.modules.order.bo.OrderAddBo;
 import com.zhongzheng.modules.order.bo.OrderEditBo;
 import com.zhongzheng.modules.order.bo.OrderQueryBo;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -34,6 +37,8 @@ public class OrderController extends BaseController {
 
     private final IOrderService iOrderService;
 
+    private final WxTokenService wxTokenService;
+
     /**
      * 查询订单列表
      */
@@ -60,7 +65,6 @@ public class OrderController extends BaseController {
      * 修改订单
      */
     @ApiOperation("修改订单")
-    @PreAuthorize("@ss.hasPermi('system:order:edit')")
     @Log(title = "订单", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     public AjaxResult<Void> edit(@Validated  @RequestBody OrderEditBo bo) {
@@ -73,7 +77,9 @@ public class OrderController extends BaseController {
     @ApiOperation("新增订单")
     @Log(title = "订单", businessType = BusinessType.INSERT)
     @PostMapping()
-    public AjaxResult<Void> add(@RequestBody OrderAddBo bo) {
-        return toAjax(iOrderService.insertByAddBo(bo) ? 1 : 0);
+    public AjaxResult add(@RequestBody OrderAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iOrderService.placeOrder(bo));
     }
 }

+ 3 - 3
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxPayController.java

@@ -46,13 +46,13 @@ public class WxPayController
      */
     @ApiOperation("获取支付凭证")
     @PostMapping("/payment")
-    public AjaxResult payment(@RequestBody WxPayBody wxPayBody) throws Exception {
-        return AjaxResult.success(iWxPayService.payment("34"));
+    public AjaxResult payment(@RequestBody WxPayBody wxPayBody)  {
+        return AjaxResult.success();
     }
 
     @ApiOperation("获取支付回调凭证")
     @PostMapping("/callback")
-    public AjaxResult callback(@RequestBody WxLoginBody loginBody)
+    public AjaxResult callback(@RequestBody String notifyData)
     {
         return AjaxResult.success();
     }

+ 2 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -169,11 +169,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
      */
     public static String getDateOrderSn()
     {
-        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
+        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
         String localDate = LocalDateTime.now().format(ofPattern);
         //随机数
         String randomNumeric = RandomStringUtils.randomNumeric(8);
-        return randomNumeric;
+        return localDate+randomNumeric;
     }
 
 }

+ 1 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/wxpay/WXPayUtil.java

@@ -197,6 +197,7 @@ public class WXPayUtil {
         String[] keyArray = keySet.toArray(new String[keySet.size()]);
         Arrays.sort(keyArray);
         StringBuilder sb = new StringBuilder();
+
         for (String k : keyArray) {
             if (k.equals(WXPayConstants.FIELD_SIGN)) {
                 continue;

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java

@@ -32,5 +32,7 @@ public class OrderAddBo {
     /** 更新时间 */
     @ApiModelProperty("更新时间")
     private Long updateTime;
+    @ApiModelProperty("用户ID")
+    private Long userId;
 
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java

@@ -10,6 +10,7 @@ import com.zhongzheng.modules.order.vo.OrderVo;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 订单Service接口
@@ -24,6 +25,8 @@ public interface IOrderService extends IService<Order> {
 	 */
 	OrderVo queryById(Long orderId);
 
+	Order queryByOrderSn(String orderSn);
+
 	/**
 	 * 查询列表
 	 */
@@ -36,6 +39,8 @@ public interface IOrderService extends IService<Order> {
 	 */
 	Boolean insertByAddBo(OrderAddBo bo);
 
+	Map<String, String> placeOrder(OrderAddBo bo);
+
 	/**
 	 * 根据编辑业务对象修改订单
 	 * @param bo 订单编辑业务对象

+ 47 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.order.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.collect.domain.CollectBank;
 import com.zhongzheng.modules.order.bo.OrderAddBo;
 import com.zhongzheng.modules.order.bo.OrderEditBo;
 import com.zhongzheng.modules.order.bo.OrderQueryBo;
@@ -10,6 +11,11 @@ import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.vo.UserVo;
+import com.zhongzheng.modules.wx.service.IWxPayService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -19,6 +25,7 @@ import com.github.pagehelper.Page;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -30,12 +37,26 @@ import java.util.stream.Collectors;
 @Service
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
 
+    @Autowired
+    private IWxPayService iWxPayService;
+
+    @Autowired
+    private IUserService iUserService;
+
     @Override
     public OrderVo queryById(Long orderId){
         Order db = this.baseMapper.selectById(orderId);
         return BeanUtil.toBean(db, OrderVo.class);
     }
 
+    @Override
+    public Order queryByOrderSn(String orderSn) {
+        Order info = getOne(new LambdaQueryWrapper<Order>()
+                .eq(Order::getOderSn,orderSn)
+                .last("limit 1"));
+        return info;
+    }
+
     @Override
     public List<OrderVo> queryList(OrderQueryBo bo) {
         LambdaQueryWrapper<Order> lqw = Wrappers.lambdaQuery();
@@ -76,9 +97,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     public Boolean insertByAddBo(OrderAddBo bo) {
         Order add = BeanUtil.toBean(bo, Order.class);
         validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+
         return this.save(add);
     }
 
+    @Override
+    public Map<String, String> placeOrder(OrderAddBo bo) {
+        Order add = BeanUtil.toBean(bo, Order.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        Map<String, String> result = dealOrder(add);
+        return result;
+    }
+
     @Override
     public Boolean updateByEditBo(OrderEditBo bo) {
         Order update = BeanUtil.toBean(bo, Order.class);
@@ -103,11 +137,21 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return this.removeByIds(ids);
     }
 
-    private OrderAddBo dealOrder(Order add){
-        add.setOderSn(DateUtils.getDateOrderSn());
+    private Map<String, String>  dealOrder(Order add){
+        UserVo userVo = iUserService.queryById(add.getUserId());
+        String body = "中正云课堂会员充值";
+        String price = "1";
+        String out_trade_no = DateUtils.getDateOrderSn();
+        System.out.println(out_trade_no);
+        add.setOderSn(out_trade_no);
         add.setPayType(1);
         add.setOrderStatus(0);
-        return null;
+        if(!this.save(add)){
+            return null;
+        }
+        System.out.println(out_trade_no);
+        Map<String, String> result =  iWxPayService.payment(out_trade_no,userVo.getOpenId(),body,price);
+        return result;
     }
 
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/IWxPayService.java

@@ -24,7 +24,8 @@ public interface IWxPayService {
 	 * 查询单个
 	 * @return
 	 */
-	Map<String, String> payment(String polyvId) throws Exception;
+	Map<String, String> payment(String out_trade_no,String openid,String body,String price);
 
+	void paymentCallBack(String notifyData);
 
 }

+ 49 - 17
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -20,6 +20,8 @@ import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.common.utils.polyv.PolyvUtils;
 import com.zhongzheng.common.utils.wxpay.*;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.polyv.bo.PolyvVideoAddBo;
 import com.zhongzheng.modules.polyv.bo.PolyvVideoEditBo;
 import com.zhongzheng.modules.polyv.bo.PolyvVideoQueryBo;
@@ -79,27 +81,27 @@ public class WxPayServiceImpl  implements IWxPayService {
 
     private boolean autoReport = false;
 
+    @Autowired
+    private IOrderService iOrderService;
+
 
     @Override
-    public Map<String, String> payment(String polyvId) throws Exception {
+    public Map<String, String> payment(String out_trade_no,String openid,String body,String price) {
         WxSmallConfig config = new WxSmallConfig(appid,mchid,key);
-        WXPay wxpay = new WXPay(config);
-        SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
-        String out_trade_no = String.valueOf(idWorker.nextId());
-        System.out.println(out_trade_no);
-
-        Map<String, String> data = new HashMap<String, String>();
-        data.put("body", "中正云课堂会员充值");
-        data.put("out_trade_no", out_trade_no);
-        data.put("device_info", "");
-        data.put("fee_type", "CNY");
-        data.put("total_fee", "1");
-        data.put("openid", "owcQx5LtC4XAvz8Q9AQHO1ttTDiA");
-        data.put("spbill_create_ip", IpUtils.getIpAddr(ServletUtils.getRequest()));
-        data.put("notify_url", notifyUrl);
-        data.put("trade_type", "JSAPI");
-
         try {
+            WXPay wxpay = new WXPay(config);
+            SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
+
+            Map<String, String> data = new HashMap<String, String>();
+            data.put("body", body);
+            data.put("out_trade_no", out_trade_no);
+            data.put("device_info", "");
+            data.put("fee_type", "CNY");
+            data.put("total_fee", "1");
+            data.put("openid", openid);
+            data.put("spbill_create_ip", IpUtils.getIpAddr(ServletUtils.getRequest()));
+            data.put("notify_url", notifyUrl);
+            data.put("trade_type", "JSAPI");
             Map<String, String> resp = wxpay.unifiedOrder(data);
 
             Map<String, String> result = new HashMap<>();
@@ -119,6 +121,36 @@ public class WxPayServiceImpl  implements IWxPayService {
         return null;
     }
 
+    @Override
+    public void paymentCallBack(String notifyData) {
+        WxSmallConfig config = new WxSmallConfig(appid,mchid,key);
+        try {
+            WXPay wxpay = new WXPay(config);
+
+            Map<String, String> notifyMap = WXPayUtil.xmlToMap(notifyData);  // 转换成map
+
+            if (wxpay.isPayResultNotifySignatureValid(notifyMap)) {
+                String out_trade_no = notifyMap.get("out_trade_no");
+                String transaction_id = notifyMap.get("transaction_id");
+                Order order = iOrderService.queryByOrderSn(out_trade_no);
+                if(order.getOrderStatus()==0){
+                    order.setOrderStatus(1);
+                    order.setPayTime(DateUtils.getNowTime());
+                    order.setTransid(transaction_id);
+                    order.setOrderGeneral(out_trade_no);
+                    if(iOrderService.updateById(order)){
+
+                    }
+                }
+            }
+            else {
+                // 签名错误,如果数据里没有sign字段,也认为是签名错误
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      * 不需要证书的请求
      * @param urlSuffix String