微信小程序授权权限相关接口整理以及调整

wx.login(Object object)

获取code用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 ,使用 code 换取 openid、unionid、session_key 等信息 |

// 通过 open-type="getPhoneNumber"弹起微信获取手机号授权弹框,是否可以拿到手机号,getPhoneNumber可以获取encryptedData,iv参数(用于后台换取手机号),拒绝则拿不到

image.png
 getPhoneNumber: function (e) {
        console.log(e.detail.errMsg)
        //授权后的处理
        if (e.detail.errMsg == "getPhoneNumber:ok") {
            //用户信息
            let params = {
                encrypdata:e.detail.encryptedData,
                ivdata: e.detail.iv,
                sessionkey:this.data.userInfo.sessionKey
            }
            console.log('参数', params)
            //获取手机号
            Api.getPhoneNumber(params).then(res=> {
                console.log('手机号码',res)
            })
        }
    }

注意 open-type="getUserInfo" 微信的调整,现在是不会直接弹出授权弹框了,而是直接获取用户信息了
但是只是能拿到iv rawDate这些,用户的的基本信息返回空了,如省市区,昵称,现在推荐使用 wx.getUserProfile(Object object)


image.png

  getUserInfo() {//点击不会在弹框出来
    wx.getUserInfo({
      success: (result) => {
        console.log(result);
      }
    })
wx.login()
getPhoneNumber(){
wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://test.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})
}

Demo


//login.js
  getPhoneNumber(e) {
    app.login().then(() => {
      let {
        iv,
        encryptedData
      } = e.detail;
      if (iv) {
        wx.setStorageSync('iv', iv)
        wx.setStorageSync('encryptedData', encryptedData)
//这里后台换取客户的信息,所以不需要 wx.getUserInfo
        loginByPhone({
          "appId": app.globalData.appId,
          "code": wx.getStorageSync('code'),
          "encryptedData": encryptedData,
          "iv": iv,
          "companyId":app.globalData.clientCompanyId,
        }).then(res => {
          wx.setStorageSync('user', JSON.stringify(res.data));
          var pages = getCurrentPages();
          var prevPage = pages[pages.length - 2]
          prevPage.setData({
            user: res.data
          })
          wx.navigateBack({
            delta: 1
          })
        })
      }
    });
  },

app.js

  login () {
    return new Promise((resolve, reject) => {
      //获取公司id
      this.queryByMiniAppId().then((res) => {
        //获取code
        wx.login({
          success: res => {
            wx.setStorageSync('code', res.code)
            resolve()
          },
          fail: err => {
            reject(err)
          }
        })
      }).catch((err) => {
        reject(err)
      });
    })
  },
wx.getUserInfo(Object object)
//获取用户信息 userInfo rawData signature encryptedData iv。
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
 onLoad: function() {
    // 查看是否授权
    wx.getSetting({
      success (res){
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不需要弹框
          wx.getUserInfo({
            success: function(res) {
              console.log(res.userInfo)
            }
          })
        }
      }
wx.authorize(Object object)
//提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。
// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
wx.getSetting({
  success(res) {
    if (!res.authSetting['scope.record']) {
      wx.authorize({
        scope: 'scope.record',
        success () {
          // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
          wx.startRecord()
        }
      })
    }
  }
})
wx.openSetting(Object object)
//调起客户端小程序设置界面,返回用户设置的操作结果。**设置界面只会出现小程序已经向用户请求过的82%E6%95%B0)参数
wx.openSetting({
  success (res) {
    console.log(res.authSetting)
    // res.authSetting = {
    //   "scope.userInfo": true,
    //   "scope.userLocation": true
    // }
  }
})
wx.getSetting(Object object)
//获取用户的当前设置。**返回值中只会出现小程序已经向用户请求过的[权限] authSetting用户的授权结果

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
    // res.authSetting = {
    //   "scope.userInfo": true,
    //   "scope.userLocation": true
    // }
  }
})
wx.getSetting \ wx.authorize \wx.openSetting结合运用

  authorize(){
    wx.getSetting({//获取用户权限的当前设置,是否已经授权,是的话直接调用微信Api就行了
      success(res) {
        console.log(res)
        if (!res.authSetting['scope.record']) {
          wx.authorize({//提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,如果用户之前已经同意授权,则不会出现弹窗
            scope: 'scope.writePhotosAlbum',
            success(re) {
              console.log(re)
            },
            fail(err) {
              wx.showModal({
                content: '检测到您没打开下载图片功能权限,是否去设置打开?',
                confirmText: "确认",
                cancelText: "取消",
                success: function(res) {
                  console.log(res);
                  //点击“确认”时打开设置页面
                  if (res.confirm) {
                    wx.openSetting({
                      success: (res) => {}
                    })
                  } else {
                    console.log('用户点击取消')
                  }
                }
              });
            }
          })
        }
      }
    })
    
  },
wx.getUserProfile(Object object)

获取用户信息。每次请求都会弹出授权窗口,用户同意后返回 userInfo

image.png
image.png
  
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      },
      fail:(err=>{
        console.log(err)
      })
    })
  },

你可能感兴趣的:(微信小程序授权权限相关接口整理以及调整)