Vue电商项目--订单和支付

提交订单

没有组件,先搬组件

 配置路由

 然后静态pay页面就有了

这里提交订单不是简单的直接进行路由的跳转,而且要拿你支付的数据向服务器发请求

提交订单

请求地址

/api/order/auth/submitOrder?tradeNo={tradeNo}

请求方式

POST

参数类型

参数名称

类型

是否必选

描述

traderNo

string

Y

交易编号(拼接在路径中)

consignee

string

Y

收件人姓名

consigneeTel

string

Y

收件人电话

deliveryAddress

string

Y

收件地址

paymentWay

string

Y

支付方式

(ONLINE代表在线)

orderComment

string

Y

订单备注

orderDetailList

Array

Y

存储多个商品对象的数组

例子:

{

    "consignee": "admin",

    "consigneeTel": "15011111111",

    "deliveryAddress": "北京市昌平区2",

    "paymentWay": "ONLINE",

    "orderComment": "xxx",

    "orderDetailList": [

        {

            "id": null,

            "orderId": null,

            "skuId": 6,

            "skuName": " Apple iPhone 11 (A2223) 128GB 红色 移动联通电信22",

            "imgUrl": "http://182.92.128.115:8080//rBFUDF6V0JmAG9XGAAGL4LZv5fQ163.png",

            "orderPrice": 4343,

            "skuNum": 2,

            "hasStock": null

        },

        {

            "id": null,

            "orderId": null,

            "skuId": 4,

            "skuName": "Apple iPhone 11 (A2223) 128GB 红色",

            "imgUrl": "http://182.92.128.115:80800/rBFUDF6VzaeANzIOAAL1X4gVWEE035.png",

            "orderPrice": 5999,

            "skuNum": 1,

            "hasStock": null

        }

    ]

}

返回示例

成功:

{

    "code": 200,

    "message": "成功",

    "data": 71,   // orderId 订单号

    "ok": true

}

写接口,这里换一种方式。我们不在通过vuex的方式。

现在我们这里有一个新的需求,只需引入一次,接口都可以使用,我们可以用全局事件总线的方式

 统一引入的方式

 我们这里换了一种方式,不使用vuex。用data来存储数据 

测试一下,成功了 

获取订单号与展示支付信息

这里做一个判断,如果提交订单成功。路由跳转+路由传递参数

然后我们在pay页面显示我们传递过去的值 

像我们这里就是订单号传递过去,然后发起请求

获取订单支付信息

请求地址

/api/payment/weixin/createNative/{orderId}

请求方式

GET

参数类型

参数名称

类型

是否必选

描述

orderId

string

Y

支付订单ID

(通过提交订单得到)

返回示例

成功:

{

    "code": 200,

    "message": "成功",

    "data": {

        "codeUrl": "weixin://wxpay/bizpayurl?pr=P0aPBJK",

        "orderId": 71,

        "totalFee": 23996,

        "resultCode": "SUCCESS"

    },

    "ok": true

}

 然后写api

然后在mounted中发请求

注意不要在生命周期函数中使用async

 先把他打印出来看看,测试一下

 

大概是这样的 

 但是发现id是拿到了,但是支付报错了。可能接口不能正常使用

支付页面中使用elementUI以及按需引入

常用的组件库

React(Vue):antd[PC] antd-mobile[移动端]

Vue:elementUi[PC] vant[移动端]

没有element-ui 先下载

 我们别完整引入(太大了),我们可以按需引入

 配置一下

 然后引入它

 这里可以安装一个新的插件来帮助我们 

<el-就有了 沒< 有可能没有效果

 然后效果就有了

然后修改我们的项目

 elementui注册组件的时候,还有一种写法,挂在原型上

这里我们需要使用这个

 因为它是挂载在原型对象上,因此它可以直接this.$alert了

 大概的效果是这样的

 open(){
        this.$alert('<strong>这是 <i>HTML</i> 片段</strong>', 'HTML 片段', {
          dangerouslyUseHTMLString: true,
          // 中间布局
          center:true,
          // 是否显示取消按钮
          showCancelButton:true,
          // 取消按钮的文本内容
          cancelButtonText:'支付遇到问题',
          confirmButtonText:'已支付成功',
          // 右上角的x
          showClose:false
        });
      }

微信支付业务上

就是添加一个二维码的功能

现在这个接口好像蹦了,现在只提供思想。原本支付成功会返回一个data,data里面有存储微信二维码的地址

在这里我们需要使用一个新的技术,那就是qrcode.

先下载然后去应用他

