uniapp實現(xiàn)微信H5掃碼功能的完整步驟
最近用uniapp開發(fā)h5 實現(xiàn)掃碼功能
前端界面如圖
首先打開uniapp官網(wǎng),在uni-app官網(wǎng)上發(fā)現(xiàn)uni-app不支持H5掃碼功能。失望ing
but 往官網(wǎng)下面看 有幾行提示信息 驚喜ing
話不多說 上才藝
步驟一:引入sdk
這里有兩種引入方式:
1.按照文檔的方法,下載js文件,直接引入到項目里
2.通過npm安裝
npm install weixin-js-sdk --save // 按需引入 import wx from 'weixin-js-sdk';
步驟二:配置微信config信息
// 最好是在onLoad中調(diào)用 onLoad: function () { this.getCofig(); }, methods: { // 配置信息 getCofig() { const that = this; let url = ''; let ua = navigator.userAgent.toLowerCase(); url = window.location.href.split('#')[0]; //獲取到的url是當前頁面的域名 // GetWeixinScan 后端提供配置信息 uni.request({ url: '/api/goods/wx/wx_jsapi_ticket', // 此處找后端要接口 微信不能使用端口訪問端口改為 wx method: 'GET', data: { url: url // 當前頁面的域名 }, success: (response) => { const res = response.data; console.log(res, 'resres') if (res) { that.wxConfig( res.appId, res.timestamp, res.nonceStr, res.signature ); } else { alert('獲取配置信息返回為空'); } } , fail: error => { console.log(error, '請求獲取微信配置失敗 請求方法:http://xx.haileer.top:8901/wx_jsapi_ticket'); } }); }, //wx.config的配置 wxConfig(appId, timestamp, nonceStr, signature) { wx.config({ debug: false, // 開啟調(diào)試模式, appId: appId, // 必填,企業(yè)號的唯一標識 timestamp: timestamp, // 必填,生成簽名的時間戳 nonceStr: nonceStr, // 必填,生成簽名的隨機串 signature: signature, // 必填,簽名 jsApiList: ['scanQRCode', 'checkJsApi'], // 必填,需要使用的JS接口列表 }); wx.ready(() => { console.log('配置完成,掃碼前準備完成') }) wx.error(function (res) { alert('出錯了:' + res.errMsg); //wx.config配置錯誤,會彈出窗口哪里錯誤,然后根據(jù)微信文檔查詢即可。 }); }, }
步驟三:觸發(fā)事件實現(xiàn)掃碼功能
// 點擊掃碼 區(qū)分普通掃碼和H5掃碼 scan() { const that = this // #ifndef H5 uni.scanCode({ success: function (res) { console.log("進來了1") console.log('條碼res:' + res); console.log('條碼類型:' + res.scanType); console.log('條碼內(nèi)容:' + res.result); }, fail: error => { console.log("暫不支持1") } }); // #endif // #ifdef H5 // this.log("暫不支持H5掃碼 走onScan這個方法") this.onScan() // #endif }, // h5掃描二維碼并解析 onScan() { const that = this; wx.scanQRCode({ needResult: 1, // 默認為0,掃描結(jié)果由微信處理,1則直接返回掃描結(jié)果, scanType: ['qrCode', 'barCode'], // 可以指定掃二維碼還是一維碼,默認二者都有 success: function (res) { var result = res.resultStr; // 當 needResult 為 1 時,掃碼返回的結(jié)果 var resultArr = result.split(','); // 掃描結(jié)果以逗號分割數(shù)組 var codeContent = resultArr[resultArr.length - 1]; // 獲取數(shù)組最后一個元素,也就是最終的內(nèi)容 }, fail: function (response) { console.log("調(diào)用掃碼失敗") that.$toast(response); alert(' wx.scanQRCode失敗') }, }); },
注意事項
在調(diào)用后端接口獲取config信息的時候
1.后端提供的接口 端口號使用wx代替
2.傳給后端的url參數(shù),記得一定是網(wǎng)頁域名 const url = location.href.split(‘#’)[0]
3.可以提醒后端把jsapi_ticket的值也返回,便于在自行使用工具校驗簽名算法的時候輸入
4.可以提醒后端把timestamp把后三位數(shù)去掉,因為簽名校驗中的timestamp最多只能輸入10位
補充:uniapp 微信公眾號H5掃碼功能
uniapp 不支持H5掃碼功能 所以需要調(diào)用微信的SDK
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#2
第一步 先下載sdk文件,然后引入 index.js文件 也可以放在components方法里
npm install jweixin-module --save
第二步 調(diào)接口返回config配置信息
//在onload 中調(diào)用,找后臺要接口?。?! var apiUrl = location.href.split("#")[0] uni.request({ url: api.api.getJsSdkConfig, data: { url: apiUrl,//當前頁面的域名 api: ['scanQRCode'],//調(diào)用的方法去接口列表里找 }, success: function(res) { var wxData = JSON.parse(res.data.data.config) that.wx_sanCode(wxData) } })
//掃碼 wx_sanCode: function(wxData) { wx.config({ debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。 appId: wxData.appId, // 必填,公眾號的唯一標識 timestamp: wxData.timestamp, // 必填,生成簽名的時間戳 nonceStr: wxData.nonceStr, // 必填,生成簽名的隨機串 signature: wxData.signature, // 必填,簽名 jsApiList: wxData.jsApiList // 必填,需要使用的JS接口列表 }) wx.ready(function() { // config信息驗證后會執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行。對于用戶觸發(fā)時才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。 wx.checkJsApi({ jsApiList: ['scanQRCode'], // 需要檢測的JS接口列表,所有JS接口列表見附錄2, success: function(res) { console.log('返回信息') console.log(res) // 以鍵值對的形式返回,可用的api值true,不可用為false // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} } }); }); wx.error(function(res){ // config信息驗證失敗會執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗證失敗,具體錯誤信息可以打開config的debug模式查看,也可以在返回的res參數(shù)中查看,對于SPA可以在這里更新簽名。 console.log(res,'接口驗證失敗') }); }
然后就是點擊事件乎起掃碼功能
//掃碼 bindsaoQRcode:function(){ wx.scanQRCode({ needResult: 1, // 默認為0,掃描結(jié)果由微信處理,1則直接返回掃描結(jié)果, scanType: ["qrCode","barCode"], // 可以指定掃二維碼還是一維碼,默認二者都有 success: function (res) { console.log(res); console.log('掃碼') var result = res.resultStr; // 當needResult 為 1 時,掃碼返回的結(jié)果 window.location.href = result //安卓機型跳轉(zhuǎn)渲染有問題 所以要加這句 } }); },
總結(jié)
到此這篇關(guān)于uniapp實現(xiàn)微信H5掃碼功能的文章就介紹到這了,更多相關(guān)uniapp微信H5掃碼功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript性能優(yōu)化之分時函數(shù)的介紹
本篇文章主要介紹了javascript性能優(yōu)化之分時函數(shù)的介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03獲取客戶端網(wǎng)卡MAC地址和IP地址實現(xiàn)JS代碼
獲取客戶端的一些信息,如IP和MAC,以結(jié)合身份驗證,相信很多人都會這樣做吧,我們這里用Javascript,這樣做的好處是不需要服務(wù)器端進行處理,有客戶端自行獲取,感興趣的你可以參考下哈2013-03-03詳談js中數(shù)組(array)和對象(object)的區(qū)別
下面小編就為大家?guī)硪黄斦刯s中數(shù)組(array)和對象(object)的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02js生成1到100的隨機數(shù)最簡單的實現(xiàn)方法
在本篇文章里小編給大家整理了關(guān)于js生成1到100的隨機數(shù)最簡單的實現(xiàn)方法,有需要的朋友們可以學習下。2020-02-02