国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3-pc端生成微信二維碼、掃碼支付監(jiān)聽支付回調(diào)(WebSocket)功能實現(xiàn)

這篇具有很好參考價值的文章主要介紹了vue3-pc端生成微信二維碼、掃碼支付監(jiān)聽支付回調(diào)(WebSocket)功能實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目場景:后臺系統(tǒng)中采購訂單列表需要支持微信掃描支付功能,支付成功需要返回到訂單列表。

一、根據(jù)后端接口返回生成二維碼(QRCode)

調(diào)用接口接收后端返回數(shù)據(jù), npm install qrcode?--save 安裝插件,處理返回數(shù)據(jù)生成二維碼。

1. 后端接口返回數(shù)據(jù)如下:

vue3微信掃碼支付,websocket,前端,經(jīng)驗分享,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,前端,經(jīng)驗分享,vue,微信

生成二維碼功能到這就完成了,但是這個時候用戶是否掃碼支付,成功或失敗的狀態(tài)不能實時獲取到,做不了掃碼動作之后要完成的交互,如支付成功要返回列表。這個時候需要建立websocket連接來實時收到反饋。

二、建立websocket監(jiān)聽支付回調(diào)

1.建立一個websocket連接

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

// onopen()方法
const open = () => {
  // 注意wss和ws 協(xié)議是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要傳的參數(shù))}`)
  socket.value.onopen=()=>{
    // 需要處理的邏輯代碼
  }
}

2.?接收消息

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

3.長輪詢防止連接斷開

const open = () => {
  // 注意wss和ws 協(xié)議是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要傳的參數(shù))}`)
  socket.value.onopen=()=>{
    // 接收消息方法
    message()
    // 建立心跳機(jī)制防止無操作websocket斷開連接  send()方法
    timers.value = setInterval(() => {
      const data = {message: 'heartbeat'} // 給后端傳參 無要求可隨意
      socket.value.send(JSON.stringify(data))
    },1000*30)
  }
}

4.離開頁面關(guān)閉連接

// onclose()方法
const close = ()=>{
  socket.value?.close()
  socket.value.onclose=()=>{
    console.log('關(guān)閉了');
  }
  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()
  })
})


// 關(guān)閉websocket連接   onclose()方法
const close = ()=>{
  socket.value?.close()
  socket.value.onclose=()=>{
    console.log('關(guān)閉了');
  }
  socket.value = null
}

// 打開websocket   onopen()方法
const open = () => {
  // 注意wss和ws 協(xié)議是http的使用ws,是https的使用wss
  socket.value = new WebSocket(`wss://xxx(后端提供接口)/${xxx(要傳的參數(shù))}`)
  socket.value.onopen=()=>{
    // 接收消息方法
    message()
    // 建立心跳機(jī)制防止無操作websocket斷開連接 send()方法
    timers.value = setInterval(() => {
      const data = {message: 'heartbeat'} // 給后端傳參 無要求可隨意
      socket.value.send(JSON.stringify(data))
    },1000*30)
  }
}

// 接收消息 處理支付成功邏輯   onmessage()方法
const message = () => {
  socket.value.onmessage=(e)=>{
    // 后端返回的標(biāo)識 判斷是否支付成功
    let res = JSON.parse(e.data)
    if (res.data=='Payment succeeded') {
      ElMessage.success('支付成功')
    }
  }
}

// 頁面銷毀時記得斷開websocket連接
onBeforeUnmount(() => {
  close()
})

</script>

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

到了這里,關(guān)于vue3-pc端生成微信二維碼、掃碼支付監(jiān)聽支付回調(diào)(WebSocket)功能實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包