当前位置: 首页 > news >正文

微信小程序电话号码授权

前端:
文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

uniapp调用的时候,要将bind用@替换

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"></button>
function getPhoneNumber(e){console.log(e.detail.code)  // 动态令牌console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)console.log(e.detail.errno)  // 错误码(失败时返回)if (e.detail.code){User.getUserTelNumber(e.detail.code).then(res=>{// 授权成功setTimeout(()=>{uni.navigateBack({delta:1 //返回的页面层级,1为返回上一个页面})},1000)}).catch((err)=>{console.log(err,"errrrrrr")})}else{// 拒绝授权toast("拒绝授权","error")setTimeout(()=>{uni.navigateBack({delta:1 //返回的页面层级,1为返回上一个页面})},1000)}}

java:
文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html
掉这个获取电话号码,需要先获取access_token
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
获取token,有效期是两小时,需要缓存,

    @GetMapping("/getTelNumber")@LoginRequired@ApiOperation(value = "getTelNumber",notes = "getTelNumber")public RespBean getTelNumber(String code){userService.getWechatTelNumber(code);return RespBean.ok("授权成功");}
    /*** 获取微信的 accessToken,, 需要缓存起来,,, 两小时过期* @return*/public String getAccessToken(){String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", wechatPayConfig.getAppId(), wechatPayConfig.getAppSecret());Map map = restTemplate.getForObject(tokenUrl, Map.class);String accessToken = (String) map.get("access_token");System.out.println("accessToken = " + accessToken);return accessToken;}
    public void getWechatTelNumber(String code) {try {String accessToken= globalMap.get("access_token");if (accessToken == null){accessToken = getAccessToken();globalMap.put("access_token",accessToken);}//通过token和code来获取用户手机号String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken + "&code=" + code;Map<String, String> map = new HashMap<>();map.put("code",code);Object obj = restTemplate.postForObject(url, map, Object.class);System.out.println("obj = " + obj);Map<String,Object> resultMap = (Map<String,Object>) obj;Map<String,Object> phoneInfo = (Map<String, Object>) resultMap.get("phone_info");System.out.println("phoneInfo = " + phoneInfo);String phoneNumber = (String) phoneInfo.get("phoneNumber");// 将number更新到user表User user = SecurityContextHolder.getUser();user.setTel(phoneNumber);this.updateById(user);} catch (RestClientException e) {throw new ServiceException(e.getMessage());}}

因为授权手机号,必须要通过点击按钮,,用户授权,不能够直接调api,,必须要按钮,,可以将按钮展示为一个授权页面,,跳过去授权,,成功之后跳回

引用:https://blog.csdn.net/qq_46940224/article/details/136865901

https://blog.csdn.net/weixin_41698051/article/details/97777993


http://www.mrgr.cn/news/63.html

相关文章:

  • Android常见控件(一)
  • 运维大规模K8S集群注意事项
  • 【流媒体】RTMPDump—Download(接收流媒体信息)
  • c语言中比较特殊的输入函数
  • CSS的:in-range和:out-of-range伪类:增强输入验证的视觉反馈
  • 设计模式-观察者模式
  • 修改了原神4.8版本升级数据表
  • Android笔试面试题AI答之Kotlin(15)
  • 在Linux系统下安装、配置ETCD
  • C语言enum枚举
  • MySQL 常用 SQL 语句大全
  • UE5学习笔记15-BginPlay事件、Tick事件
  • 前端(Vue)动态换肤的通用解决方案及原理分析(2)
  • 《基于CT的人工智能预后模型在非小细胞肺癌切除术中的临床应用》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统
  • 智能外呼机器人助力电销
  • C++ | Leetcode C++题解之第342题4的幂
  • 基于SpringBoot框架的能源管理系统源代码(100%开源无加密)
  • Android -- 谷歌地图绘制
  • Haproxy、mysql读写分离、python读写分离
  • 无法判断编程器固件类型