小程序端:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

获取手机号码:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/phonenumber/phonenumber.getPhoneNumber.html

获取token:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html

现在的获取手机号码变得很简单,不需要像之前那样去根据偏移量解析密文了,现在直接使用code去微信后台换取号码即可,这里简单记录一下。

小程序

首先小程序端很简单,直接调用API获取code即可,然后将code作为参数传递给接口。

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({getPhoneNumber (e) {console.log(e.detail.code)}
})
参数 类型 说明 最低版本
code String 动态令牌。可通过动态令牌换取用户手机号。使用方法详情 phonenumber.getPhoneNumber 接口

后端接口

开发接口的时候需要注意以下几点:

  • 首先需要获取一个access_token
  • access_token是直接跟在url后面的,不需要作为参数处理
  • code参数是json格式的

调用地址如下:

POST https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN

请求参数:

属性 类型 默认值 必填 说明
access_token / cloudbase_access_token string 接口调用凭证
code string 手机号获取凭证

了解了这些之后,我们就可以直接编写我们的接口了。

@Autowired
private RestTemplate restTemplate;@PostMapping("/wx/getPhone")
public R getPhone(@RequestParam(value = "code", required = false) String code) {// 获取tokenString token_url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", WXConstant.APPID, WXConstant.SECRET);JSONObject token = JSON.parseObject(HttpUtil.get(token_url));// 使用前端code获取手机号码 参数为json格式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", code);HttpHeaders headers = new HttpHeaders();HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap, headers);System.out.println(httpEntity);ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);return R.ok().message("获取手机号码成功.").data(response.getBody());
}

这里获取token的时候我是直接使用Hutool工具包提供的工具类开发的,大家可以自行引入,

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.16</version>
</dependency>

然后,获取手机号码这里我是采用RestTemplate来调用的,相关配置文件如下:

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setReadTimeout(5000);//msfactory.setConnectTimeout(15000);//msreturn factory;}
}

微信小程序获取手机号(Java后台实现)相关推荐

  1. 微信小程序获取UnionId - Java后台解决

    UnionId 是微信平台用户的唯一标识,对于后台开发来说,UnionId 无疑是一个非常好用的东西. 前言 在获取 UnionId 之前,首先需要做下面的准备: 在小程序平台完善自己的微信小程序信息 ...

  2. java实现微信、手机号登陆_微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPaDirIrkFhoneNumber这个组件通过button来 ...

  3. 微信小程序获取手机号登录流程(个人开发者账号不支持)

    微信小程序获取手机号登录流程 所需条件 1. 非个人开发者账号 2. AppID+AppSecret 流程思路 **注意:** 代码实现 常见问题 所需条件 1. 非个人开发者账号 获取手机号文档 这 ...

  4. 微信授权绑定手机号 java_微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无 ...

  5. 微信小程序---- 获取手机号(微信最新更新)

    微信小程序---- 获取手机号(微信最新更新) 前言:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphone ...

  6. php 微信小程序获取手机号_实例讲解微信小程序获取手机号授权用户登录功能...

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写.本文主要给大家分享微信小程序获取手机号授权用户登录功能,需要的朋友参考下吧, ...

  7. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

    方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...

  8. 微信小程序获取手机号登录流程

    微信小程序获取手机号登录流程 首先前端使用wx.login 获取code wx.login({success(res) {if (res.code) {that.setData({code: res. ...

  9. 微信小程序获取手机号并解密详解

    微信小程序获取手机号并解密 1 获取手机号 2 解密 2.1 获取所需数据 2.2 解密返回数据 1 获取手机号 获取手机号的过程官方文档有详细的介绍.参考官方链接 要注意的是,此功能只对非个人且完成 ...

  10. 微信小程序获取手机号,含java后台接口实现

    前言 前面写了一篇 java实现微信小程序加密数据解密_女IT玩家-彬彬的博客-CSDN博客 然后接着写微信小程序如何获取手机号,本文既有小程序的实现代码.也有后台java的实现代码哦!! 小程序实现 ...

最新文章

  1. 还不懂Docker?一个故事安排的明明白白!
  2. day 01 ————立志运维的第一天开始,承若书!
  3. python 之pulp 线性规划介绍及举例
  4. python爬虫教程视频-python爬虫(入门教程、视频教程)
  5. Installing python 2.7 on centos 6.3.
  6. Java 设计模式之单利模式
  7. Oracle无法登陆EM问题解决方案
  8. matlab 数字全息图,基于MATLAB的数字全息成像仿真研究
  9. 简历制作器App隐私政策
  10. office插件开发_Excel插件——方方格子
  11. 可控硅的基本工作原理及应用
  12. Nebula图数据库
  13. 计算机网络工程师干嘛的,什么是网络工程师?网络工程师是做什么的?
  14. 如何更改您的Apple ID电子邮件地址
  15. Dalvik与ART的介绍及区别(一)
  16. dnw for linux
  17. 服务号和订阅号之间的区别,企业适合选择哪一个?
  18. python基础知识下载_python基础知识(实用)
  19. JVM性能调优5_编写高效优雅Java程序__享学课堂
  20. 解读丨2019数字中国指数报告,看数据画像如何带动产业发展!

热门文章

  1. (12)Spring框架----Spring框架是如何配置数据库资源的
  2. MySQL(12)-----多表查询(内连接和外连接)
  3. (1)Spring框架----通俗易懂的IoC原理
  4. iOS:tintColor详解
  5. hadoop生态--Hive(4)--Hive分区中的动态分区、静态分区
  6. react 中event 的处理方式
  7. 《C#图解教程》 总览
  8. codeforces 486 E. LIS of Sequence(dp)
  9. NLog在.NET Core Console Apps中的简单应用
  10. CentOS6.5配置网络