微信小程序获取用户唯一标识openid

2023-11-14

相关知识

微信小程序、spring-boot

一、步骤

1.获得的用户登录凭证code(有效期五分钟)
2.发送参数code至后端
3.通过code获取openid

二、实现

1.获取code

接口:wx.login

接口地址:https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html

app.js

 // 登录
wx.login({
  success: res => {
    // 发送 res.code 到后台换取 openId, sessionKey, unionIdp
    console.log(res.code)
    wx.request({
      url: 'http://127.0.0.1:8081/user_info/openid?code='+res.code,
      success:res=>{
        console.log(res)
        this.globalData.openid = res.data.data[0].openid
      }
    })
  }
})

globalData: {
	openid:null,
}

2.通过code获取openid

接口:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

接口地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

核心代码

@Service
public class UserInfoServiceImpl implements UserInfoService {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public List<HashMap> getOpenId(String code) {

        logger.info("根据code获取openid");

        String url = jscode2session + "?"
                + "appid=" + appid
                + "&secret=" + secret
                + "&js_code=" + code
                + "&grant_type=authorization_code";
        try {
            return HttpRequest.httpGet(url);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("获取openid失败");
        }

        return null;
    }
}

请求工具

		<!-- druid start -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>
        <!-- druid end -->

        <!--json对象转换 start-->
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <!--json对象转换 end-->
package com.aiplay.aipic.utils.http;

