外卖项目day11---微信支付(跳过微信接口进行伪支付,超超超细节哦!!!)/cpolar内网穿透工具使用

这里一般个人是没有的,我们用不到

内网穿透工具临时获取到临时域名(可用可不用,拓展一下也好)

安装客户端,在相应目录打开cmd窗口,输入以下代码

可以看到这里的请求地址变了,这就是内网穿透工具的作用

微信支付相关配置,这里可以配置,也可以不配置,因为我们也用不到,想写上的同学们,可以写上,这里给大家提供了

application-dev.yml

java 复制代码
  wechat:
    appid: //这里写自己的appid
    secret: //这里写自己的密钥
    mchid: 1561414331
    mchSerialNo: 4B3B3DC35414AD50B1B755BAF8DE9CC7CF407606
    privateKeyFilePath: D:\apiclient_key.pem
    apiV3Key: CZBK51236435wxpay435434323FFDuv3
    weChatPayCertFilePath: D:\wechatpay_166D96F876F45C7D07CE98952A96EC980368ACFC.pem
    notifyUrl: https://www.weixin.qq.com/wxpay/pay.php
    refundNotifyUrl: https://www.weixin.qq.com/wxpay/pay.php

application.yml

java 复制代码
  wechat:
    appid: ${sky.wechat.appid}
    secret: ${sky.wechat.secret}
    mchid: ${sky.wechat.mchid}
    mchSerialNo: ${sky.wechat.mchSerialNo}
    privateKeyFilePath: ${sky.wechat.privateKeyFilePath}
    apiV3Key: ${sky.wechat.apiV3Key}
    weChatPayCertFilePath: ${sky.wechat.weChatPayCertFilePath}
    notifyUrl: ${sky.wechat.notifyUrl}
    refundNotifyUrl: ${sky.wechat.refundNotifyUrl}

导入这部分我就略过了,毕竟代码都是一样的

这里需要修改一下wx小程序里的代码

大家可以跟我一样设置,提供好了代码

javascript 复制代码
    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 });

          } 

然后就是在OrderServiceImpl中,修改一下payment方法,按照我得修改,也可直接复制,这里可以支付成功立即修改数据库订单状态,但是我觉得代码冗余了,下边的代码我注释起来也给了详细注释,所有在OrderController中修改了,下边会说到!

java 复制代码
 /**
     * 订单支付
     *
     * @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"));


        //这是取消的第一种,但是感觉这里修改的确是多余了,所以我选择直接在controller中调用paySuccess修改
        // 伪支付成功后的数据库订单状态更新,没有通过paySuccess这个接口更新注意一下!
        // 根据订单号查询当前用户的订单
//        Orders ordersDB = orderMapper.getByNumberAndUserId(ordersPaymentDTO.getOrderNumber(), userId);
//
//        // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
//        Orders orders = Orders.builder()
//                .id(ordersDB.getId())
//                .status(Orders.TO_BE_CONFIRMED) // 订单状态,待接单
//                .payStatus(Orders.PAID) // 支付状态,已支付
//                .checkoutTime(LocalDateTime.now()) // 更新支付时间
//                .build();
//
//        orderMapper.update(orders);

        return vo;
    }

直接在OrderController中,修改一下即可

java 复制代码
    /**
     * 订单支付
     *
     * @param ordersPaymentDTO
     * @return
     */
    @PutMapping("/payment")
    @ApiOperation("订单支付")
    public Result<OrderPaymentVO> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO) throws Exception {
        log.info("订单支付:{}", ordersPaymentDTO);
        OrderPaymentVO orderPaymentVO = orderService.payment(ordersPaymentDTO);
        log.info("生成预支付交易单:{}", orderPaymentVO);

        //获取订单号,修改数据库中的订单状态
        String orderNumber = ordersPaymentDTO.getOrderNumber();
        orderService.paySuccess(orderNumber);

        return Result.success(orderPaymentVO);
    }

功能测试,支付成功,也有点美观哈哈哈,不算难主要理解一下微信支付的原理,后面企业开发的时候至少懂一点!

相关推荐
JSON_L15 小时前
小程序 - 模拟时钟
微信·微信小程序·小程序
陈思杰系统思考Jason7 天前
系统思考—持续修炼
百度·微信·微信公众平台·新浪微博·微信开放平台
JSON_L7 天前
小程序 - 头像上传
微信·小程序
陈思杰系统思考Jason7 天前
系统思考—沟通成本
百度·微信·微信公众平台·新浪微博·微信开放平台
陈思杰系统思考Jason10 天前
系统思考沙盘模拟
微信·微信公众平台·oneapi·新浪微博·微信开放平台
编织幻境的妖11 天前
使用html 和javascript 实现微信界面功能2
javascript·微信·html
impossible199472711 天前
获取微信用户openid
微信·微信授权·openid
程序员入门进阶12 天前
基于微信的追星小程序+ssm
微信·小程序
编织幻境的妖13 天前
使用html 和javascript 实现微信界面功能1
javascript·微信·html
小曲曲13 天前
监听H5页面在微信浏览器异常退出
微信