uniapp 生成小程序遇到问题:
1、参数地址过长
2、接收scene参数解析
一、请求服务端:获取不限制小程序码图片地址并写入临时目录,将小程序码绘制到海报中分享转发
uniapp canvas 生成海报 小程序码 二维码_星星~笑笑的博客-CSDN博客
//获取不限制小程序
getUnlimitedQRCode() {
uni.showLoading({
title: '加载中...'
})
let that = this;
var url_link = "lId=" + this.livingId + "&uid=" + this.userInfo.userId
var env_version = "release"
if (this.$config.dev == 1) {
env_version = "trial"
}
let params = {
appId: this.userInfo.appId,
page: 'pages/index/liveDetail',
scene: encodeURIComponent(url_link),//scene长度不能超过限制,且要encodeURIComponent
env_version: env_version //'release' 正式版; 'trial' 体验版; 'develop'开发版
};
//服务端接口
getUnlimitedQRCode(
params
).then((response) => {
uni.hideLoading()
var base64Img = 'data:image/PNG;base64,' + err;
that.getToLocal(base64Img)
})
.catch(err => {
var base64Img = 'data:image/PNG;base64,' + err;
//保存到本地临时目录
that.getToLocal(base64Img)
});
},
//保存到本地临时目录
getToLocal(base64data) {
var that = this
// var base64data = ""; // base64
const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src'; //自定义文件名
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
if (!format) {
return (new Error('ERROR_BASE64SRC_PARSE'));
}
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
//要转化成 ArrayBuffer 对象的 Base64 字符串
const buffer = wx.base64ToArrayBuffer(bodyData);
//写入文件到临时目录
fsm.writeFile({
filePath,//临时目录地址
data: buffer,
encoding: 'binary',
success(r) {
uni.hideLoading()
that.qrCode = filePath
},
fail() {
uni.hideLoading()
return (new Error('ERROR_BASE64SRC_WRITE'));
},
});
},
二、通过分享的海报扫描小程序码,进入小程序
接收小程序码传过来的参数
async onLoad(options) {
await this.$onLaunched
if (options.livingId) { //livingRoom
this.livingId = options.livingId
}
//被邀请用户进入小程序*************start***********
//接收到的scene要decodeURIComponent
var decode_link = decodeURIComponent(options.scene)
//将 lId=1&uid=2格式转化为对象
let resObj = {}
let regParam = /([^&=]+)=([\w\W]*?)(&|$|#)/g
let strParam = decode_link;
let result
while ((result = regParam.exec(strParam)) != null) {
resObj[result[1]] = result[2]
}
if (resObj.lId) {
this.livingId = resObj.lId
}
if (resObj.uid) {
this.inviteUserId = resObj.uid
}
//被邀请用户进入小程序*************end***********
},
通过以上操作,即可得到scene参数对象,欢迎留言评论,共同进步!