import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class HttpRequest {

    public static List<HashMap> httpGet(String httpUrl) {
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置连接方式:get
            connection.setRequestMethod("GET");
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);

            // 发送请求
            connection.connect();

            // 通过connection连接,获取输入流
            //得到响应流
            InputStream inputStream = connection.getInputStream();
            //获取响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            List<HashMap> hashMaps = new ArrayList<>();
            while ((line = reader.readLine()) != null){
                HashMap hashMap = JSONObject.parseObject(line, HashMap.class);
                hashMaps.add(hashMap);
            }
            reader.close();
            connection.disconnect();

            return hashMaps;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

注意:
测试时需要进入微信小程序,关闭IP白名单,否则请求不了openid

在这里插入图片描述

测试结果:
在这里插入图片描述

补充:
获取openid的请求链接可以直接在浏览器输入,直接获取openid,但是会暴露appid和secret,因此需要在后端请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序获取用户唯一标识openid 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 结构型设计模式之外观模式【设计模式系列】

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 设计模式系列 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now everythin
  • Debug工具的使用

    Debug工具的使用 断点调试 debug的使用 断点调试的快捷键 F7 跳入 F8 跳过 shift F8 跳出 F9 resume 执行到下一个断点 F7 跳入方法内 F8 逐行执行代码 shift F8 跳出方法
  • VNC+FileZilla使用

    VNC FileZilla使用 VNC FileZilla 在使用树莓派和Jetson Nano开发板时 因为没买显示器 所以只能通过VNC用电脑屏幕显示 但从电脑传文件到开发板上诸多不便 于是配合FileZilla使用 使文件传输变得非常
  • Mybatis-SQL注入

    测试sql注入攻击 sql会睡眠5秒才返回 Test public void test02 QueryWrapper
  • 菜鸟学习nginx之HTTP请求处理(2)

    在上一篇介绍了Nginx定义的11个阶段 本篇将深入介绍Nginx是如何处理HTTP请求的 一 ngx http process request 处理HTTP请求 param r HTTP请求 当成功接收到请求行和Header时 就可以处理
  • Java类加载机制与Tomcat类加载器架构

    Java类加载机制 类加载器 虚拟机设计团队把类加载阶段中的 通过一个类的全限定名来获取描述此类的二进制字节流 这个动作放到Java虚拟机外部去实现 以便让应用程序自己决定如何去获取所需要的类 实现这个动作的代码模块称为 类加载器 类加载器
  • Unity界面入门教程

    Unity界面入门教程 本教程将介绍Unity的用户界面 GUI 学时 一小时 作者 Graham McAllister 译者 威阿2009 04 06 目录 1 教程目的 2 屏幕布局 3 查找游戏对象 4 创建游戏对象 5 场景视图导航
  • java代码分层、每层业务、为何分层

    SpringBoot 分为四层 controller层 service层 dao层 model层 controller层 控制层 存放各种控制器 来提供数据或者返回界面 实现对Get和Post的相应 用于前后端交互 service层和前端通
  • led灯条维修_浅谈LED路灯驱动电源设计方案--海光照明

    LED路灯是LED照明中一个很重要应用 在节能省电的前提下 LED路灯取代传统路灯的趋势越来越明显 市面上 LED路灯电源的设计有很多种 早期的设计比较重视低成本的追求 到近期 共识渐渐形成 高效率及高可靠性才是最重要的 下面针对几种不同L
  • Python_OpenCV调用摄像头完成人脸识别

    核心是找到 haarcascade frontalface default xml 这个文件 一般来说下载了OpenCV库都有 直接去自己电脑找就行了 import cv2 调用模型库文件 face cascade cv2 CascadeC
  • docker制作镜像

    从 rootfs 压缩包导入 格式 docker import 选项 lt 文件 gt lt 仓库名 gt lt 标签 gt 压缩包可以是本地文件 远程 Web 文件 甚至是从标准输入中得到 压缩包将会在镜像 目录展开 并直接作为镜像第一层
  • 别让“低效沟通”成为企业的成本之痛

    管理学家曾说过 企业管理行为与沟通密不可分 80 的管理成本都与沟通有关 如今 有效沟通 在主流的企业管理价值倡导中越来越被广泛提及 渐渐成为每一个管理者必备的素质要求 其中最直接的体现就是各大商学院已经把它纳入核心课程体系中去 一 有效沟
  • WildFly 报错 java.lang.NoClassDefFoundError

    在eclipse上WildFly部署项目后 启动一直报错java lang NoClassDefFoundError 功夫不负有心人 终于解决 解决方案 查了网上很多资料 有说环境变量配置不对的 有说改wildfly 9 0 1 Final
  • Devops环境准备

    系统准备 https mirrors aliyun com centos 7 isos x86 64 安装Minimal 版本即可 root root 安装ifconfig yum install net tools x86 64 安装JD
  • 网络:网络协议基本原理

    引入 进程间通信 其实是通过内核的数据结构完成的 主要用于在一台linux上两个进程之间的通信 但是 一旦超出一台机器的范畴 我们就需要一种跨进程的通信机制 一台机器将自己想要表达的内容 按照某种约定好的格式发送出去 当另一条机器收到这些信
  • 八家校招公司的面试问题总结

    八家校招公司的面试问题总结 阿里 1 String s abc s存储在哪个区域 2 HashMap实现原理 ConcurrentHashMap实现原理 3 红黑树 为什么允许局部不平衡 4 TCP UDP区别 为什么可靠和不可靠 5 一次
  • Linux之Samba服务配置与管理

    Linux之Samba服务配置与管理 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件 由服务器及客户端程序构成 SMB Server Messages Block 信息服务块 是一种在局域网上共享文件和打印机的一种通信
  • Jetpack Compose — 让Composable具备生命周期感知

    Jetpack Compose 让Composable具备生命周期感知 我们将研究不同的方法来实现可组合 Composable 的生命周期感知 我们还将了解可组合生命周期和视图 View 生命周期之间的区别 我们将逐步探索不同的解决方案 以
  • 开源中国-仿写代码

    开源中国源码 div class page div
  • 微信小程序获取用户唯一标识openid

    相关知识 微信小程序 spring boot 一 步骤 1 获得的用户登录凭证code 有效期五分钟 2 发送参数code至后端 3 通过code获取openid 二 实现 1 获取code 接口 wx login 接口地址 https d