BUG一:我们小程序有个需求,就是通过微信公众号消息查看到小程序中的详情页面,公众号消息点击时会传一个task_id参数到授权页面,授权页面登陆成功后,通过wx.getLaunchOptionsSync方法获取到scene场景值,判断scene为1043后就跳转到详情页面,(每个消息模版所带的task_id不同),但是我发现,点击模板消息后,只有第一次带的task_id,后面不管点哪个消息模板,传到小程序的task_id始终是第一个消息的task_id。(下面截图)
BUG二:如果第一次通过下拉打开小程序(冷启动),再从微信消息模版打开小程序,获取到的场景值居然是1089(微信聊天主界面下拉,「最近使用」栏(基础库2.2.4版本起包含「我的小程序」栏)),而只有在第一次通过微信公众号消息模版冷启动时,得到的场景值是1043。
这里是我授权页面,使用的判断方法,通过参数和场景值,来判断要不要跳转,我想知道这是微信官方的BUG还是我写的代码逻辑不好?各位有遇到过这种问题么?怎么解决的呢
// 判断登录时是否要通过场景值来跳转页面
launchOptionLogin() {
const that = this;
const dataInfo = wx.getLaunchOptionsSync();
console.log("场景值:", dataInfo);
const {
scene,
query
} = dataInfo;
const {
taskid
} = query;
if ((scene == "1043" || scene == "1014") && query && taskid) {
wx.navigateTo({
url: `/pages/tranManage/tranDetail/index?taskid=${taskid}`//事务的详情页
})
} else {
wx.switchTab({
url: "/pages/index/index" //首页
})
}
},
// 这是授权页面的全部代码
import Dialog from '../../miniprogram_npm/[@vant](/user/vant)/weapp/dialog/dialog';
import Notify from '../../miniprogram_npm/[@vant](/user/vant)/weapp/notify/notify';
const app = getApp();
const {interfaceUrl} = app.globalData;
Page({
/**
* 页面的初始数据
*/
data: {
authBtnShow:false,//显示授权
code:"",
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
/**
* 生命周期函数--监听页面加载
*/
onShow: function (options) {
const that = this;
wx.login({
success(res){
const {code} = res;
that.setData({
code,
},()=>{
that.getAuthSetting();
})
}
})
},
getAuthSetting(){
const that = this;
wx.getSetting({
success (res){
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
that.setData({
authBtnShow:false,
})
wx.getUserInfo({
success: function(res) {
const {encryptedData,iv} = res;
that.loginHandle({encryptedData,iv});
}
})
}else{
that.setData({
authBtnShow:true,
})
}
}
})
},
loginHandle(authData){
wx.showLoading({
title: '校验信息...',
})
const that = this;
const {code} = this.data;
const ob = {
code,
...authData,
}
wx.request({
url: `${interfaceUrl}/api/common/miniLogin`,
method:"POST",
data:ob,
success(res){
wx.hideLoading()
const {data} = res;
if(data.code!=200){
wx.hideLoading()
Dialog.alert({
title: '提示',
showConfirmButton:false,
showCancelButton:false,
message: data.msg,
})
return false;
}
wx.setStorage({
data: data.token,
key: 'token',
success(res){
wx.hideLoading()
that.launchOptionLogin();
},
fail(err){
console.log(err);
}
})
},
fail(err){
wx.hideLoading()
Dialog.alert({
title: '错误',
message: err.response.data.msg,
})
}
})
},
// 判断登录时是否要通过场景值来跳转页面
launchOptionLogin(){
const that = this;
const dataInfo = wx.getLaunchOptionsSync();
console.log("场景值:",dataInfo);
const {scene,query} = dataInfo;
const {taskid} = query;
if((scene=="1043" || scene=="1014") && query && taskid){
wx.navigateTo({
url:`/pages/tranManage/tranDetail/index?taskid=${taskid}`
})
}else{
wx.switchTab({
url:"/pages/index/index"
})
}
},
// 获取授权
bindGetUserInfo (e) {
const {encryptedData,iv} = e.detail;
if(encryptedData && iv){
this.loginHandle({encryptedData,iv});
}else{
Notify({ type: 'warning', message: '请先授权登录', duration: 1000, });
}
}
})