前言

前面写了一篇 java实现微信小程序加密数据解密_女IT玩家-彬彬的博客-CSDN博客

然后接着写微信小程序如何获取手机号,本文既有小程序的实现代码、也有后台java的实现代码哦!!

小程序实现(我用的uni-app)

参考文档:

获取手机号 | 微信开放文档

1、首先必须先有一个button

<u-button slot="right" type="primary" size="mini" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信手机号注册</u-button>

2、实现方法:getPhoneNumber,这个方法的回调就是我们需要的加密数据

/*** 小程序获取手机号*/
getPhoneNumber(e) {console.log(e.detail.errMsg)console.log(e.detail.iv)console.log(e.detail.encryptedData)this.encryptedData = e.detail.encryptedData;this.iv = e.detail.iv;const that = this;wx.checkSession({success () {//session_key 未过期,并且在本生命周期一直有效that.getWXPhone()},fail () {// session_key 已经失效,需要重新执行登录流程const that = thiswx.login({success(res) {// 发送 res.code 到后台换取 openId, sessionKey, unionIdif (res.code) {that.loginCode = res.code;wx.showLoading();if (that.loginCode) {// 执行that.getWXPhone()    } else {wx.hideLoading();wx.showModal({showCancel: false,content: '登录失败,请重试'})}} else {wx.showModal({title: '提示',content: '登录失败,请重试。如问题仍无法解决请联系客服。',showCancel: false})}},fail(err) {wx.showModal({title: '提示',content: '登录失败,请重试。如问题仍无法解决请联系客服。',showCancel: false})}})}})
},

3、实现方法:getWXPhone ,这个方法用来访问后端接口,解密加密数据,获取手机号

/*** 获取手机号*/
getWXPhone() {const that = thisconst url = 'wx/getWXPhone';const params = {code: this.code,encryptedData: this.encryptedData,iv: this.iv}console.log('微信登录传递参数', params)this.$fetch({url, data: params}).then(res => {//  console.log('merchantOfWeChatLogin succ', data);console.log(res);wx.hideLoading();if (res.code === 200 && res.success) {console.log(res)} else if (res.code === 80) {that.visibleOfDialog = true} else {that.visibleOfDialog = truewx.showToast({title: res.message,icon: 'none'})}    });
},

后台接口实现

说明:因为我的小程序前面有微信登录的操作,已经根据code获得过sessionkey,并存在redis上了,所以在获取手机号的时候,先从redis里取sessionkey,如果没有再重新经过code2session方法获取sessionkey,再解密,从而获取用户的手机号。

@ApiOperation(value = "获取微信手机号")
@GetMapping(value = "/getWXPhone")
public Result getWXPhone(CustomerWxLoginVo customerWxLoginVo, HttpServletRequest req) throws Exception {Result result = new Result<LoginVo>();try {/** 参数属性 */String code = customerWxLoginVo.getCode();String encryptedData = customerWxLoginVo.getEncryptedData();String iv = customerWxLoginVo.getIv();// 校验信息Boolean isExist = redisUtil.hasKey("wx-sessionkey"+code);String sessionkey = null;if (isExist) {sessionkey = (String) redisUtil.get("wx-sessionkey"+code);if (StringUtils.isBlank(sessionkey)) {throw new Exception("获取手机号失败");}} else {// 根据code获取登录密钥JSONObject jsonObject = wxLoginUtil.code2session(appId, appSecret, code);if (jsonObject == null) {return Result.error("获取手机号失败");}if (jsonObject.getIntValue("errcode") != 0) {return Result.error("获取手机号失败");}// 本次登录的会话密钥sessionkey = jsonObject.getString("session_key");if(StringUtils.isBlank(sessionkey)) {return Result.error("获取手机号失败");}redisUtil.set("wx-sessionkey"+code,sessionkey,60*60*24);}JSONObject jsonObject = wxLoginUtil.wXBizDataCrypt(encryptedData, sessionkey, iv);return result.setResult(jsonObject);} catch (Exception e) {result.error500(e.getMessage());}return result;
}

wxLoginUtil.code2session 方法实现:

// 微信小程序获取openId, sessionKey, unionId
public JSONObject code2session(String appId, String appSecret, String code) throws Exception {String url = String.format("https://api.weixin.qq.com/sns/jscode2session?        appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", appId, appSecret, code);JSONObject result = JSON.parseObject(HttpUtil.get(url));log.info("code2session的返回结果:" + result);if (!result.containsKey("errcode")) {result.put("errcode", "0");}return result;
}

HttpUtil 使用 hutool 的Api:

hutool:

微信小程序获取手机号,含java后台接口实现相关推荐

  1. 微信小程序获取手机号,java后台

    获取小程序的手机号,指的是获取绑定用户微信的手机号码,细节什么的我就不多说了,官网说的很详细了 官网:https://developers.weixin.qq.com/miniprogram/dev/ ...

  2. 微信小程序获取手机号(Java)

    微信小程序官方文档地址 :https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber. ...

  3. 微信小程序获取手机号登录(Java后端)

    1.添加依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...

  4. 微信小程序获取手机号,java解密报错

    临时帮朋友解决这个bug花了一下午时间,出坑以后赶紧给各位爷写一篇文章,心累.. 在此之前先测一下你的程序有没有问题,如果程序有问题,先去底部把我的代码拿走: String encryptedData ...

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

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

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

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

  7. 微信小程序支付-付款(Java后台)

    微信小程序支付-付款(Java后台) 一.概述 接触微信小程序支付有一段时间,趁着项目上线空闲期,来总结一下付款.退款.提现到银行卡.查询流水等步骤过程,涉及到的知识,以及编程过程中需要注意的问题. ...

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

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

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

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

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

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

最新文章

  1. 简明 MongoDB 入门教程
  2. 转:性能测试中的性能测试指标与用户体验分析
  3. 【Jupyter Notebook】启动命令行(写进.sh文件直接调用shell)
  4. 【Java自顶向下】HashMap面试题(2021最新版)
  5. php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
  6. HTML DOM addEventListener() 方法
  7. Atitit Java内容仓库(Java Content Repository,JCR)的JSR-170 文件存储api标准 目录 1. Java内容仓库 1 2. Java内容仓库 2 2.1.
  8. phpzend框架_PHP框架Zend
  9. 基于JAVA超市商品管理系统计算机毕业设计源码+系统+lw文档+部署
  10. jmeter进行http压力测试
  11. python ocr文字识别竖排繁体_小巧免费的图片文字识别OCR软件 支持简体识别和竖排繁体中文...
  12. 信创云:打造自主可控云基础设施 | 厂商征集
  13. 攻防世界backup
  14. 强迫症狂喜!PC端相册还能智能分类!
  15. 【1】使用分类学习APP - Classification Learner App 训练分类模型
  16. 新用户域名实名认证教程---金万维
  17. 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
  18. Qt -设计嵌入式设备用户界面的利器
  19. 程序员如何有效率的使用键盘
  20. 职业自我认知的测试软件,职业生涯规划___自我认知测试.pdf

热门文章

  1. CTFHUB-技能树-WEB通关
  2. .NET北京俱乐部,技术的饕餮盛宴,不枉此行
  3. Geogebra 教程之 02 Geogebra初学者的 8 个基本要素
  4. 自学C++编程,掌握这三项技能就可以工作了
  5. 备份恢复的种类以及完全恢复实验
  6. 计算机组成原理学习笔记——计算机外围设备
  7. html鼠标移动距离,简单的鼠标移动元素近大远小效果
  8. Ubuntu18.04下Qt安装
  9. 我对“Stay hungry,Stay foolish”的理解
  10. JavaScript学习第十三天