为什么发getUserInfo不在首页不起作用
发布于 6 年前 作者 zhaofang 12315 次浏览 来自 问答

我分享给别人一个小程序连接,别人点击手机上分享的连接后,没有调取小程序app.js中的 wx.getUserInfo方法。请问如何能调取到?或者提供一个改进方案。



我在点击连接的页面写的代码是,<view class=‘login_desc’>为了给您更好的服务请先登录</view>


        <button class=‘main_btn login_btn’ open-type="getUserInfo"bindgetuserinfo=“ongetuserinfo”>登录</button>


app.js代码是


const { request} = require(’./utils/request.js’)


const { login, getUserInfo} = require(’./utils/address.js’)



App({


    onLaunch: function (options) {


        // 设备信息


        wx.getSystemInfo({


            success: function (res) {


                console.log(res)


            }


        })


        // 场景值


        // console.log(options.scene)


        // 登录


        wx.login({


            success: res => {


                // 发送 res.code 到后台换取 openId, sessionKey, unionId


                const code = res.code;


                // 请求参数


                const url = login;


                const data = {


                    code:code


                };


                const method = ‘GET’;


                // 获取 openid and session_key


                request(url, data, method, res=>{


                    // 保存全局


                    this.globalData.session_key = res.data.data;


                    // 调用userInfo


                    this.getUserInfo(res.data.data);


                });


            }


        })


    },


    getUserInfo(session_id){


        // 获取用户信息


      console.log(session_id)


        wx.getSetting({


            success: res => {


                if (res.authSetting[‘scope.userInfo’]) {


                    // 这里不能使用util里面的方法,导致了循环引用


                    // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框


                    wx.getUserInfo({


                        success: res => {


                            // 可以将 res 发送给后台解码出 unionId


                            this.globalData.userInfo = res.userInfo


                            console.log(this.globalData.userInfo)


                            // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回


                            // 所以此处加入 callback 以防止这种情况


                            if (this.userInfoReadyCallback) {


                                this.userInfoReadyCallback(res)


                            }


                            // 由于愚蠢的错误


                            const { nickName, gender, avatarUrl, city, country, language, province } = res.userInfo;


                            console.log(session_id)


                            console.log(gender)


                            console.log(avatarUrl)


                            console.log(nickName)


                            console.log(getUserInfo)


                            request(getUserInfo, {


                                sessionId: session_id,


                                gender: gender,


                                headImg: avatarUrl,


                                nickname: nickName,


                            }, ‘POST’, res => {


                                // 获取成功


                                console.log(`后台返回用户信息${JSON.stringify(res)}`);


                            });


                        }


                    })


                }


            }


        })


    },


    globalData: {


        userInfo: null


    }


})

3 回复

app.js如果没有授权的话调用wx.getUserInfo是会回调到fail里的,

然后     onLaunch里    this.globalData.session_key = res.data.data;  这里能拿到this么…我有点记不清楚了,印象中异步操作后往往会拿不到this

我在点击连接的页面写的代码是,<view class=‘login_desc’>为了给您更好的服务请先登录</view>

得在这个页面写对应得js里面写getUserInfo函数吧哥,视图调不到app.js里得函数的

 wx.getUserInfo 不是不能用了? 开发版和体验版 都没用了

回到顶部