收藏
回答

onShareAppMessage 分享取消后,app.js的onshow方法再次加密path?

业务场景:客户通过扫码小程序码领取优惠券,小程序码带参为99000002%3AC%3A100000139,解密后就是99000002:C:100000139,然后我再讲优惠券分享给朋友时,进行取消操作,此时app.js的onshow方法会再调用一次,参数则改变为99000002%253AC%253A100000139,请问这种情况要怎么规避。

回答关注问题邀请回答
收藏

3 个回答

  • 九歌^
    九歌^
    2023-06-02
    // 获取参数 app.js
    onLaunch(options) {
      this.globalData.query = options.query || {}
      if (options.referrerInfo) {
         this.globalData.query = Object.assign(this.globalData.query, options.referrerInfo.extraData)
      }
    },
    onShow(options) { // 这里打印并且解密你的二维码里的参数
      if (Object.keys(options.query).length > 0) {
          // 解决连续扫两次带参数的码,参数丢失的问题
          this.globalData.query = options.query || {}
          // 处理通过小程序码进来的参数,包括渠道码等,放置到全局数据中
          if (options.query.scene) {
            let queryObj = {}
            var strs = decodeURIComponent(options.query.scene).split('&') //以&分割
            for (var i = 0; i < strs.length; i++) {
              queryObj[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1])
            }
            Object.assign(this.globalData.query, queryObj)
          }
        }
      if (options.referrerInfo) {
         this.globalData.query = Object.assign(this.globalData.query, options.referrerInfo.extraData)
      }
    },
    globalData: {
      query: {}
    }
    


    // 页面js
    onLoad(options) {
       // 先从上个页面获取,再从app.js里获取,都没获取到给个空字符串做保护。
       this.setData({
         shareId: options.id || app.globalData.query.id || ''
       })
    }
    

    2023-06-02
    有用
    回复 3
    • 君安🐝
      君安🐝
      2023-06-02
      我复现了问题,流程是,扫描小程序码领券优惠券的时候,用户没有登录,我会让他去登录,成功后back返回到优惠券领取界面,这时候分享就会重复加密,我现在改成了注册后reLaunch跳转到领取优惠券界面,这时候点击分享就没问题,没有多次加密,这样改动最小
      2023-06-02
      回复
    • 九歌^
      九歌^
      2023-06-02回复君安🐝
      好的。你是不是调用分享的时候提前加密了?
      2023-06-02
      回复
    • 君安🐝
      君安🐝
      2023-06-02回复九歌^
      没有哦,是小程序码的带的参数会被加密好像,我打印出来看不是我分享的参数加密
      2023-06-02
      回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-06-02

    判断一下

    2023-06-02
    有用
    回复 2
    • 君安🐝
      君安🐝
      2023-06-02
      请问应该怎么判断呀
      2023-06-02
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2023-06-02回复君安🐝
      onShow这个方法,是离开小程序,再次访问,就会触发,你在这里面判断,是否已经加密,没有加密,在走加密流程,已经加密了,就不走加密了
      2023-06-02
      回复
  • 八九
    八九
    2023-06-02

    代码逻辑卡就可以了,比如,当有解密参数,不进行再次解密

    2023-06-02
    有用
    回复 2
    • 君安🐝
      君安🐝
      2023-06-02
      我公司的小程序需要扫描带参的小程序码才能用,还分A角色和C角色,所以需要在onshow里面解密判断进入不同的界面。但是不知道为什么取消分享的时候会把小程序码的参数再次加密,这时候就和我之前onshow的判断冲突了
      2023-06-02
      回复
    • 八九
      八九
      2023-06-02回复君安🐝
      onshow的生命周期先了解下,你取消分享相当于重新调用onshow了,肯定会又加解密
      2023-06-02
      回复
登录 后发表内容