vue3-pc端生成微信二维码、扫码支付监听支付回调(WebSocket)功能实现

这篇具有很好参考价值的文章主要介绍了vue3-pc端生成微信二维码、扫码支付监听支付回调(WebSocket)功能实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:后台系统中采购订单列表需要支持微信扫描支付功能,支付成功需要返回到订单列表。

一、根据后端接口返回生成二维码(QRCode)

调用接口接收后端返回数据, npm install qrcode --save 安装插件,处理返回数据生成二维码。

1. 后端接口返回数据如下:

vue3微信扫码支付,websocket,前端,经验分享,vue,微信

2. 前端代码如下:

<template>
  <div class="pay-weixin">
    <img :src="qrCodeImgUrl">
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
import QRCode from 'qrcode' // 引入生成二维码插件qrcode
import { weChatNativePay } from '@/api/index'

const qrCodeImgUrl = ref('')

onMounted(() => {
  // 微信支付二维码接口
  weChatNativePay({
    amount: '',
    description: '',
    module: '',
    outTradeNo: ''
  }).then(res => {
    // 使用toDataURL方法 返回的是promise对象 通过.then取值
    let img = QRCode.toDataURL(res.data)
    img.then(t => {
      qrCodeImgUrl.value = t
    })
  })
})

</script>

3. 效果图如下:

vue3微信扫码支付,websocket,前端,经验分享,vue,微信

生成二维码功能到这就完成了,但是这个时候用户是否扫码支付,成功或失败的状态不能实时获取到,做不了扫码动作之后要完成的交互,如支付成功要返回列表。这个时候需要建立websocket连接来实时收到反馈。

二、建立websocket监听支付回调

1.建立一个websocket连接

// 定义scoket
const socket = ref(null)

// onopen()方法
const open = () => {
  // 注意wss和ws 协议是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要传的参数)}`)
  socket.value.onopen=()=>{
    // 需要处理的逻辑代码
  }
}

2. 接收消息

// onmessage()方法
const message = () => {
  socket.value.onmessage=(e)=>{
    // 后端返回的标识 判断是否支付成功
    let res = JSON.parse(e.data)
    if (res.data=='Payment succeeded') {
      ElMessage.success('支付成功')
    }
  }
}

3.长轮询防止连接断开

const open = () => {
  // 注意wss和ws 协议是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要传的参数)}`)
  socket.value.onopen=()=>{
    // 接收消息方法
    message()
    // 建立心跳机制防止无操作websocket断开连接  send()方法
    timers.value = setInterval(() => {
      const data = {message: 'heartbeat'} // 给后端传参 无要求可随意
      socket.value.send(JSON.stringify(data))
    },1000*30)
  }
}

4.离开页面关闭连接

// onclose()方法
const close = ()=>{
  socket.value?.close()
  socket.value.onclose=()=>{
    console.log('关闭了');
  }
  socket.value = null
}

// 页面销毁
onBeforeUnmount(() => {
  close()
})

完整代码及注释如下:

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
import { ElMessage, ElMessageBox } from "element-plus";

// 定义scoket
const socket = ref(null)

onMounted(() => {
  // 微信支付二维码接口
  weChatNativePay({
    amount: '',
    description: '',
    module: '',
    outTradeNo: ''
  }).then(res => {
    // 使用toDataURL方法 返回的是promise对象 通过.then取值
    let img = QRCode.toDataURL(res.data)
    img.then(t => {
      qrCodeImgUrl.value = t
    })
    // 二维码展示成功后开始建立websocket连接
    open()
  })
})


// 关闭websocket连接   onclose()方法
const close = ()=>{
  socket.value?.close()
  socket.value.onclose=()=>{
    console.log('关闭了');
  }
  socket.value = null
}

// 打开websocket   onopen()方法
const open = () => {
  // 注意wss和ws 协议是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要传的参数)}`)
  socket.value.onopen=()=>{
    // 接收消息方法
    message()
    // 建立心跳机制防止无操作websocket断开连接 send()方法
    timers.value = setInterval(() => {
      const data = {message: 'heartbeat'} // 给后端传参 无要求可随意
      socket.value.send(JSON.stringify(data))
    },1000*30)
  }
}

// 接收消息 处理支付成功逻辑   onmessage()方法
const message = () => {
  socket.value.onmessage=(e)=>{
    // 后端返回的标识 判断是否支付成功
    let res = JSON.parse(e.data)
    if (res.data=='Payment succeeded') {
      ElMessage.success('支付成功')
    }
  }
}

