收藏
回答

小程序使用wx.getUserProfile发布后未拿到unionid?

  //新登陆点击
  getUserProfileApi(){
    //未更新或无法使用新api用户无法使用以下逻辑
    console.log("v46 升级微信并可用",this.data.canIUseUserProfile,this.data.getUserApiType);
    if(!this.data.canIUseUserProfile) return false
    let userInfo = wx.getStorageSync("userInfo")
     if(userInfo){
       //无需弹窗登录
        wx.login({
          success(res) => {
            console.log('v46 wxLogin:', res)
            let openId = wx.getStorageSync('openId') ? wx.getStorageSync('openId') : ''
            let iv = wx.getStorageSync("iv") || '';
            let encryptedData = wx.getStorageSync("encryptedData") || '';
            memberModel.getOpenId({
              data: {
                code: res.code,
                encryptedData: encryptedData,
                iv: iv,
                openId: openId
              }
            }).then(res => {
              if (!res.data.success) return
              //存储unionid
              wx.setStorageSync('openId', res.data.datas.openId)
              wx.setStorageSync('unionId', res.data.datas.unionId)
              wx.showLoading()
              //登录
              this.login()
            }).catch(_ => {
              canGoNext = true
              reject()
            })
          },
          fail() {
            canGoNext = true
            reject()
          }
        })
     }else {
      wx.getUserProfile({
        desc:"完善用户基本信息",
        success:(event) => {
          console.log("v46 success",event);
          let iv = '';
          let encryptedData = ''
          if(event.userInfo){
            app.globalData.userInfo = event.userInfo
            wx.setStorageSync("userInfo",event.userInfo)
          }
          if(event && event.encryptedData){
            wx.setStorageSync('encryptedData', event.encryptedData)
            encryptedData = event.encryptedData
          }
          if(event && event.iv){
            wx.setStorageSync('iv', event.iv)
            iv = event.iv
          }
          wx.login({
            success(res) => {
              console.log('v46 wxLogin:', res)
              let openId = wx.getStorageSync('openId') ? wx.getStorageSync('openId') : ''
              memberModel.getOpenId({
                data: {
                  code: res.code,
                  encryptedData: encryptedData,
                  iv: iv,
                  openId: openId
                }
              }).then(res => {
                                console.log(res) //没有拿到unionid
                if (!res.data.success) return
                //存储unionid
                wx.setStorageSync('openId', res.data.datas.openId)
                wx.setStorageSync('unionId', res.data.datas.unionId)
                wx.showLoading()
                //登录
                this.login()
              }).catch(_ => {
                canGoNext = true
                reject()
              })
            },
            fail() {
              canGoNext = true
              reject()
            }
          })
        },
        fail:(err) => {
          console.log("v46 fail",err);
        },
      })
     }
  },

如果小程序需与开放平台绑定,通过wx.login的code调用后台接口不是可以直接拿到unionid吗?
回答关注问题邀请回答
收藏

1 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    2021-04-22

    开发者可以直接通过 wx.login获取到用户登录凭证 (code),调用微信登录接口(auth.code2Session获取到该用户 openid + UnionID


    2021-04-22
    有用
    回复 2
    • 怦然心动
      怦然心动
      2021-04-22
      我们后台就是确实是这样做的呀,调用(auth.code2Session),也绑定了开放平台,wx.login在wx.getUserProfile的成功回调里,但是就是获取不到unionid,用户第一次使用我们app?如果不看代码层面,还会有哪些情况会出现这种问题呢?
      2021-04-22
      回复
    • 社区技术运营专员-Jahozheng
      社区技术运营专员-Jahozheng
      2021-04-22回复怦然心动
      检查下代码逻辑
      2021-04-22
      回复
登录 后发表内容