微信小程序,分享私密信息后,被分享者打开链接后没有获取到正确值?

做了一个小程序有如下场景,分享页面给指定用户后,希望能查看该链接的是指定用户,而不是其他用户,比如A发分享给B,那么只能B查看,如果B将信息转发给C,C则不能查看该信息(不采用禁止分享的方式)。

代码如下:

onShareAppMessage: function (options) {
    let that = this
    return new Promise(resolve => {
        http.httpGet('ShareBus/wx_getActivityId',
          function (res) {
            if (res) {
              if (res.success && res.msgType == 200) { //业务正确
                let rectiveId = res.resultSet
                //设置私密消息,在群聊中也不可转发
                wx.updateShareMenu({
                  withShareTicket: true, //分享时是否携带ShareTicket
                  isPrivateMessage: false,//只是做禁止分享可以不用activityId
                  activityId: rectiveId
                })

                resolve(that.handleShare(options))

              }
            }
          }
        )
    })
},

handleShare(options) {
    let cardObj = options.target.dataset.obj 
    let title = "您好,我是" + cardObj.name + ",这是我的名片"
    // 设置菜单中的转发按钮触发转发事件时的转发内容

    let shareObj = {
      title: title,
      path: '/pages/busCard/home/home',
      imageUrl: cardObj.bigProfileUrl,
    };
    return shareObj;
},

然后我想在app.js里面onShow判断查看当前分享的用户是否能够查看私密信息:

但是 shareTicket 获取到的一直都是 undefined


onShow(options) {

    const { shareTicket,referrerInfo } = options
    //获取到的 shareTicket 一直是 undefined
    if(shareTicket){
      this.authPrivate(shareTicket)
    }
  },
  authPrivate(shareTicket,callback){
    let that = this
    wx.authPrivateMessage({
      shareTicket: shareTicket,
      success(res) {
        if(res.valid == true){
          //提示这个人是私密分享的接受者 可以参与活动
          
        }else{
          //提示这个人是不是私密分享的接受者
          
        }
      },
      fail(res) {
      
      }
    })
},
阅读 3k
1 个回答
handleShare(options) {
  let cardObj = options.target.dataset.obj;
  let title = "你好,我是" + cardObj.name + ",这是我的名片";
  let shareObj = {
    title: title,
    path: '/pages/busCard/home/home',
    imageUrl: cardObj.bigProfileUrl,
  };
  return shareObj;
}

然后,修改onShareAppMessage函数:

onShareAppMessage: function (options) {
  let that = this;
  return new Promise(resolve => {
    http.httpGet('ShareBus/wx_getActivityId',
      function (res) {
        if (res) {
          if (res.success && res.msgType == 200) { //业务正确
            let rectiveId = res.resultSet;
            
            wx.updateShareMenu({
              withShareTicket: true, //分享时是否携带ShareTicket
              isPrivateMessage: false, //只是做禁止分享可以不用activityId
              activityId: rectiveId
            });

            resolve(that.handleShare(options)); // 传递options参数给handleShare函数

          }
        }
      }
    );
  });
},

app.json文件:

son{
  "pages": [...],
  "window": {...},
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序定位"
    },
    "scope.userInfo": {
      "desc": "你的基本信息将用于小程序登录和授权"
    },
    "scope.userLocationBackground": {
      "desc": "你的位置信息将持续保持后台定位"
    },
    "scope.writePhotosAlbum": {
      "desc": "你的图片信息将保存在相册中"
    },
    "scope.camera": {
      "desc": "你的相机将用于小程序拍照"
    },
    "scope.record": {
      "desc": "你的麦克风将用于小程序录音"
    },
    "scope.album": {
      "desc": "你的图片将用于小程序展示"
    },
    "scope.invoiceTitle": {
      "desc": "你的抬头信息将用于小程序

app.json文件里:

json{
  "pages": [...],
  "window": {...},
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序定位"
    },
    "scope.userInfo": {
      "desc": "你的基本信息将用于小程序登录和授权"
    },
    "scope.userLocationBackground": {
      "desc": "你的位置信息将持续保持后台定位"
    },
    "scope.writePhotosAlbum": {
      "desc": "你的图片信息将保存在相册中"
    },
    "scope.camera": {
      "desc": "你的相机将用于小程序拍照"
    },
    "scope.record": {
      "desc": "你的麦克风将用于小程序录音"
    },
    "scope.album": {
      "desc": "你的图片将用于小程序展示"
    },
    "scope.invoiceTitle": {
      "desc": "你的抬头信息将用于小程序发票"
    },
    "scope.werun": {
      "desc": "你的微信运动步数将用于小程序展示"
    },
    "scope.withShareTicket": {
      "desc": "你的分享信息将用于小程序展示",
      "withShareTicket": true
    }
  }
}

把用户的标识信息加到链接里,

shareObj = {
  title: title,
  path: '/pages/busCard/home/home?userId=' + cardObj.userId, 
  imageUrl: cardObj.bigProfileUrl,
};

然后:

onLoad(options) {
  let userId = options.userId; 
  let currentUser = getCurrentUser(); 
  if (userId === currentUser.userId) {
    // 指定用户可以查看私密信息
  } else {
    // 非指定用户,无法查看私密信息
  }
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题