这里接口不能正常使用,我才用写死方式模拟出一个 

如何判断支付成功还是失败

你需要知道支付成功还是失败。

支付成功实现路由的跳转,支付失败显示提示信息

这里我们需要用新的接口

查询支付订单状态

请求地址

/api/payment/weixin/queryPayStatus/{orderId}

请求方式

GET

参数类型

参数名称

类型

是否必选

描述

orderId

string

Y

支付订单ID

返回示例

成功:

{

    "code": 205,

    "message": "支付中",

    "data": null,

    "ok": false

}

 写接口 

长轮询,什么叫长轮询?长轮询(Long polling) (javascript.info)

 基本的逻辑是这样的

上述代码是一个定时器的逻辑,它在特定时间间隔内执行一段异步操作。下面是对代码的解析:

  1. 首先,判断this.timer是否为假值(例如null或undefined)。这样可以确保只有当定时器不存在时才能创建一个新的定时器。

  2. 如果条件满足,将创建一个定时器。定时器使用setInterval函数,接受两个参数:一个异步函数和时间间隔(以毫秒为单位)。

  3. 异步函数中,调用this.$API.reqPayStatus(this.orderId)发送请求,获取支付状态的结果。这里使用了await关键字等待异步操作完成,并将结果赋给变量result

  4. 检查result.code是否等于200,表示支付成功。

  5. 如果支付成功,执行以下操作: a. 清除定时器:调用clearInterval(this.timer)清除之前设置的定时器。 b. 将this.timer设置为null,表示定时器已被清除。 c. 保存支付成功返回的code:将result.code赋给变量this.code,以便后续使用。 d. 关闭弹出框:使用this.$msgbox.close()关闭当前弹出框。 e. 跳转到支付成功路由:使用this.$router.push('/paysuccess')导航到指定的支付成功页面。

  6. 整个过程会每隔1000毫秒(即1秒)执行一次,直到支付成功为止。

这段代码的作用是在一定时间间隔内轮询请求支付状态,如果支付成功,则进行相应操作,并清除定时器。

然后捞组件,实现跳转

完成,这个也告诉了我们为什么code当开始就null,如果当开始不为null,用户直接点支付成功。直接跳转到paysuccess页面当中 

微信支付业务下

我们不应该在点完已支付成功后直接消失

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

边写代码边学习之LSTM

1. 什么是LSTM 长短期记忆网络 LSTM&#xff08;long short-term memory&#xff09;是 RNN 的一种变体&#xff0c;其核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径&#xff0c;让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲&a…

Stable Diffusion - Candy Land (糖果世界) LoRA 提示词配置与效果展示

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132145248 糖果世界 (Candy Land) 是一个充满甜蜜和奇幻的地方&#xff0c;由各种各样的糖果和巧克力构成。在糖果世界&#xff0c;可以看到&…

Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行

Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行 Chapter1. Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行1、LUA简介2、LUA脚本的解释器和编译器3、C环境中内嵌LUA执行LUA函数调用4、Qt内嵌LUA执行LUA函数调用5、运行结果6、内嵌LUA脚本在实际项目中的案例应用 Chapter1…

手机变电脑2023之虚拟电脑droidvm

手机这么大的内存&#xff0c;装个app来模拟linux&#xff0c;还是没问题的。 app 装好后&#xff0c;手指点几下确定按钮&#xff0c;等几分钟就能把linux桌面环境安装好。 不需要敲指令&#xff0c; 不需要对手机刷机&#xff0c; 不需要特殊权限&#xff0c; 不需要找驱…

opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()

在进行均值滤波和方框滤波时&#xff0c;其邻域内每个像素的权重是相等的。在高斯滤波中&#xff0c;会将中心点的权重值加大&#xff0c;远离中心点的权重值减小&#xff0c;在此基础上计算邻域内各个像素值不同权重 的和。 基本原理 在高斯滤波中&#xff0c;卷积核中的值不…

第一篇:一文看懂 Vue.js 3.0 的优化

我们的课程是要解读 Vue.js 框架的源码&#xff0c;所以在进入课程之前我们先来了解一下 Vue.js 框架演进的过程&#xff0c;也就是 Vue.js 3.0 主要做了哪些优化。 Vue.js 从 1.x 到 2.0 版本&#xff0c;最大的升级就是引入了虚拟 DOM 的概念&#xff0c;它为后续做服务端渲…

Scala按天写入日志文件

如果希望把每天出错的信息写入日志文件&#xff0c;每天新建一个文件。 package test.scala import java.io.{File, FileWriter} import java.text.SimpleDateFormat import java.util.{Calendar, Date} import scala.concurrent.ExecutionContext.Implicits.global import sc…

