使用uni-app获取微信小程序openid--Java后端实现

news/2024/7/20 3:40:01 标签: 数据库, java, 小程序, python, openid

精选30+云产品,助力企业轻松上云!>>> hot3.png

前言

这个是纯前端(uniapp)获取openid的:https://my.oschina.net/u/4284277/blog/3168782

但是这个有一个问题就是小程序正式上线后无法拿到openid,所以更新了下面这个后端(Java)获取的,希望对你有帮助。

一、 介绍openid

微信开发时, 用户使用小程序需要授权, 这时就要用到openid进行绑定这个用户。 openid是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。

1. 为什么要使用openid呢?

openid是指这个用户在某一个小程序中授权后的唯一标识(比如你的身份证)

2. 如果不使用会带来什么问题呢?

第一次授权时将用户数据保存到数据库, 然后用户把缓存清理了, 第二次授权的时候我们就无法知道这个用户是否授权过。用户就会重新保存一份新的数据进数据库。这是不符合正常逻辑的,因为如果该用户买过东西,再次授权,东西都看不到了,会像新的号一样。当然了, 有的设计是有自己的记录方式的,比如需要注册登录。

3. openid如何获取?

需要用到wx指定的接口

二、 实现

1. uniapp

javascript">//漫路h
uni.login({
   success: res => {
     //code值(5分钟失效)
     console.info(res.code);
     uni.request({
        //改成自己的服务地址
        url:'http://192.168.1.4:10010/wx/getOpenid/'+res.code,
        method:'GET',
        success: (res) => {
           //这里就拿到openid了,不过一般都是直接在后端使用了,不需要拿到前端了,我就是为了做个演示。
           console.info(res);
        }
     })
   }
});

2. pom依赖

HttpClient的依赖和json转换的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.54</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>

3. Java接口

java">/**
 * @author 漫路h
 * 微信controller
 */
@RestController
@RequestMapping("/wx")
public class WChat {
    //小程序appid ,需要改为真实的
    private final static String APPID = "wx3599fdagf87366c9";

    //小程序secret ,需要改为真实的
    private final static String SECRET = "1a5567978djhs875ss8s2397er57jce";

    /**
     * 通过 appid & secret & code 获取 openid
     * @param code
     */
    @GetMapping("/getOpenid/{code}")
    public String getOpenid(@PathVariable String code) throws IOException {
        //wx接口路径
        String url = "https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code&" +
                    "appid=" + APPID + "&secret=" + SECRET + "&js_code=" + code;
        //使用HttpClient发送请求
        CloseableHttpClient httpclient = HttpClients.createDefault();
        //发送Get请求
        HttpGet request = new HttpGet(url);
        request.addHeader("Content-Type", "application/json");
        //获得响应
        CloseableHttpResponse response = httpclient.execute(request);
        //拿到响应体
        HttpEntity httpEntity = response.getEntity();
        //使用工具转换
        String result = EntityUtils.toString(httpEntity, "UTF-8");// 转成string
        JSONObject jsonObject = JSONObject.parseObject(result);
        System.out.println(jsonObject);//拿到的所有内容
        String openid = jsonObject.get("openid").toString();
        System.out.println(openid);//拿到的openid
        return openid;
    }
}

http://www.niftyadmin.cn/n/625899.html

相关文章

Java的多线程与并发编程

Java的多线程与并发编程 一、线程的实现 多线程创建 线程继承Thread类&#xff0c;实现run方法 public class Thread1 extends Thread {public void run(){//线程要执行的代码} }​ 线程实现Runnable接口&#xff0c;实现run方法 public class Thread1 implements Runnable {p…

解决:cannot deserialize from Object value (no delegate- or property-based Creator)

精选30云产品&#xff0c;助力企业轻松上云&#xff01;>>> com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.manlu.xxx.xxx (no Creators, like default construct, exist): cannot deserialize from Object v…

Java多线程和并发编程(续)

Java多线程和并发编程&#xff08;续&#xff09; 并行模式 主从模式&#xff08;Master-Slave&#xff09;Worker模式(Worker-Worker) Java并发编程 ExecutorFork-Join框架 一、Executor 分离任务的创建和执行者的创建 线程重复利用&#xff08;new线程代价很大&#xff09…

CSS与CSS3美化页面

CSS与CSS3美化页面 一、简介 CSS是&#xff08;Cascading Style Sheets&#xff09;&#xff0c;中文名叫层叠样式表。样式内定义的是如何显示HTML元素&#xff0c;目的是美化HTML页面样式通常储存在样式表中&#xff08;.css文件&#xff09;&#xff0c;实现了样式和内容分…

最详细的Java泛型知识点

Java泛型 一、 泛型&#xff08;Generic Programming&#xff09; 作用&#xff1a;编写的代码可以被很多不同类型的对象所重用 泛型类&#xff1a; ArrayList&#xff0c;HashSet&#xff0c;HashMap等泛型方法&#xff1a;Collections.binerySearch&#xff0c;Arrays.sor…

解决:If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

精选30云产品&#xff0c;助力企业轻松上云&#xff01;>>> 错误日志 Description:Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classActio…

Git分布式版本控制工具详细使用步骤

文章目录1. Git介绍1.1 Git历史1.2 Git与Svn对比1.2.1 Git1.2.2 Svn1.3 Git工作流程2. Git安装2.1 软件下载2.1.1 Git下载2.1.2 TortoiseGit下载2.1.3 中文语言包下载2.2 软件安装2.2.1 安装Git2.2.2 安装TortoiseGit2.2.3 安装中文语言包3. 使用Git管理文件版本3.1 创建版本库…

5分钟搞懂Java静态代理与动态代理

Java代理模式 一、代理的概念 ​ 代理&#xff08;Proxy&#xff09;&#xff1a;即代替处理&#xff0c;类似于中间人这一角色。 ​ 传统的模式是调用方直接去调用被调用方来达到目的&#xff0c;这样导致的缺点是&#xff1a;耦合度增加。当在两者之间增加了一个代理之后&…