外卖项目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);
    }

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

相关推荐
陈思杰系统思考Jason11 小时前
系统思考—深层结构
百度·微信·微信公众平台·新浪微博·微信开放平台
ysdysyn1 天前
C# winfrom实现微信(其他应用)自动跟随C#窗口,拖动页面自动恢复到固定位置
开发语言·微信·c#·winform
程序员入门进阶1 天前
基于微信的追星小程序+ssm(lw+演示+源码+运行)
微信·小程序
2401_844139032 天前
Java爱情交友婚恋系统小程序源码
微信·微信小程序·小程序·微信公众平台·交友·微信开放平台
somgl3 天前
Wecom酱搭建企业微信发送消息
微信
悟空码字5 天前
使用免费的微信机器人,实现消息推送实时通知
微信·消息推送·群机器人
悟空码字5 天前
使用微信免费的内容安全识别接口,UGC场景开发检测违规内容功能
微信·ugc·内容安全识别
EasyCVR6 天前
GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章
微信·小程序·音视频
SCRM_huke6 天前
微信商家转账到零钱完整开通说明
微信·微信小程序·小程序·微信开放平台
二喵看世界7 天前
今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 11月1日,星期五
经验分享·笔记·其他·微信·课程设计·微信公众平台·微信开放平台