java 微信小程序授权获取用户手机号码 (完整demo)

1. 前端获取动态令牌 code

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

2. 后端接收令牌code, 调用微信获取手机号接口

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

3. controller

    /*** 获取用户手机号** @param code  动态令牌。可通过动态令牌换取用户手机号*              注:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用* @return*/@ApiOperation("获取用户手机号")@GetMapping("/getPhoneNumber")public AjaxResult getPhoneNumber(String code){return lsUserService.getPhoneNumber(code);}

4. service

    /***  获取用户手机号** @param code  手机号获取凭证* @return*/@Overridepublic AjaxResult getPhoneNumber(String code) {if (StringUtils.isEmpty(code)) {return AjaxResult.error("手机号获取凭证不能为空 !");}log.info("手机号获取凭证: {}", code);try {//通过appid和secret来获取tokenString tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", WxPayUtils.appId, WxPayUtils.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", code);//封装请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);//通过RestTemplate发送请求,获取到用户手机号码RestTemplate restTemplate = new RestTemplate();ResponseEntity<JSONObject> response = restTemplate.postForEntity(url, httpEntity, JSONObject.class);String errmsg = response.getBody().getString("errmsg");if (errmsg.equals("ok")) {JSONObject phoneInfoJson = response.getBody().getJSONObject("phone_info");String phoneNumber = phoneInfoJson.getString("phoneNumber");return AjaxResult.success(phoneNumber);}} catch (Exception e) {e.printStackTrace();}return AjaxResult.error("手机号获取失败");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计-JAVA火车票订票管理系统-springboot-论-文-ppt

PPT论文 文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计三、功能截图总结 前言 本论文主要论述了如何使用JAVA语言开发一个火车订票管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想…

ORB-SLAM2学习笔记7之System主类和多线程

文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;系统&#xff0c;它能够从单个、双目或RBG…

jvm-jvm与java体系结构

1.JAVA及JVM简介 jvm发展历程 sun classic vm jdk1.4时完全被淘汰 Exact VM 准确式内存管理 HotSpot VM JRockit 专注于服务端 IBM J9 2.虚拟机与JAVA虚拟机 java虚拟机就是二进制字节码的运行环境&#xff0c;负责装载字节码到其内部&#xff0c;解释/编译为对应平台上的机…

c++——c/c++中的static和const

C语言和c中的static关键字与const关键字 static&#xff1a; //改变存储区域&#xff0c;限制作用域 ①、改变存储区域&#xff1a; 在不同的上下文中&#xff0c;static 关键字可以用于改变变量或函数的存储区域。在函数内部&#xff0c;static 用于将局部变量的生存期从函数…

线性代数的学习和整理7:各种特殊矩阵(草稿-----未完成)

目录 1 单位矩阵 为什么单位矩阵I是 [1,0;0,1]T 而不是[1,1;1,1]T 2 旋转矩阵 3 伸缩矩阵 放大缩小倍数矩阵 4 镜像矩阵 5 剪切矩阵 1 矩阵 1.1 1维的矩阵 行向量列向量 1.2 2维的矩阵 一般2维表都可以看作矩阵。矩阵的每个维度可以是1个数字&#xff0c;也可以是多个…

Appium-移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…

通讯录的实现

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…

【Java 排序】冒泡排序(升降序,Int类型,Double类型,多数组排序)(111)

思路&#xff1a; 用二重循环实现&#xff0c;外循环变量设为i&#xff0c;内循环变量设为j。假如有n个数需要进行排序&#xff0c;则外循环重复n-1次&#xff0c;内循环依次重复n-1&#xff0c;n-2&#xff0c;…&#xff0c;1次。每次进行比较的两个元素都是与内循环j有关的&…

深入理解分布式架构,构建高效可靠系统的关键

深入探讨分布式架构的核心概念、优势、挑战以及构建过程中的关键考虑因素。 引言什么是分布式架构&#xff1f;分布式架构的重要性 分布式系统的核心概念节点和通信数据分区与复制一致性与一致性模型负载均衡与容错性 常见的分布式架构模式客户端-服务器架构微服务架构事件驱动…

[国产MCU]-W801开发实例-GPIO输入与中断

GPIO输入与中断 文章目录 GPIO输入与中断1、硬件准备2、软件准备3、驱动实现4、驱动测试W801的GPIO支持软件配置中断,中断触发方式包含:上升沿触发、下降沿触发、高电平触发、低电平触发。本文在前面[ 国产MCU]-W801开发实例-按键与GPIO输入的基础上实现GPIO中断配置。 1、硬…

Android瀑布流

以下是一个简单的示例代码&#xff0c;演示如何在Android Studio中解析指定网页的图片URL&#xff0c;并展示在错乱瀑布流布局中&#xff1a; 1. 添加网络权限&#xff1a;在项目的AndroidManifest.xml文件中添加以下权限&#xff1a; <uses-permission android:name"…

Linux定时任务crontab

常用命令 crontab -e 进入定时脚本&#xff0c;编辑后保存即立即生效 crontab -l 查看用户定时脚本 tail -f /var/log/cron 查看执行日志 service crond status 查看定时器运行状态 service crond restart 重启定时器 定时任务不执行原因 定时任务设置的格式正确&#xff0c;手…

分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

本篇文章采用 Docker 方式搭建 Grafana Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者&#xff1a;文韵涵 爱可生 DBLE 团队开发成员&#xff0c;主要负责 DBLE 需求开发&#xff0c;故障排查和社区问题解答。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&a…

亚马逊点击广告对于卖家有什么好处

亚马逊点击广告对卖家来说有许多好处&#xff0c;它们可以帮助卖家增加产品曝光、提高销售量&#xff0c;并改善他们在亚马逊平台上的竞争地位。以下是一些卖家可能从亚马逊点击广告中获益的好处&#xff1a; 1、增加产品曝光度&#xff1a;通过在关键搜索结果页面上投放广告&…

更新Ubuntu18.04上的CUDA和GCC

问题&#xff1a; 有一台服务器的GPU是1080&#xff0c;有八张卡&#xff0c;已经好久没有人用了。cuda版本是10.1,我现在拿来复现一些论文的模型&#xff0c;经常遇到版本依赖问题&#xff0c;报错Driver is too old。所以要更新一下驱动。遇到的主要问题是gcc版本也太低了&am…

MySQL8.0.26-Linux版安装

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 MySQL :: Download MySQL Community Server (Archived Versions) 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysql ​ tar -xvf mysql-8…

Flink 数据集成服务在小红书的降本增效实践

摘要&#xff1a;本文整理自实时引擎研发工程师袁奎&#xff0c;在 Flink Forward Asia 2022 数据集成专场的分享。本篇内容主要分为四个部分&#xff1a; 小红书实时服务降本增效背景Flink 与在离线混部实践实践过程中遇到的问题及解决方案未来展望 点击查看原文视频 & 演…

Spring Clould 负载均衡 - Ribbon

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Ribbon-负载均衡原理&#xff08;P14&#xff09; 具体实现时通过LoaBalanced注解实现&#xff0c;表示RestTemplate要被Ribbon拦截处理 orderservice调用user时候&#xff0c…

​亚商投资顾问 早餐FM/0817创新发展机器人产业措施

01/亚商投资顾问 早间导读 总理&#xff1a;要着力扩大国内需求&#xff0c;继续拓展扩消费、促投资政策空间&#xff0c;提振大宗消费新华社&#xff1a;抹黑打压改变不了中国市场吸引力北京市印发《促进机器人产业创新发展若干措施》 02/亚商投资顾问 新闻早餐 // 热点聚焦…

FPGA原理与结构——RAM IP核的使用与测试

目录 一、前言 二、RAM IP核定制 1、RAM IP核 step1 打开vivado工程&#xff0c;点击左侧栏中的IP Catalog step2 在搜索栏搜索RAM&#xff0c;找到Block Memory Generator IP核&#xff1a; 2、IP核定制 step3 Baisc界面定制 step4 端口定制 step5 Other Options st…