扫描二维码跳转uniapp小程序并携带动态参数

前提准备:

  1. 接口用https域名,并且小程序要发布上线

1.登录开发者后台

开发管理 -> 扫普通二维码打开小程序


image.png
Snipaste_2024-10-17_10-14-32.png

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

参考链接:
https://blog.csdn.net/zuowentao666/article/details/133903679?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-1-133903679-blog-132037890.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-1-133903679-blog-132037890.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。