苍穹外卖直接跳过微信支付和语音提醒等

tips:

  1. 使用LocalDateTime time = LocalDateTime.now().plusMinutes(-15); 进行时间的相加减

  2. WebSocket 向所有客户端发送信息,WebSocket的代码比较固定,所以一般可以直接复制过来用

public void sendToAllClient(String message) {
    Collection<Session> sessions = sessionMap.values();
    for (Session session : sessions) {
        try {
            //服务器向客户端发送消息
            session.getBasicRemote().sendText(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

黑马程序员苍穹外卖直接跳过微信支付和WebSocket

(参考:笔记

WX小程序:

在这里插入图片描述

代码:

if (res.code === 1) {
            // wx.requestPayment({
            //   nonceStr: res.data.nonceStr,
            //   package: res.data.packageStr,
            //   paySign: res.data.paySign,
            //   timeStamp: res.data.timeStamp,
            //   signType: res.data.signType,
            //   success:function(res){
            //     wx.showModal({
            //       title: '提示',
            //       content: '支付成功',
            //       success:function(){
            //         uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
            //       }
            //     })
            //     console.log('支付成功!')
            //   }
            // })


            uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });

          } else {
            wx.showModal({
              title: '提示',
              content: res.msg
            })
          }

OrderServiceImpl中的方法:

    public Long orderid; // OrderID可以在提交订单的时候就直接获取

    @Transactional
    @Override
    public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) {
        /*
        	自己处理业务的代码
        */
	   	orderid = orderSubmitVO.getId();
        return orderSubmitVO;
    }
	public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
        // 当前登录用户id
        Long userId = BaseContext.getCurrentId();
        User user = userMapper.getById(userId);

        //调用微信支付接口,生成预支付交易单
//        JSONObject jsonObject = weChatPayUtil.pay(
//                ordersPaymentDTO.getOrderNumber(), //商户订单号
//                new BigDecimal(0.01), //支付金额,单位 元
//                "苍穹外卖订单", //商品描述
//                user.getOpenid() //微信用户的openid
//        );
//
//        if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
//            throw new OrderBusinessException("该订单已支付");
//        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", "ORDERPAID");

        OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);
        vo.setPackageStr(jsonObject.getString("package"));


        Integer OrderPaidStatus = Orders.PAID;
        Integer OrderStatus = Orders.TO_BE_CONFIRMED;

        LocalDateTime check_out_time = LocalDateTime.now();
        orderMapper.updateStatus(OrderStatus, OrderPaidStatus, check_out_time, orderid);
        System.out.println(ordersPaymentDTO.getOrderNumber());
        // paySuccess(ordersPaymentDTO.getOrderNumber()); // 和WebSocket学习有关系,开始只是为了取消微信支付可以注释掉
        return vo;
    }
    /**
     * 支付成功,修改订单状态
     *
     * @param outTradeNo
     */
    public void paySuccess(String outTradeNo) {

        // 根据订单号查询订单
        Orders ordersDB = orderMapper.getByNumber(outTradeNo);
        System.out.println(ordersDB);
        // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
        Orders orders = Orders.builder()
                .id(ordersDB.getId())
                .status(Orders.TO_BE_CONFIRMED)
                .payStatus(Orders.PAID)
                .checkoutTime(LocalDateTime.now())
                .build();
        orderMapper.update(orders);
        // 向客户端浏览器推送消息 type orderId content
        Map map = new HashMap();
        map.put("type", 1); // 1表示来单提醒,2表示客户催单
        map.put("orderID", ordersDB.getId());
        map.put("content", "订单号:" + outTradeNo);

        String jsonString = JSON.toJSONString(map);
        System.out.println("这里是开始回调到浏览器啦");
        webSocketServer.sendToAllClient(jsonString);
        System.out.println("成功了");
    }

OrderMapper的方法:

@Update("update orders set status = #{orderStatus},pay_status = #{orderPaidStatus} ,checkout_time = #{check_out_time} where id = #{id}")
void updateStatus(Integer orderStatus, Integer orderPaidStatus, LocalDateTime check_out_time, Long id);

后面和WebSocket有关:

因为咱们没有商家注册的那些东西,同时paySuccessNotify() 方法中用到了paySuccess() :

​ 路径:sky-common/src/main/java/com/sky/utils/WeChatPayUtil.java:

@RequestMapping("/paySuccess")
public void paySuccessNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
    //读取数据
    String body = readData(request);
    log.info("支付成功回调:{}", body);

    //数据解密
    String plainText = decryptData(body);
    log.info("解密后的文本:{}", plainText);

    JSONObject jsonObject = JSON.parseObject(plainText);
    String outTradeNo = jsonObject.getString("out_trade_no");//商户平台订单号
    String transactionId = jsonObject.getString("transaction_id");//微信支付交易号

    log.info("商户平台订单号:{}", outTradeNo);
    log.info("微信支付交易号:{}", transactionId);

    //业务处理,修改订单状态、来单提醒
    orderService.paySuccess(outTradeNo);

    //给微信响应
    responseToWeixin(response);
}

所以就先直接不要了,直接用在上面的函数里面调用 paySuccess 方法

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值