微信小程序登录授权并获取手机号

一、请求微信登录接口

  1. 请求发送 携带 code 到后台换取 openid
wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://test.com/onLogin', 
        method: "post",
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})
  1. 发送 code 到后台获取保存 session_keyopenid 等重要参数,获取手机号要用到
    二、session_key ,openid 参数保存下来之后,开始获取手机号

注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限

  1. 需要将 button 组件 open-type 的值设置为 getPhoneNumber,建议直接使用微信小程序文档提供的方法
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
  1. 查看是否授权成功 (e.errMsg == “getPhoneNumber:ok”), 成功:true 拒绝:false

  2. 授权成功后返回参数encryptedData , iv,加上先前保存的 session_key 请求接口,提交参数给后台,参数跟随后台对接
    在这里插入图片描述

 //获取手机号快捷登录
  getPhoneNumber: function (e) {
    let e = e.detail;//微信返回加密的数据
    //判断授权手机号是否成功
    if (e.errMsg == "getPhoneNumber:ok") {
      let data = {  //后台所需要的提交的参数
        encryptedData: e.encryptedData,
        iv: e.iv,
        session_key : that.data.session_key
      }
      //创建新的Promise请求login接口
      new Promise((resolve, reject) => {
        wx.request({
            url: app.globalData.server_api_url + '/login',  //api接口
            header: {
                'content-type': 'application/x-www-form-urlencoded',
            },
            method: 'POST',
            data: data,
            success: function(res) {
              resolve(res)
            },
            fail : function (res) {
              reject(res)
            }
        })
      }).then((res) => {
      	//请求成功返回的参数
       console.log(res)
      })     
    }
  }
  1. 走到这步,说明已经成功获取到手机号,根据后台返回的参数拿到手机号
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用uniapp框架开发微信小程序进行授权登录获取用户手机号的代码: 1. 在项目根目录下的 `manifest.json` 文件中添加微信小程序授权登录的配置: ```json "mp-weixin": { "appid": "你的小程序appid", "scope": "scope.userInfo,scope.userPhoneContact", "settings": { "authSetting": { "scope.userInfo": true, "scope.userPhoneContact": true } } } ``` 2. 在需要进行授权登录的页面中添加以下代码: ```html <template> <button type="primary" @click="getUserInfo">授权登录</button> </template> <script> export default { methods: { getUserInfo() { uni.getUserProfile({ desc: '用于完善会员资料', lang: 'zh_CN', success: (res) => { uni.login({ success: (loginRes) => { uni.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: '你的小程序appid', secret: '你的小程序secret', js_code: loginRes.code, grant_type: 'authorization_code' }, success: (sessionRes) => { const { openid, session_key } = sessionRes.data uni.request({ url: 'https://api.weixin.qq.com/wxa/getphoneNumber', data: { encryptedData: res.encryptedData, iv: res.iv, sessionKey: session_key }, success: (phoneRes) => { console.log(phoneRes.data.phoneNumber) } }) } }) } }) } }) } } } </script> ``` 说明: - `getUserProfile` 方法用于获取用户信息,包括手机号。 - `uni.login` 方法用于获取临时登录凭证code。 - `uni.request` 方法用于向微信服务器发送请求,获取用户手机号。 - 在 `getUserProfile` 方法中,`desc` 参数用于描述授权窗口的文案,`lang` 参数用于设置授权窗口的语言。 - 在 `uni.request` 方法中,`encryptedData` 参数为加密数据,`iv` 参数为加密算法的初始向量,`sessionKey` 参数为临时登录凭证的会话密钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值