收藏
回答

为什么发getUserInfo不在首页不起作用

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug wx.getUserInfo 客户端 6.70 2.1.1

我分享给别人一个小程序连接,别人点击手机上分享的连接后,没有调取小程序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 个回答

  • TNT
    TNT
    2018-07-02

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

    2018-07-02
    有用
    回复
  • orz~
    orz~
    2018-06-28

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

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


    2018-06-28
    有用
    回复
  • Coderl
    Coderl
    2018-06-28

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


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

    2018-06-28
    有用
    回复
登录 后发表内容