微信小程序获取手机号,含java后台接口实现
前言
前面写了一篇 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后台接口实现相关推荐
- 微信小程序获取手机号,java后台
获取小程序的手机号,指的是获取绑定用户微信的手机号码,细节什么的我就不多说了,官网说的很详细了 官网:https://developers.weixin.qq.com/miniprogram/dev/ ...
- 微信小程序获取手机号(Java)
微信小程序官方文档地址 :https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber. ...
- 微信小程序获取手机号登录(Java后端)
1.添加依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...
- 微信小程序获取手机号,java解密报错
临时帮朋友解决这个bug花了一下午时间,出坑以后赶紧给各位爷写一篇文章,心累.. 在此之前先测一下你的程序有没有问题,如果程序有问题,先去底部把我的代码拿走: String encryptedData ...
- java实现微信、手机号登陆_微信小程序获取手机号授权用户登录功能
小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPaDirIrkFhoneNumber这个组件通过button来 ...
- 微信小程序获取手机号登录流程(个人开发者账号不支持)
微信小程序获取手机号登录流程 所需条件 1. 非个人开发者账号 2. AppID+AppSecret 流程思路 **注意:** 代码实现 常见问题 所需条件 1. 非个人开发者账号 获取手机号文档 这 ...
- 微信小程序支付-付款(Java后台)
微信小程序支付-付款(Java后台) 一.概述 接触微信小程序支付有一段时间,趁着项目上线空闲期,来总结一下付款.退款.提现到银行卡.查询流水等步骤过程,涉及到的知识,以及编程过程中需要注意的问题. ...
- 微信授权绑定手机号 java_微信小程序获取手机号授权用户登录功能
小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无 ...
- 微信小程序---- 获取手机号(微信最新更新)
微信小程序---- 获取手机号(微信最新更新) 前言:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphone ...
- php 微信小程序获取手机号_实例讲解微信小程序获取手机号授权用户登录功能...
小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写.本文主要给大家分享微信小程序获取手机号授权用户登录功能,需要的朋友参考下吧, ...
最新文章
- 简明 MongoDB 入门教程
- 转:性能测试中的性能测试指标与用户体验分析
- 【Jupyter Notebook】启动命令行(写进.sh文件直接调用shell)
- 【Java自顶向下】HashMap面试题(2021最新版)
- php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
- HTML DOM addEventListener() 方法
- Atitit Java内容仓库(Java Content Repository,JCR)的JSR-170 文件存储api标准 目录 1. Java内容仓库	1 2. Java内容仓库	2 2.1.
- phpzend框架_PHP框架Zend
- 基于JAVA超市商品管理系统计算机毕业设计源码+系统+lw文档+部署
- jmeter进行http压力测试
- python ocr文字识别竖排繁体_小巧免费的图片文字识别OCR软件 支持简体识别和竖排繁体中文...
- 信创云:打造自主可控云基础设施 | 厂商征集
- 攻防世界backup
- 强迫症狂喜!PC端相册还能智能分类!
- 【1】使用分类学习APP - Classification Learner App 训练分类模型
- 新用户域名实名认证教程---金万维
- 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
- Qt -设计嵌入式设备用户界面的利器
- 程序员如何有效率的使用键盘
- 职业自我认知的测试软件,职业生涯规划___自我认知测试.pdf