微信扫码进入小程序

 这几天开发完小程序之后,需要实现微信扫码进入小程序,坎坎坷坷的过程终于实现了,现在做一总结:

 1、配置二维码规则:

2、页面插入代码即可:

onLoad: function(options) {
    console.log("index 生命周期 onload" + JSON.stringify(options))
    //在此函数中获取扫描普通链接二维码参数
    let q = decodeURIComponent(options.q)
    if (q) {
      console.log("index 生命周期 onload url=" + q);
    }
    var exist = q.indexOf("?");
    console.log(exist);
    if (exist != -1) { //扫码进入
      var paramsId = q.split('?')[1].split('=')[1];
      console.log('扫码进入,paramsId:', paramsId);
    } else { // 正常点击进入
      console.log('正常点击进入');
    }
  },

3、拿到参数之后就进行相应的请求即可。

 

转载于:https://www.cnblogs.com/xiaoyaoxingchen/p/9799754.html

微信进入小程序时,参数丢失是一个较为常见的问题,尤其是在不同设备和浏览器环境下,参数传递的稳定性会受到影响。为解决这一问题,需要从参数编、缓存机制、路径编和服务器中转等多个方面进行优化。 在进入小程序时,参数通常通过 URL 拼接的方式传递,例如 `/page/index/param=1`。然而,当用户手动关闭或删除小程序后再次进入时,原始 URL 中的参数可能无法获取到,导致数据丢失。针对这一问题,可以采用微信提供的本地缓存机制 `wx.setStorageSync()` 和 `wx.getStorageSync()` 来保存和读取关键参数。在用户首次进入小程序时,将参数存储到本地缓存中;在后续进入时,即使 URL 中未携带参数,也可以从缓存中读取,从而保证数据的连续性。该方法特别适用于需要区分不同门店、用户身份或页面状态的场景[^2]。 此外,由于微信浏览器在 iOS 设备上对长 URL 的截断问题,建议在生成二维时尽量缩短 URL 长度,或将参数编到路径中而非查询字符串中。例如,将 `https://example.com?id=123` 改为 `https://example.com/123`,然后在前端或后端解析路径中的参数,以避免参数丢失。这种路径编方式能有效规避 iOS 微信浏览器对 URL 的截断限制,同时保持参数的完整性[^3]。 在目标页面的 `onLoad` 生命周期中,应优先处理进入的情况。通过判断 `options.q` 参数是否存在,可以识别用户是否通过进入,并进一步解析二维中的参数内容。由于二维内容可能包含完整的 URL,因此需要使用 `decodeURIComponent()` 对其进行解,并通过正则表达式提取所需参数。例如,从解后的 URL 中提取 `code` 参数,用于后续页面逻辑处理或接口调用: ```javascript onLoad(options) { if (options.q) { const decodedUrl = decodeURIComponent(options.q); const codeMatch = decodedUrl.match(/code=([^&]+)/); const stationCode = codeMatch ? codeMatch[1] : null; if (stationCode) { uni.showToast({ title: '有效的二维', icon: 'none' }); } else { uni.showToast({ title: '无效的二维', icon: 'none' }); } } } ``` 为确保参数传递的可靠性,还可以结合服务器中转机制。将传递的参数先发送到服务器进行存储,随后在小程序中通过接口请求获取这些参数。这种方式不仅避免了 URL 参数丢失的问题,还能提升参数传递的安全性,适用于涉及用户身份、订单信息或敏感数据的场景。 最后,为应对微信功能在不同平台上的行为差异,建议在开发过程中对 iOS 和 Android 设备进行差异化处理。例如,通过检测用户代理(User-Agent)判断设备类型,并根据设备特性选择不同的参数解析策略,以确保功能在所有平台上的稳定运行。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值