前提准备:
- 接口用https域名,并且小程序要发布上线
1.登录开发者后台
开发管理 -> 扫普通二维码打开小程序
2.生成二维码
测试链接拷贝下来
如果在pc端,可以把参数配置好:
https://www.****.com/staticFile/pages/firmRegister/firmRegister?id=测试ID
然后用一些插件把链接转成二维码显示即可
(浏览器里面搜索草料二维码可以直接生成,测试用)
3.uniapp 页面onLoad中接受参数
小程序携带返回的参数名默认是q, 所有值都在q对象里面,拿到q之后要用decodeURIComponent解码
onLoad(options) {
// options = {"q": "https%3A%2F%2Fwww.yueguidianli.com%2FstaticFile%2Fimages%3Fid%3D2",
// "scancode_time": "1727591721"}
if (options && options.id) { // 没有q但是有其他参数,说明是从页面直接跳转
this.inviterId = options.id
} else if (options && options.q) { // 扫二维码跳转
const query = utils.sharedParameterAnalysis(options)
if (query && query.id) {
this.inviterId = query.id
}
}
},
class Utils {
// 小程序分享进入或二维码进入封装方法
static sharedParameterAnalysis(options) {
// 小程序分享跳转处理
if (options?.share) {
console.log("小程序分享,路径为" + options.path + "参数为" + options.query);
// 小程序分享跳转处理
// uni.navigateTo({
// url: "/" + options.path + "?" + options.query,
// });
} else if (options?.q) {
// 小程序自动加密,需要解码
const url = decodeURIComponent(options.q);
const params = {};
// 自定义参数拼接
if (url.includes('?') && !url.includes('&')) {
const queryStr = url.split('?')[1]
const paramList = queryStr.split('=')
if (paramList.length) {
params.query = {
id: paramList[1]
}
}
} else {
const regex = /[?&]([^=#]+)=([^&#]*)/g;
let match;
while ((match = regex.exec(url))) {
params[match[1]] = match[2];
}
}
console.log("二维码分享,路径为" + params.path + "参数为" + params.query, url);
// 小程序分享跳转处理
// uni.navigateTo({
// url: "/" + params.path + "?" + params.query,
// });
return params.query
} else {
// 未知参数
console.log("未知参数");
uni.showToast({
title: "未知参数",
icon: "none",
});
}
}
}
export default Utils