苍穹外卖项目微信支付(没有商户号)的解决方法,超详细!!!

本文介绍了在苍穹外卖项目中,如何通过修改代码绕过获取微信商户号的限制,实现订单支付功能。作者详细描述了修改微信小程序和OrderServiceImpl中关键代码的步骤,以及支付成功后数据库状态的更新过程。
摘要由CSDN通过智能技术生成

今天在写苍穹外卖项目时,写到微信支付时发现个人无法获取商户号,那么今天我就在这里分享一个方法,可以绕过微信支付实现订单支付的功能。本方法仅仅是绕过微信支付,没有进行真正的微信支付,如果想要体验真正的微信支付环节,可以搜其他方法。对于没有微信支付的环节,我们仅需要做一个大致了解即可。
步骤1:我们根据老师提供的代码,将代码复制到我们自己的项目中
在这里插入图片描述
我们主要修改的代码有两部分,第一部分是微信小程序的代码,第二部分是OrderServiceImpl中的代码。
步骤2:修改微信小程序中的代码:
我们来到pay/index.js在这里插入图片描述
将大概220行左右的代码进行修改,具体的修改方法如下:
在这里插入图片描述
将箭头所指的代码放开,老师给的代码原本是注释着的
在这里插入图片描述
步骤3:修改OrderServiceImpl中的代码
我们将原本的payment代码替换为以下代码:

 /**
     * 订单支付
     *
     * @param ordersPaymentDTO
     * @return
     */
    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"));

        // 替代微信支付成功后的数据库订单状态更新,直接在这里更新了
        // 根据订单号查询当前用户的该订单
        Orders ordersDB = orderMapper.getByNumberAndUserId(ordersPaymentDTO.getOrderNumber(), userId);

        // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
        Orders orders=new Orders();
        orders.setId(ordersDB.getId());
        orders.setStatus(Orders.TO_BE_CONFIRMED);
        orders.setPayStatus(Orders.PAID);
        orders.setCheckoutTime(LocalDateTime.now());
//        Orders orders = Orders.builder()
//                .id(ordersDB.getId())
//                .status(Orders.TO_BE_CONFIRMED) // 订单状态,待接单
//                .payStatus(Orders.PAID) // 支付状态,已支付
//                .checkoutTime(LocalDateTime.now()) // 更新支付时间
//                .build();

        orderMapper.update(orders);

        return vo;
    }

orderMapper.getByNumberAndUserId:

 @Select("select * from orders where number = #{orderNumber} and user_id= #{userId}")
    Orders getByNumberAndUserId(String orderNumber, Long userId);

payment方法中的update方法和getbyid方法老师都已经讲过。这里不再进行提供。
之后将小程序重新编译,进行下单支付
实验结果如下:
在这里插入图片描述
数据库中的数据也更新成功
在这里插入图片描述
至此,本次分享到此全部结束,希望对你有帮助,如果觉得博主写的博客对你有帮助的话,希望给个小小的3连谢谢(●’◡’●)!

  • 45
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值