最近開發(fā)的vue移動(dòng)端項(xiàng)目剛好涉及到掃一掃的功能。第一次遇到绎晃,也是費(fèi)了九牛二虎之力其實(shí)就是被一個(gè)小坑給坑死
才把它搞定谬俄。
1.綁定域名
在微信公眾號(hào)平臺(tái)中配置安全域名: 公眾號(hào)設(shè)置 - 功能設(shè)置 - JS接口安全域名
image.png
詳細(xì)操作可以參考 :微信JS-SDK說明文檔
2.引用js文件
npm install weixin-js-sdk --save
<script>
import wx from 'weixin-js-sdk'
export default {
}
</script>
3.通過config接口注入權(quán)限驗(yàn)證配置
簽名算法見文末的附錄1醇蝴,所有JS接口列表見文末的附錄2
wx.config({
debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù)导坟,可以在pc端打開屿良,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印惫周。
appId: '', // 必填尘惧,公眾號(hào)的唯一標(biāo)識(shí)
timestamp: , // 必填,生成簽名的時(shí)間戳
nonceStr: '', // 必填递递,生成簽名的隨機(jī)串
signature: '',// 必填褥伴,簽名
jsApiList: [] // 必填,需要使用的JS接口列表
});
在頁面上的具體操作如下 ↓ -- 放到你需要處理的地方
// 獲取微信簽名
$.ajax({
url: '后端給的接口',
data: { // 具體參數(shù)看后臺(tái)給你的文檔漾狼,我的只需要一個(gè)url
url: location.href.splic('#')[0],
// 這里是當(dāng)前頁面的url重慢,一定要 location.href 獲取,不然簽名會(huì)無效逊躁。
},
success: function (res) {
// res 返回的簽名等數(shù)據(jù)
}
})
wx.config({
debug: false,
appId: res.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
timestamp: res.timeStamp, // 必填,生成簽名的時(shí)間戳
nonceStr: res.nonceStr, // 必填,生成簽名的隨機(jī)串
signature: res.signature, // 必填,簽名
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表
})
wx.ready(function () {
// config信息驗(yàn)證成功后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后
// config 是一個(gè)客戶端的異步操作,所以如果需要在頁面加載時(shí)調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行.對(duì)于用戶觸發(fā)是才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中
wx.checkJsApi({ // 判斷當(dāng)前客戶端版本是否支持指定JS接口
jsApiList: [
'scanQRCode'
],
success: function (res) { // 以鍵值對(duì)的形式返回似踱,可用true,不可用false稽煤。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}
if (res.checkResult.scanQRCode === true) {
wx.scanQRCode({ // 微信掃一掃接口
desc: 'scanQRCode desc',
needResult: 1, // 默認(rèn)為0核芽,掃描結(jié)果由微信處理,1則直接返回掃描結(jié)果酵熙,
scanType: ['qrCode', 'barCode'], // 可以指定掃二維碼還是一維碼轧简,默認(rèn)二者都有
success: function (res) {
const getCode = res.resultStr // 當(dāng)needResult 為 1 時(shí),掃碼返回的結(jié)果
}
})
} else {
alert('抱歉匾二,當(dāng)前客戶端版本不支持掃一掃')
}
},
fail: function (res) { // 檢測getNetworkType該功能失敗時(shí)處理
alert('fail' + res)
}
})
})
/* 處理失敗驗(yàn)證 */
wx.error(function (res) {
// config 信息驗(yàn)證失敗會(huì)執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗(yàn)證失敗,具體錯(cuò)誤信息可以打開config的debug模式查看,也可以在返回的res參數(shù)中查看,對(duì)于SPA可以在這里更新簽名
alert('配置驗(yàn)證失敗: ' + res.errMsg)
})
具體的簽名等數(shù)據(jù)都是后臺(tái)大佬處理好了哮独,小前端調(diào)用接口拿數(shù)據(jù)就好啦。