// 页面销毁时记得断开websocket连接
onBeforeUnmount(() => {
  close()
})

</script>

以上就是pc端微信支付功能的全部分享。文章来源地址https://www.toymoban.com/news/detail-519999.html

到了这里,关于vue3-pc端生成微信二维码、扫码支付监听支付回调(WebSocket)功能实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Vue3实现扫码枪扫码并生成二维码的代码解析

    在本文中,我们将介绍如何使用Vue3实现扫码枪扫描条形码或二维码,并将其转换为二维码的过程。这个过程将涉及到以下步骤: 在Vue3项目中安装和导入 vue-qrcode-reader 插件。 创建一个Vue3组件,用于渲染二维码。 在组件中实现扫码枪扫描条形码或二维码的逻辑。 将扫描到的

    2024年02月09日
    浏览(32)
  • 生成微信小程序发布上线后的二维码 、获取微信小程序二维码、微信小程序二维码如何生成?

    情景: 1、在微信小程序审核完成,发布到线上后,想通过扫描小程序二维码进入小程序 2、可分享二维码出去,通过二维码扫码进入小程序 方法: 1、进入微信小程序的后台配置。链接:微信公众平台。(如图一) 2、进入 “设置” -- “ 基本设置” -- “小程序码及线下物

    2024年02月12日
    浏览(37)
  • vue批量生成二维码,打印生成的二维码,并批量下载生成的二维码,qrcode

    通过使用 qrcode 生成二维码, 使用 jszip 打包批量二维码文件, 使用 file-saver 下载打包好的zip文件, 使用 vue-print-nb 打印生成的二维码 配置项: width 二维码宽度 height 二维码高度 errorCorrectionLevel 二维码纠错级别,指二维码被遮挡可以扫出结果的区域比例 color: 7. 打印生成的二

    2024年02月01日
    浏览(35)
  • 前端实现 微信扫码登录网站 pc端(二维码嵌套页面) 超详细,包会

    本人申明:本案例使用到的appid和AppSecret都是无效的 appid:应用唯一标识,在微信开放平台提交应用审核通过后获得 AppSecret:在微信开放平台提交应用审核通过后获得 1.在根目录html文件引入,既index.html 2.通过js添加节点 注意事项: 如果二维码出来,但是跳转失败,一定要看

    2024年02月04日
    浏览(69)
  • Taro+vue微信小程序根据字符串生成二维码图片,点击弹出图片,长按保存(可用!!!)

    效果:页面加载时生成二维码,点击二维码弹出图片,长按图片可保存。 借鉴了一个大佬的文章https://www.zhangshengrong.com/p/q0arZ9J4ax/#google_vignette

    2024年02月10日
    浏览(45)
  • 如何生成微信小程序二维码,小程序内页二维码

    你自己得有个微信公众号,只需要知道小程序的名字就可以了 生成小程序二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步选小程序码 小程序内页二维码 第一步编辑素材 第二步搜索小程序名字,然后回车,下一步 第三步点击‘获取更多路径’ 第四

    2024年02月15日
    浏览(37)
  • 微信小程序怎样生成体验版二维码?微信小程序怎么转化为二维码?

    方法:在微信开发者工具界面,右上角,点击上传,如果提示成功,说明已经上传成功。     网址: 微信公众平台 微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。 https://mp.weixin.qq.com/ 在微信公众号平台登录,选择需要生成二维码的小程序

    2024年02月10日
    浏览(57)
  • vue生成二维码

    本次将教大家如何只通过vue前端快速的生成二维码 安装依赖 通过命令 安装二维码生成的依赖包到我们的项目中 引入 在自己需要构建生成的页面进行引入 构建通用方法 ps: 其中里面的参数 classId 为html的class标签名称 value 为需要将哪些数据进行构建生成二维码 通过该方法,我

    2024年02月12日
    浏览(29)
  • 微信支付链接二维码生成

    1、进入composer官方网站,搜索phpqrcode安装包  composer命令安装 composer require aferrandini/phpqrcode 生成二维码图片的公共方法: 控制器调用:

    2024年02月07日
    浏览(35)
  • 前端vue项目:生成二维码,扫二维码跳转到相应页面

    Vue2项目 1、安装依赖::npm i arale-qrcode --save 2、引入:import AraleQRCode from \\\"arale-qrcode\\\"; 接下来让我们纯前端生成一个二维码                               【PS:亲测有效,大家可以放心使用 CV 大法哈  !】 HTML JS 需求中遇到的情况,也是百度了很久参考了很多大佬的文章

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包