vue尚品汇商城项目-day06【43.微信支付业务】

简介: vue尚品汇商城项目-day06【43.微信支付业务】

1.jpeg

43.微信支付业务

修改代码:

src/pages/Pay/index.vue

<a class="btn" @click="open">立即支付</a>

data() {
      return {
        payInfo: {},
        timer: null,
        //支付状态码
        code: "",
      };
    },

methods: {
//弹出框
      async open() {
        //生成二维(地址)
        let url = await QRCode.toDataURL(this.payInfo.codeUrl);

        //注意路径下面/之前一定要有空格,否则解析失败不展示图
        this.$alert(`<img src=${url} />`, "请你微信支付", {
          dangerouslyUseHTMLString: true,
          //中间布局
          center: true,
          //是否显示取消按钮
          showCancelButton: true,
          //取消按钮的文本内容
          cancelButtonText: "支付遇见问题",
          //确定按钮的文本
          confirmButtonText: "已支付成功",
          //右上角的叉子没了
          showClose: false,
          //关闭弹出框的配置值
          beforeClose: (type, instance, done) => {
            //type:区分取消|确定按钮
            //instance:当前组件实例
            //done:关闭弹出框的方法
            if (type == "cancel") {
              alert("请联系管理员中哥");
              //清除定时器
              clearInterval(this.timer);
              this.timer = null;
              //关闭弹出框
              done();
            } else {
              //判断是否真的支付了
              //开发人员:为了自己方便,这里判断先不要了
              // if (this.code == 200) {
              clearInterval(this.timer);
              this.timer = null;
              done();
              this.$router.push("/paysuccess");
              // }
            }
          },
        });
        //你需要知道支付成功|失败
        //支付成功,路由的跳转,如果支付失败,提示信息
        //定时器没有,开启一个新的定时器
        if (!this.timer) {
          this.timer = setInterval(async () => {
            //发请求获取用户支付状态
            let result = await this.$API.reqPayStatus(this.orderId);
            //如果code==200
            if (result.code == 200) {
              //第一步:清除定时器
              clearInterval(this.timer);
              this.timer = null;
              //保存支付成功返回的code
              this.code = result.code;
              //关闭弹出框
              this.$msgbox.close();
              //跳转到下一路由
              this.$router.push("/paysuccess");
            }
          }, 1000);
        }
      },
}

注意点1:

问题:一定要注意大括号和反斜杠之间要有空格,严格注意语法形式,如下代码,如果中间没有空格,错误展示如图1;如果有空格,正确展示如图2

this.$alert(`<img src=${url} />`, "请你微信支付", {

image.png

如图1

在这里插入图片描述

如图2

注意点2:作为项目要一直问,是否支付成功,可能调取接口返回微信码是只有一次调用,但是用户是否支付成功,是需要开启定时器不停的去询问是否支付成功的。

注意点3:

问题:报错如图

image.png

答案:因为“获取支付信息”接口返回为201,没有拿到payInfo.codeUrl的值,所以需要手动初始化赋值字符串即可。

注意点4:

问题:判断逻辑中为啥要判断code=200后在跳转支付成功页面?

答案:防止用户还未支付,直接点击按钮“已支付成功”,跳转到支付成功页面。

注意点5:

问题:为啥需要方法beforeClose()?

答案:当用户点击按钮【“支付遇到问题”|“已支付成功”】会直接关闭弹窗,但实际点击按钮后还应该执行一些逻辑,比如支付成功跳转,比如失败弹窗提示等等。所以不能让它直接关闭,需要通过beforeClose去控制弹窗框的方法。

注意点6:

弹窗框逻辑:

  • 使用插件QRCode,先生成支付二维码
  • 弹窗提示
    • 关闭弹出框的配置值
      • 如果用户点击“取消”按钮,则:
        • 清除定时器
        • 设置timer为空
        • 关闭弹出框
      • 如果用户点击“已支付成功”,则:
        • 先判断是否支付成功了,是的话:
          • 清除定时器
          • 设置timer为空
          • 关闭弹出框
          • 跳转到下一路由("/paysuccess")
  • 这一步用于知道支付【成功|失败】,判断定时器有没有,没有就创建一个
    • 定时器发请求一直轮询获取用户支付状态,如果成功:
      • 清除定时器
      • 设置timer为空
      • 保存支付成功返回的code
      • 关闭弹出框
      • 跳转到下一路由("/paysuccess")

本人其他相关文章链接

1.vue尚品汇商城项目-day06【37.获取交易数据+38.用户地址信息展示+39.交易信息展示及交易页面完成+40.提交订单+41.支付组件内获取订单号与展示支付信息】
2.vue尚品汇商城项目-day06【vue插件-42.支付页面中使用ElementUI以及按需引入】
3.vue尚品汇商城项目-day06【43.微信支付业务】

目录
相关文章
|
1月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
1月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
12月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
1971 3
|
12月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
1854 0
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
638 0
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
503 0
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
小程序 前端开发 数据可视化
微信商城小程序WeiMall
微信商城小程序WeiMall
183 0
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
114 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
8月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。

热门文章

最新文章