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

news2025/1/14 0:42:24

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

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

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

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

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

application-dev.yml

  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

  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小程序里的代码

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

    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中修改了,下边会说到!

 /**
     * 订单支付
     *
     * @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中,修改一下即可

    /**
     * 订单支付
     *
     * @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);
    }


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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows Server 2025 Preview 部署 Ⅱ—— 在ESXi 8上安装 Windows Server 2025

目录 3. 在ESXi 8上安装 Windows Server 20253.1 创建Win Server 虚拟机&#xff08;1&#xff09;创建 VM&#xff08;2&#xff09;选择创建类型&#xff08;3&#xff09;设置VM名和选择guest OS&#xff08;4&#xff09;选择存储&#xff08;5&#xff09;自定义虚拟机组件…

leafletjs-gis中如何判断图层或元素是点,线,面的类型

查找地图上的图层&#xff0c;要素&#xff1a; window.MapLeaflet.eachLayer(function (layer) {if (layer ! window.MapLeaflet) {console.log("layer instanceof L.Polyline", layer instanceof L.Polyline)// L.Marker,L.Polyline, L.Polygon||L.Rectangle,L.C…

spring boot(学习笔记第十六课)

spring boot(学习笔记第十六课) Spring boot的websocket(点对点) 学习内容&#xff1a; Spring boot的websocket&#xff08;点对点&#xff09;spring boot(学习笔记第十六课) 1. Spring boot的websocket&#xff08;点对点&#xff09; 前面练习了websocket的广播模式。 接…

1.GPIO

理论说明 输入 上拉输入&#xff1a;拉高电平 下拉输入&#xff1a;拉低电平 浮空输入&#xff1a;不拉高也不拉低电平 输出 开漏输出&#xff1a;不能输出高电平&#xff08;P-MOS不可用&#xff0c;则只能低电平&#xff09; 推挽输出&#xff1a;可输出高低电平 输出速率…

informer中DeltaFIFO机制的实现分析与源码解读

informer中的DeltaFIFO机制的实现分析与源码解读 DeltaFIFO作为informer中重要组件&#xff0c;本文从源码层面了解是如何DelatFIFO是实现的。 DeltaFIFO的定义 找到delta_fifo.go的源码&#xff0c;位于client-go/tools/cache/delta_fifo.go 代码结构大致如下: store定义…

【priority_queue的模拟实现】

priority_queue的模拟实现 小杨 容器适配器&#xff1a;priority_queue priority_queue即优先级队列是一种容器适配器&#xff0c;根据严格的弱排序标准(即排序规则可以更改),他的第一个元素总是它所包含的元素中最大的。优先队列将特定容器类封装作为其底层容器类。标准容器类…

ElasticSearch优化实战:打造高性能搜索引擎的秘籍

在当今这个大数据时代&#xff0c;信息的海量增长对搜索技术提出了前所未有的挑战。用户不仅需要快速准确地从数以亿计的数据中找到所需信息&#xff0c;还希望搜索引擎能够提供个性化和智能化的搜索体验。ElasticSearch作为市场上领先的搜索引擎&#xff0c;因其强大的全文搜索…

Typora2024最新版破解方法(亲测可用)

此方法非常简单&#xff0c;无需安装dll补丁&#xff0c;无需修改注册表&#xff0c;无需使用老版本。仅需修改部分文件内容即可 方法步骤 步骤一 下载并安装Typora 安装Typora 打开官网 下载并安装最新版即可 点击访问Typora官网 https://typoraio.cn/ 步骤二 修改文件 …

java面向对象重点总结

文章目录 java面向对象重点总结类与实例构造方法方法重载属性与修饰符封装继承多态重构抽象类接口抽象类和接口的区别&#xff1a;集合泛型 java面向对象重点总结 对象是一个自包含的实体&#xff0c;用一组可识别的特性和行为来标识。 面向对象编程&#xff0c;英文叫Object…

mcasttest-tool组播检测工具

作者&#xff1a;广大 检测组播 mcasttest-tool是oracle组播检测工具&#xff0c;组播是oracle 11.2.0.2开始的新功能。 1、上传mcasttest工具解压并授权 [rootrac1 soft]# cd /u01/soft/ [rootrac1 soft]# tar -xvf mcasttest.tgz[rootrac1 soft]# chown -R grid:oinstall…

Animate软件基础:“分散到图层”创建的新图层

FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.co…

Pytorch实现线性回归Linear Regression

借助 PyTorch 实现深度神经网络 - 线性回归 - 第 2 周 | Coursera 线性回归预测 用PyTorch实现线性回归模块 创建自定义模块&#xff08;内含一个线性回归&#xff09; 训练线性回归模型 对于线性回归&#xff0c;特定类型的噪声是高斯噪声 平均损失均方误差函数&#xff1a…

Mallet:一款针对任意协议的安全拦截代理工具

关于Mallet Mallet是一款功能强大的协议安全分析工具&#xff0c;该工具支持针对任意协议创建用于安全审计的拦截代理&#xff0c;该工具本质上与我们所熟悉的拦截Web代理类似&#xff0c;只是通用性更强。 工具运行机制 Mallet建立在Netty框架之上&#xff0c;并且依赖于Net…

文案人的梦工场,网易入职指南!

网易云对于咱们一些有点文艺的文案策划来说&#xff0c;简直就是梦中情司。 在这里工作锻炼机会很多&#xff0c;也很开拓眼界&#xff0c;能获得相当于在别处3倍能力的成长速度&#xff0c;福利待遇也是很好的。 要进入网易云音乐做文案策划&#xff0c;你可以按照以下步骤进…

数据结构的基本概念与算法2

线性表 &#xff1a; 线性表 是具有相同数据类型的 n (n > 0) 个数据元素的有限序列&#xff0c;其中 n 为表长&#xff0c;当 n 0 时线性表是一个空表&#xff1b;若用 L 命名线性表&#xff0c;则其一般表示为&#xff1a;L (a1 , a2 , ... ai , ai1 , ... an) 上述中&a…

月木学途开发 2.项目架构

1.项目介绍 月木学途是一款it在线学习网站&#xff0c;项目采用前后端分离架构。前端开发主要使用vue.js&#xff0c;后端使用Spring Cloud Alibaba技术栈。项目包含学习网站的大部分功能&#xff0c;分为管理员端和用户端。管理员端有权限管理、课程管理、网站管理、求职模块管…

Shell函数和Shell 输入/输出重定向

LInux&#xff1a;Shell函数和Shell 输入/输出重定向 Shell函数 参数说明&#xff1a; 可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。参数返回&#xff0c;可以显示加&#xff1a;return 返回&#xff0c;如果不加&#xff0c;将以最后一条命令运…

[Vue warn]: data functions should return an object:

仔细检查你的代码肯定有一个data()内忘记方return{}了

C语言程序设计23

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题2.11 从键盘输入B、O、Y三个字符&#xff0c;然后把他们输出到屏幕上 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题2.11 从键盘输入B、O、Y三个字符&#xff0c;然…

RabbitMQ:MQ的可靠性

MQ的可靠性 在默认情况下&#xff0c;RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。这样会导致两个问题: 一旦MQ宕机&#xff0c;内存中的消息会丢失 内存空间有限&#xff0c;当消费者故障或处理过慢时&#xff0c;会导致消息积压&#xff0c;引发MQ阻塞。 …