CS录屏教程,录制游戏需要注意哪些方面?

​最近有个CS手游的玩家小伙伴咨询想要做一些游戏视频录制&#xff0c;但是不知道有哪些好用的工具来使用&#xff0c;对于游戏录制我们其实是需要注意一些事项的&#xff0c;想要观众的观感上比较好就需要把握好视频的帧率等问题&#xff0c;下面我们就来看看录制方法和需要注…

最小二乘问题和非线性优化

最小二乘问题和非线性优化 0.引言1.最小二乘问题2.迭代下降法3.最速下降法4.牛顿法5.阻尼法6.高斯牛顿(GN)法7.莱文贝格马夸特(LM)法8.鲁棒核函数 0.引言 转载自此处&#xff0c;修正了一点小错误。 1.最小二乘问题 在求解 SLAM 中的最优状态估计问题时&#xff0c;我们一般…

RISC-V - 小记

文章目录 关于 RISC-V安装 关于 RISC-V RISC : Reduced Instruction Set Computing RISC-V(“RISC five”)的目标是成为一个通用的指令集架构(ISA) 官网&#xff1a;https://riscv.orggithub : https://github.com/riscv 教程 [完结] 循序渐进&#xff0c;学习开发一个RISC-…

【stm32】初识stm32—stm32环境的搭建

文章目录 &#x1f6f8;stm32资料分享&#x1f354;stm32是什么&#x1f384;具体过程&#x1f3f3;️‍&#x1f308;安装驱动&#x1f388;1&#x1f388;2 &#x1f3f3;️‍&#x1f308;建立Start文件夹 &#x1f6f8;stm32资料分享 我用夸克网盘分享了「STM32入门教程资料…

Maven入职学习

一、什么是Maven&#xff1f; 概念&#xff1a; Maven是一种框架。它可以用作依赖管理工具、构建工具。 它可以管理jar包的规模、jar包的来源、jar包之间的依赖关系。 它的用途就是管理规模庞大的jar包&#xff0c;脱离IDE环境执行构建操作。 具体使用&#xff1a; 工作机…

yolov5代码解读之​detect.py文件【超详细的好吗!点进来看阿很用心的!】

yolov5的代码一直在更新&#xff0c;所以你们代码有些部分可能不太一样&#xff0c;但大差不差。 先给大家看一下项目结构&#xff1a;&#xff08;最好有这个项目&#xff0c;且跑通过&#xff09; detect.py文件&#xff1a;它可以预测视频、图片文件夹、网络流等等。 如何…

Django实现音乐网站 ⑺

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌手原有实现功能的基础上进行优化处理。 目录 新增编辑 表字段名称修改 隐藏单曲、专辑数 姓名首字母 安装xpinyin 获取姓名首字母 重写保存方法 列表显示 图片显示处理 引入函数 路径改为显示…

EP4CE6E22C8 FPGA最小系统电路原理图+PCB源文件

资料下载地址&#xff1a;EP4CE6E22C8 FPGA最小系统电路原理图PCB源文件 一、原理图 二、PCB

HTTP——八、确认访问用户身份的认证

HTTP 一、何为认证二、BASIC认证BASIC认证的认证步骤 三、DIGEST认证DIGEST认证的认证步骤 四、SSL客户端认证1、SSL 客户端认证的认证步骤2、SSL 客户端认证采用双因素认证3、SSL 客户端认证必要的费用 五、基于表单认证1、认证多半为基于表单认证2、Session 管理及 Cookie 应…

mysql二进制方式升级8.0.34

一、概述 mysql8.0.33 存在如下高危漏洞&#xff0c;需要通过升级版本修复漏洞 Oracle MySQL Cluster 安全漏洞(CVE-2023-0361) mysql/8.0.33 Apache Skywalking <8.3 SQL注入漏洞 二、查看mysql版本及安装包信息 [rootlocalhost mysql]# mysql -V mysql Ver 8.0.33 fo…

class version 61 java version 17.0.4

class version (javap -verbose xxxx.class)_spencer_tseng的博客-CSDN博客

Demystifying Prompts in Language Models via Perplexity Estimation

Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…

程序框架-事件中心模块-观察者模式

一、观察者模式 1.1 观察者模式定义 意图&#xff1a; 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变是&#xff0c;所有依赖于它的对象都能得到通知并自动更新。 适用性&#xff1a; 当一个对象状态的改变需要改变其他对象&#xff0c; 或实际对…