收藏
回答

wx.getUserProfile不能和wx.login一起使用?

mac 模拟器1.05.2102010 基础库2.16.0

调用wx.login获取code后,再调用wx.getUserProfile,可能会失败,触发fail函数,error msg: ''getUserProfile:fail can only be invoked by user TAP gesture"。

如果不能同时使用,那如何校验用户信息的准确性或者解密encryptedData呢?

最后一次编辑于  2021-04-08
回答关注问题邀请回答
收藏

23 个回答

  • 掌柜
    掌柜
    2021-08-11

    我的解决思路:

    用户点击登录后,调用函数bindtap="getUserProfile"。

    getUserProfile: function(e){

    wx.login() //获取code

    wx.getUserProfile( //获取授权信息

    //success成功后执行以下操作:

    //先弹出一个wx.showToast,延迟时间duration为2秒,目的让用户看到程序正在执行,提高用户体验

    //设置一个定时3秒后执行submitLogin()函数:setTimeout(submitLogin(), 3000),目的是使得wx.login()执行完毕生成code

    )

    },

    submitLogin(){ // 赋值code + 授权信息,然后提交

    wx.request() 提交api

    }

    2021-08-11
    有用
    回复
  • 胡欣
    胡欣
    2021-06-29
    async getUserProfile(e){
    
             let login = () => {
    
             return new Promise( resolve =>{
    
                wx.login( {
    
                  success(res) {
    
                    console.log("执行异步操作--------")
    
                    resolve(res)
    
                  }            })
    
             });
    
            }
    
    
    
    
            let getUserInfo = () => {
    
              return new Promise(resolve => {
    
                //wx.getUserInfo({
    
                wx.getUserProfile({
    
                  desc: '用于完善会员资料',  
    
                  success(res) {
    
                    console.log("000000000")
    
                    resolve(res)
    
                  }
    
                })
    
              })
    
            }
    
               Promise.all([login, getUserInfo]).then((res) => {
    
              console.log(res)
    
              console.log ("-------------------")
    
            }).catch((err) => {
    
              console.log(err)
    
            })
    
        }
    

    我这代码不知有什么问题,执行后感觉两个promise并没有执行,res的返回的数组里是两个函数,我很困惑

    2021-06-29
    有用
    回复
  • ffffff
    ffffff
    2021-05-28

    后端如果有用Binary Wang的工具包的话,需要注意

    #我当前使用weixin-java-miniapp工具包版本为3.9.0
    # 用code换SessionKey
    WxMaJscode2SessionResult jsCode2SessionDTO = wxMaService.jsCode2SessionInfo(code);
    # 解析获取用户信息
    WxMaUserInfo maUserInfoDTO = wxMaService.getUserService().getUserInfo(jsCode2SessionDTO.getSessionKey(), encryptedData, iv);
    

    WxMaUserInfo对象中不存在openId了,要用WxMaJscode2SessionResult中的openid和unionId

    2021-05-28
    有用
    回复
  • 小满鲤跃
    小满鲤跃
    2021-05-11

    我遇到的问题是code和参数传过去啦就解析不成功

    2021-05-11
    有用
    回复 1
    • 小满鲤跃
      小满鲤跃
      2021-05-11
      wx.getUserProfile 加密信息解密不出来怎么回事? 哪位大佬帮忙解惑
      2021-05-11
      回复
  • 沙隆巴斯
    沙隆巴斯
    2021-04-22

    我发现反过来调用,先执行getUserProfile再login,也能顺利解码加密内容,是不是微信在这个新api(getUserProfile)上做了兼容???

    2021-04-22
    有用
    回复 2
    • momo路人乙
      momo路人乙
      2021-04-22
      会签名出错
      2021-04-22
      回复
    • 李百兴
      李百兴
      2021-04-22
      只要不在回调里执行,先执行哪个都行
      2021-04-22
      回复
  • 蘧(qú)
    蘧(qú)
    2021-04-21

    已授权条件下的自动登录是不是实现不了了


    2021-04-21
    有用
    回复 4
    • Xuan
      Xuan
      2021-04-22
      可以
      2021-04-22
      回复
    • 李百兴
      李百兴
      2021-04-22
      后端通过code可以直接拿到unionId,不需要再通过授权来获取
      2021-04-22
      回复
    • 流星💫
      流星💫
      2021-04-23回复Xuan
      大佬, 怎么实现啊 能贴一下代码吗
      2021-04-23
      回复
    • Elvin
      Elvin
      2021-06-09回复流星💫
      这里有promise.all版本的代码实现:https://viencoding.com/article/300
      2021-06-09
      回复
  • kk
    kk
    2021-04-15

    我也是在调整登录方案时,发现了这个问题

    有发现什么好的方案吗

    2021-04-15
    有用
    回复 1
    • 李百兴
      李百兴
      2021-04-15
      利用事件冒泡,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口,把加密信息和code传给后端
      2021-04-15
      回复
  • 丁小胖
    丁小胖
    2021-04-13

    我是点击授权按钮的时候 先wx.login 再wx.getUserProfile 这俩先后顺序 平级

    2021-04-13
    有用
    回复 1
    • 李百兴
      李百兴
      2021-04-13
      是的,我现在就是这么做的
      2021-04-13
      1
      回复
  • Casual
    Casual
    2021-04-09

    碰到同样问题,先wx.getUserProfile在成功回调里用wx.login,请求后台接口会报错。希望官方给出合适的解决方案。

    2021-04-09
    有用
    回复 1
    • Casual
      Casual
      2021-04-09
      已解决,需要后端改调用方式,因为我们传过去,他们解析拿不到unionid和openid要后端自己在回调里取unionid和openid
      2021-04-09
      回复
  • .    ⃢👁-👁⃢     .
    . ⃢👁-👁⃢ .
    2021-04-09

    遇到同样的问题,若楼主有解决方法请告知

    2021-04-09
    有用
    回复 1
    • 李百兴
      李百兴
      2021-04-09
      目前是利用事件冒泡的原理,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口
      2021-04-09
      回复

正在加载...

登录 后发表内容
问题标签