微信小程序获取用户手机号码详细教程(前端+后端)

 更新时间:2024年02月18日 11:46:26   作者:THE WHY  
在我们开发微信小程序时,获取用户手机号码是常见的需求之一,这篇文章主要给大家介绍了关于微信小程序获取用户手机号码的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下

1.背景介绍

在开发一款微信小程序时,需要用户进行微信登录,获取用户的手机号码来作为用户的唯一标识(userId),于是探索获取用户手机号码的方式;

(当然,通过wx.login来获取code,进而换取用户的openid也是可以的)

目前版本的微信小程序获取用户手机号码的方式如下:

前端开发参考:手机号快速填写组件 | 微信开放文档

后端开发参考:

手机号快速填写 | 微信开放文档

步骤如下:

①利用手机号快速填写的功能,将button组件 open-type 的值设置为 getPhoneNumber

②用户点击按钮,弹出申请获取用户手机号的弹窗:

③如果用户点击允许,则可以通过bindgetphonenumber事件回调获取到动态令牌code(注意这里的code和wx.login的code不一样,而且获取用户手机号码不需要提前调用wx.login获取code了)

④把code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号

注意一点,获取手机号的功能好像只允许经过认证的小程序使用,如果未认证只能使用测试号才可以

否则便会报错:

2.前端代码

开发环境:Uniapp框架

微信小程序调试基础库的版本:2.32.1

基本思路:通过按钮绑定监听事件,获取用户授权,得到code,传到后端换取用户手机号:

代码如下:

按钮:

<button open-type="getPhoneNumber" class="login_button" @getphonenumber="login" v-show="!logged">登录</button>

login函数:

//登录按钮
login(e) {
  console.log(e)
  var detail = e.detail
  if (detail.errMsg == "getPhoneNumber:ok") {
    console.log("用户同意授权")
    var code = detail.code
    uni.request({
      url: "http://localhost:8081/getPhoneNumber", //调用接口
      method: 'POST',
      header: {
        'content-type': 'application/json'
      },
      data: {
        code: code, //请求体中封装code
      },
      success(e) {
        console.log(e)
        var userId = e.data.phone_info.purePhoneNumber;
        uni.setStorage({
          key: "userId",
          data: userId,
          success() {
            uni.switchTab({
              url: "../../pages/homePage/homepage"
            })
          }
        })
      },
      fail(e) {
        uni.showModal({
          title: "错误!",
          content: "网络错误!",
          complete() {
          }
        })
      }
    })
  }
}

3.后端代码

开发环境:springboot

开发工具:idea

如果对于idea创建springboot项目有任何问题,可以参考的这一篇文章的后端代码部分:

百度翻译API使用教程(前端+后端)

代码展示如下:

@RestController
    public class PhoneNumberController {

        @PostMapping("/getPhoneNumber")
        public Object getPhoneNumber(@RequestBody Map<String,Object> data)
        {
            //通过appid和secret来获取token
            //WXContent.APPID是自定义的全局变量
            String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", WXContent.APPID, WXContent.APPSECRET);
            JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));

            //通过token和code来获取用户手机号
            String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + token.getString("access_token");

            //封装请求体
            Map<String, String> paramMap = new HashMap<>();
            paramMap.put("code", data.get("code").toString());

            //封装请求头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);

            HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);

            //通过RestTemplate发送请求,获取到用户手机号码
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);

            //返回到前端展示
            return response.getBody();
        }
    }

4.结果展示

在我的前端代码中有缓存用户id的功能,如果成功登录,即可在缓存中查看到用户id,如下:

5.补充:获取用户头像

微信小程序获取用户信息的功能好像挺离谱的,一直改来改去,目前大多是通过点击头像申请获取微信头像来实现

<button class="mine_avatar_wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
  <image class="mine_image" :src="avatarUrl"></image>
</button>

通过open-type绑定选择用户头像的功能,然后点击按钮即可弹出弹窗:

而onChooseAvatar函数则是获取到微信头像后渲染到页面上

onChooseAvatar(e)
	{
			this.avatarUrl = e.detail.avatarUrl
			uni.setStorageSync('avatarUrl',this.avatarUrl)
	},

这里选择使用用户头像即可修改用户头像为微信头像:

总结 

到此这篇关于微信小程序获取用户手机号码的文章就介绍到这了,更多相关微信小程序获取用户手机号码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ImageZoom 图片放大镜效果(多功能扩展篇)

    ImageZoom 图片放大镜效果(多功能扩展篇)

    上一篇ImageZoom已经对图片放大效果做了详细的分析,这次在ImageZoom的基础上进行扩展,实现更多的效果。
    2010-04-04
  • 使用Javascript开发sliding-nav带滑动条效果的导航插件

    使用Javascript开发sliding-nav带滑动条效果的导航插件

    这篇文章主要介绍了使用Javascript开发sliding-nav带滑动条效果的导航插件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 在IE8上JS实现combobox支持拼音检索功能

    在IE8上JS实现combobox支持拼音检索功能

    这篇文章主要介绍了在IE8上JS实现combobox支持拼音检索功能的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-05-05
  • JS造成内存泄漏的几种情况实例分析

    JS造成内存泄漏的几种情况实例分析

    这篇文章主要介绍了JS造成内存泄漏的几种情况,结合实例形式分析了内存泄漏的原理以及JS造成内存泄漏的几种常见情况,需要的朋友可以参考下
    2020-03-03
  • JS控制页面跳转时未请求要跳转的地址怎么回事

    JS控制页面跳转时未请求要跳转的地址怎么回事

    在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新。怎么解决呢?下面小编给大家解答下
    2016-10-10
  • 深入学习 JavaScript中的函数调用

    深入学习 JavaScript中的函数调用

    可能很多人在学习 JavaScript 过程中碰到过函数参数传递方式的迷惑,本着深入的精神,我给大家分享了一篇教程关于javascript中的函数调用知识,感兴趣的朋友一起学习吧
    2017-03-03
  • 微信小程序实现无限滚动列表

    微信小程序实现无限滚动列表

    这篇文章主要为大家详细介绍了微信小程序实现无限滚动列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • JavaScript变量基本使用方法实例分析

    JavaScript变量基本使用方法实例分析

    这篇文章主要介绍了JavaScript变量基本使用方法,结合实例形式分析了JavaScript变量的类型、使用注意事项及命名规范,需要的朋友可以参考下
    2019-11-11
  • JavaScript 获取元素在父节点中的下标(推荐)

    JavaScript 获取元素在父节点中的下标(推荐)

    jQuery中直接通过$(this).index()即可得到当前元素的下标。下面通过实例给大家介绍JavaScript 获取元素在父节点中的下标,需要的朋友参考下吧
    2017-06-06
  • JS实现简单可拖动的模态框

    JS实现简单可拖动的模态框

    这篇文章主要为大家详细介绍了JS实现简单可拖动的模态框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论