微信小程序 生成攜帶參數(shù)的二維碼
第一步第二步都要必須由后端完成,返回圖片地址給前端!!原因??如下圖:


想了解,想嘗試的可以看看:
第一步:獲取ACCESS_TOKEN
// 這一步 前端可以試試請求玩玩,一般由后端獲取access_Token。后端請求微信API接口時會用到這個access_Token,前端
再請求會造成重復(fù)請求,會使之前的access_token過期。
第二步:獲取小程序二維碼并渲染:
wx.request({
// url:'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + accessToken, // a
// url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + accessToken, // b
url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token' + accessToken, // c
method: "POST",
data: {
'path': "/pages/index/index?openid=" + openid, // 攜參數(shù)openid
'width': '430'
},
responseType: 'arraybuffer',
success: function (res) {
console.log(res.data) // 二維碼
that.setData({
qrcode: res.data
})
},
fail: function (res) {
console.log('fail')
}
})
最后結(jié)果會出現(xiàn)小程序亂碼,(這是個二進(jìn)制流文件):

解決?
可以利用微信小程序拓展接口,(后臺轉(zhuǎn)二進(jìn)制流也是可以的,后臺獲取后,直接保存為圖片,然后將圖片路徑返回給前臺)。
wx.arrayBufferToBase64(arrayBuffer) 可以將二進(jìn)制流轉(zhuǎn)為base64,拓展接口方法地址
// 前端請求完整方法:
wx.request({
// url:'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + accessToken, // a
// url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + accessToken, // b
url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token' + accessToken, // c
method: "POST",
data: {
'path': "/pages/index/index?openid=" + openid, // 攜參數(shù)openid
'width': '430'
},
responseType: 'arraybuffer', // arraybuffer是以數(shù)組的語法處理二進(jìn)制數(shù)據(jù),稱為二進(jìn)制數(shù)組。
success: function (res) {
let data = wx.arrayBufferToBase64(res.data);
that.setData({
qrcode: 'data:image/png;base64,' + data
})
},
fail: function (res) {
console.log('fail')
}
})
wxml文件:
<image src='{{qrcode}}' />
這樣二維碼就可以出現(xiàn)了,
首頁獲取二維碼參數(shù)
onLoad: function (options) {
// console.log(options.openid)
if (options.openid) {
wx.setStorageSync('openid', options.openid) // 將openid緩存
}
}
要使用的時候,拿緩存則:let openid = wx.getStorageSync("openid");
如果后端給你傳的是base64?
那么恭喜你,本該傳圖片路徑給你...
解決base64圖片顯示的方法:
var array = wx.base64ToArrayBuffer(res.data.data)
var base64 = wx.arrayBufferToBase64(array)
if (res.statusCode == 200) {
that.setData({
qrcode: 'data:image/jpeg;base64,' + base64, // data 為接口返回的base64字符串
})
}
附:前端請求獲取access_token與小程序二維碼(試試)
wx.request({
// 獲取token
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',
data: {
appid: '***', // 小程序appid
secret: '***' // 小程序秘鑰
},
success(res) {
// res.data.access_token
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + res.data.access_token,
method: 'POST',
data: {
'path': "/pages/index/index",
"width": 430
},
success(res) {
console.log(res.data)
// 后臺轉(zhuǎn)二進(jìn)制流,后臺獲取后,直接保存為圖片,然后將圖片路徑返回給前臺
// 前端轉(zhuǎn),如上
}
})
}
})
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Js判斷參數(shù)(String,Array,Object)是否為undefined或者值為空
在一些前端控件要提交數(shù)據(jù)到服務(wù)器端的數(shù)據(jù)驗證過程中,需要判斷提交的數(shù)據(jù)是否為空。如果是普通表單的字符串?dāng)?shù)據(jù),只需要在 trim 后判斷 length 即可,而這里需要的數(shù)據(jù)可以是各種不同的類型,通過 JSON.stringify(data) 進(jìn)行序列化后再傳遞2013-11-11
javascript 構(gòu)建一個xmlhttp對象池合理創(chuàng)建和使用xmlhttp對象
在我的這篇舊文里曾經(jīng)發(fā)布了一個簡單的ajax操作類。我們發(fā)現(xiàn),在舊文里創(chuàng)建xmlhttp對象的時候,每次都要new一個對象。而我們都知道new一個對象的開銷是很大的。2010-01-01
js實(shí)現(xiàn)Select列表各項上移和下移的方法
這篇文章主要介紹了js實(shí)現(xiàn)Select列表各項上移和下移的方法,涉及javascript動態(tài)操作頁面元素屬性值的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
JS前端開發(fā)判斷是否是手機(jī)端并跳轉(zhuǎn)操作(小結(jié))
這篇文章主要介紹了JS前端開發(fā)判斷是否是手機(jī)端并跳轉(zhuǎn)操作,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02
js實(shí)現(xiàn)表格數(shù)據(jù)搜索
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)表格數(shù)據(jù)搜索,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08
uni-app 組件里面獲取元素寬高的實(shí)現(xiàn)
這篇文章主要介紹了uni-app 組件里面獲取元素寬高的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

