小程序 - 微信授权登录 & 微信授权绑定手机号

用户在使用小程序时,经常需要授权登录,授权登录的作用是获取用户的基本信息,如头像、昵称以及openid等,openid可用于微信授权手机号、微信支付。

微信授权登录

.xhtml如下,wxLogin为自定义方法

<button open-type="getUserInfo" bindgetuserinfo="wxLogin"></button>

.js如下

// 微信登录
wxLogin (event) {
  let reqUrl = getApp()['globalData']['domain'] + 'v1.Indexc/wxSignIn'; // 后台请求接口
  let signature = event.detail.signature;
  let rawData = event.detail.rawData;
  let encryptedData = event.detail.encryptedData;
  let iv = event.detail.iv;
  
  let reqData = {
    'signature': signature,
    'rawData': rawData,
    'encryptedData': encryptedData,
    'iv': iv
  }

  if (event.detail.userInfo) {
    wx.login({
      success: (res) => {
        let code = res.code;
        reqData['code'] = code;

        wx.request({
          url: reqUrl,
          method: 'POST',
          data: reqData,
          success: (res) => {
            let resData = res.data;

            if (resData.code != 1) {
              getApp().showToast(resData.msg);
            }
            else {
              let token = resData.data.data;
              let openid = resData.data.openid;
              let session3rd = resData.data.session3rd;

              wx.setStorageSync("token", token);
              wx.setStorageSync("openid", openid);
              wx.setStorageSync("session3rd", session3rd);
            }
          }
        })
      }
    })
  }
},

微信授权绑定手机号

.xhtml如下,getPhoneNumber为自定义方法

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>

.js如下

getPhoneNumber (event) {
    let reqUrl = getApp()['globalData']['domain'] + 'v1.Userc/decryptData2'; // 后台请求得接口
    let encryptedData = event.detail.encryptedData;
    let iv = event.detail.iv;
    let session3rd = wx.getStorageSync("session3rd"); // 由第一步"微信授权"操作后台返回
    let openid = wx.getStorageSync("openid");         // 由第一步"微信授权"操作后台返回
    let token = wx.getStorageSync("token");           // 由第一步"微信授权"操作后台返回
    let reqData = {
      'encryptedData': encryptedData,
      'iv': iv,
      '3rd_session': session3rd,
      'openid': openid
    }
    
    wx.request({
      url: reqUrl,
      header: {'token': token},
      method: 'POST',
      data: reqData,
      success: (res) => {
        let resData = res.data;

        if (resData.code != 1) {
          getApp().showToast(resData.msg);
        }
        else {
          let phone = resData.data.data;
          wx.setStorageSync('phone', phone);
          
          getApp().showToast('绑定成功');
        }
      }
    })
  },

值得注意的是:以上代码中的session3rd并不是固定的变量名,具体由后台同事声明,也可能是session_3rdsession_key

猜你喜欢

转载自blog.csdn.net/sinat_33184880/article/details/85073917