如何获取微信用户openid

article/2025/10/23 5:56:05

📒博客首页崇尚学技术的科班人
小肖来了🏇
🍣今天给大家带来的文章是《如何获取微信用户openid》🍣
🍣希望各位小伙伴们能够耐心的读完这篇文章🍣
🙏博主也在学习阶段,如若发现问题,请告知,非常感谢🙏
💗同时也非常感谢各位小伙伴们的支持💗

文章目录

  • 1、前言
  • 2、手工方式
    • 2.1、设置域名
    • 2.2、获取code
    • 2.3、换取access_token
  • 3、使用第三方sdk
    • 3.1、引入第三方依赖
    • 3.2、将微信公众号配置写入yaml文件并引入类中
    • 3.3、编写配置类初始化设置wxMpService配置
    • 3.4、编写对应的controller
    • 3.5、进行debug测试

1、前言

随着技术的发展,微信的一系列服务渗透进了我们的生活,但是我们应该怎样进行微信方面的开发呢。相信很多的小伙伴们都很渴望知道吧。这篇文章就是来解决大家的一些疑惑的。首先我们要进行相关的开发的话,那么我们需要先获取微信的openid。那么我们英爱怎样获取呢?这里我会介绍两种方式。

2、手工方式

官方文档

2.1、设置域名

(1).注册对应的公众号找到下图位置

在这里插入图片描述

(2). 在natapp.cn上购买自己的用于微信开发的域名

注册地址

在这里插入图片描述

哈哈,这个网站上面的域名也不是特别的贵呀,我在这上面买的一个域名为期一个月的话也就才12元,且改类型的属于二级域名,是已经备过案的,所以也就不需要备案。

(3). 下载对应的客户端进行启动

在这里插入图片描述


  1. windows上启动的命令
natapp -authtoken 你的authtoken
  1. 启动后

在这里插入图片描述

可见我的域名指向了127.0.0.1:8080

(4).将我们的域名填到公众号中JS接口安全域名提交

在这里插入图片描述

提交之前我们需要将上图中的红色框框住的部分的文件下载下来放置项目的static目录下,测试访问通过之后,然后才能进行提交。

2.2、获取code

可谓是一波三折呀,我本来以为我这个项目就要gg了。但也是我自己太小儿科了。微信怎么可能没有想到这么一个问题呢。就是微信公众号的 网页授权获取用户基本信息 功能服务。它这个功能服务必须只有 服务号 才拥有,但是其实每个用户可以免注册获得一个测试号,该测试号就含有这个特殊功能服务。

  • (1).登录自己的测试号

在这里插入图片描述

微信测试号是免注册的,我们直接扫码登录即可。


  • (2).编写对应的接口
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @author :小肖* @date :Created in 2022/2/1 21:55*/
@RestController
@RequestMapping("/weixin")
@Slf4j
public class WeixinController {@GetMapping("/auth")public void auth(@RequestParam("code") String code){log.info("进入了auth方法...");log.info("code = {}",code);}
}

  • (3).在登录测试号之后进行网页授权

在这里插入图片描述


在这里插入图片描述

授权的域名就是我们在natapp.cn上购买的域名,如果没有进行授权的话那么就会报出 10003 redirect_uri域名与后台配置不一致 错误。

  • (4).进行访问url进行测试

https://open.weixin.qq.com/connect/oauth2/authorize?appid=测试号的appid&redirect_uri=http://你的域名/sell/weixin/auth&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

注意点

在这里插入图片描述

被测试的对象必须先关注对应的测试号且必须在微信客户端进行访问。

  • (5).测试结果

在这里插入图片描述

成功获取了用户的code信息。

2.3、换取access_token

  • (1).编写的controller
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;/*** @author :小肖* @date :Created in 2022/2/1 21:55*/
@RestController
@RequestMapping("/weixin")
@Slf4j
public class WeixinController {@GetMapping("/auth")public void auth(@RequestParam("code") String code){log.info("进入了auth方法...");log.info("code = {}",code);String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=appsecret&code=" + code + "&grant_type=authorization_code";RestTemplate restTemplate = new RestTemplate();String response = restTemplate.getForObject(url, String.class);}
}
  • (2).访问的url组成

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数是否必须说明
appid公众号的唯一标识
secret公众号的appsecret
code填写第一步获取的code参数
grant_type填写为authorization_code
  • (3).访问的结果
{"access_token": "53_HK355v2MhOolNlGkaoUf4oDCkyX0WDollvsQNU5SvhsvmvF2S2VoqdPXuokfERI2oqFvQijVShq8aQzeQ9n01mGKSJn7q5rLAcYbTjm1H7k","expires_in": 7200,"refresh_token": "53_C1us_G770mgzXjd-PuK329qB65lXiK483_qxUXjKudwWIdHkOz5ntwlByEgUQfMEy_-7tCCzcO4DoHaFbY0JurpZYD3Bys6DLs8ua8J_CjU","openid": "你的openid","scope": "snsapi_base"
}

3、使用第三方sdk

3.1、引入第三方依赖

        <!--微信公众号开发需要引入的依赖--><dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>3.1.0</version></dependency>

3.2、将微信公众号配置写入yaml文件并引入类中

wechat:mpAppId: 你的微信测试号appIdmpAppSecret: 你的微信测试号secret
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author :小肖* @date :Created in 2022/2/2 10:31*/
@Component
@Data
@ConfigurationProperties(prefix = "wechat")
public class WechatAccountConfig {/*** 公众号id*/private String mpAppId;/*** 公众号密钥*/private String mpAppSecret;}

3.3、编写配置类初始化设置wxMpService配置

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @author :小肖* @date :Created in 2022/2/2 10:24*/
@Component
public class WechatMpConfig {@Autowiredprivate WechatAccountConfig wechatAccountConfig;@Autowiredprivate WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage;@Beanpublic WxMpService wxMpService(){WxMpService wxMpService = new WxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxMpInMemoryConfigStorage);return wxMpService;}@Beanpublic WxMpInMemoryConfigStorage wxMpConfigStorage(){/*** 这里需要注意的是 由于父类中没有定义对应的接口* 所以所有的方法都在其实现类中,所以我们要构造实现类*/WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();wxMpConfigStorage.setAppId(wechatAccountConfig.getMpAppId());wxMpConfigStorage.setSecret(wechatAccountConfig.getMpAppSecret());return wxMpConfigStorage;}
}

3.4、编写对应的controller

import com.xiao.enums.ResultEnum;
import com.xiao.exception.SellException;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @author :小肖* @date :Created in 2022/2/2 10:20*/
@Controller
@RequestMapping("/wechat")
@Slf4j
public class WechatController {@Autowiredprivate WxMpService wxMpService;@GetMapping("/authorize")public String authorize(@RequestParam("returnUrl") String returnUrl){String url = "http://xiao-sell.natapp1.cc/sell/wechat/userInfo";String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO,returnUrl);return "redirect:" +  redirectUrl;}@GetMapping("/userInfo")public String userInfo(@RequestParam("code") String code,@RequestParam("state") String returnUrl) {WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();try{wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);}catch (WxErrorException e){log.error("【微信网页授权错误】 exception = {}",e);throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(),e.getError().getErrorMsg());}String openId = wxMpOAuth2AccessToken.getOpenId();log.info("openid = {}",openId);return "redirect:" + returnUrl + "?openid=" + openId;}
}

3.5、进行debug测试

  • 第一个断点

在这里插入图片描述

该重定向的url很明显就是我们手工方式中获取codeurl

  • 第二个断点

在这里插入图片描述

成功获取了codeopenid


http://chatgpt.dhexx.cn/article/qOu05E3P.shtml

相关文章

openID相关知识

1.openID是什么 openID是微信平台推出的&#xff0c;每个用户在每个公众号的用户标志。&#xff08;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html&#xff09; openID目前是由28位加密过后的字符串组成。 再次说明是&…

微信openid你了解多少?appid,appsecert又是啥?

openid这个东西有点泛。百度搜到的都说这个东西可作为微信用户唯一的ID&#xff0c;然而很多都被认为每个微信号只能有且只有一个openid. 下面澄清一下这个openid 微信号&#xff1a;这个大家都可以理解&#xff0c;每个人都有一个微信号&#xff0c;不会重复。修改一次后也…

OpenID简介

一、OpenID简介 OpenId是一个以用户为中心的数字身份识别框架&#xff0c;它具有开放、分散、自由等特性。OpenId的创建是基于这样一个 概念&#xff1a;我们可以通过URI&#xff08;或者URL网址&#xff09;来识别一个网站。同样&#xff0c;我们也可以通过这样的方式来识别一…

什么是OpenID?OpenID概念、原理和案例

这几周有关OpenID的新闻不断&#xff1a;Google Profile变身OpenID、WordPress上的Google Friend Connect插件实现OpenID留言、OpenID先驱JanRain获得325万美元风险投资、雅虎将全面支持Facebook Connect服务…… 正好前段时间看了一些OpenID的资料&#xff0c;希望下面的内容可…

window.onblur 和 window.onfocus

2019独角兽企业重金招聘Python工程师标准>>> 在你浏览其他窗口页面、或是浏览器最小化、又或是点击了其他程序等等&#xff0c;都算是浏览器窗口失去焦点&#xff0c;那么 window.onblur 事件就会触发。 当你浏览别的窗口或者别的程序,直接点就是当你的窗口失去焦点…

html中onblur属性,html中的onfocus和onblur是什么属性?怎么使用?

html中的onfocus和onblur是什么属性&#xff1f;怎么使用&#xff1f;本篇文章就给大家介绍onfocus属性和onblur属性是什么&#xff0c;让大家了解onfocus属性和onblur属性的简单用法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你们有所帮助。 …

事件绑定(onclick,onfocus,onblur)

事件绑定(onclick,onfocus,onblur) 学习路线&#xff1a;JavaScript基础语法&#xff08;输出语句&#xff09;->JavaScript基础语法&#xff08;变量&#xff09;->JavaScript基础语法&#xff08;数据类型&#xff09;->JavaScript基础语法&#xff08;运算符&…

js——input获取焦点-onfocus和失去焦点-onblur 自动获取焦点-autofocus=autofocus onchange 事件会在域的内容改变时发生

js——input获取焦点-onfocus和失去焦点-onblur & 自动获取焦点-autofocus“autofocus” & onchange 事件会在域的内容改变时发生 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…

js中的focus()

eg&#xff1a; function submitForm(){ var title $("#title").val(); var content ue.getContent(); if(title.length>100){ $.messager.alert("提示","<br>公告标题超过字数限制!","info"); $("#titl…

HTML onfocus (获得焦点)和 onblur (失去焦点)

HTML onfocus 事件属性 定义和用法 onfocus 属性在元素获得焦点时触发。 onfocus 常用于 <input>、<select> 以及 <a>. 提示&#xff1a;onfocus 属性与 onblur 属性相反。 注释&#xff1a;onfocus 属性不适用于以下元素&#xff1a;<base>、<bdo&…

multisim14

multisim14 安装之后&#xff0c;打开却无法使用&#xff0c;提示 不知道为什么会出现这种情况&#xff0c;望大神告知

multisim14安装后怎么汉化(超详解)

当有些学生开始装multisim时&#xff0c;有的安装不是汉化&#xff0c;想着是不是软件语言设置上原因&#xff0c;其实是缺少汉化包&#xff0c;当使用multisim时&#xff0c;对仪器图标倍感陌生&#xff0c;还有那些英语不好令人作呕的英文栏&#xff0c;这时想把该软件汉化&a…

Multisim12\Multisim14访问主数据库失败的解决方法

Multisim12\Multisim14访问主数据库失败的解决方法 系统WIN10 安装Multisim之后访问主数据库失败&#xff0c;访问企业数据失败&#xff0c;访问用户数据库失败&#xff0c;接连三个确定&#xff0c;然后就是元器件库一个文件也没有&#xff0c;以为是安装破解出了错&#xf…

Multisim14安装报错fatal error!Required NIPathsDir property NISHAREDDIR is undefined.

在该过程中&#xff0c;一直报错。。。 已经尝试过下载了NI的卸载软件然后重下没用。手动设置了系统变量还是没用。目前还是无法解决该问题。绿条还是能加载&#xff0c;只是加载到满时就不再动了&#xff0c;点击右边的确定就又会同时关闭。。。 作业实验报告还需要这个软件&…

multisim14 电流探针在哪儿

multisim14笔记 第一种方法&#xff1a;Place-probe&#xff0c;即可看见各种探头 第二种方法&#xff1a;直接在工具栏中添加

之前安装过Multisim14,再次安装失败的解决方法

## 之前安装过Multisim14&#xff0c;再次安装失败的解决方法 之前曾因为课程设计从公众号&#xff08;软件安装管家&#xff09;中安装过一次Multisim 14.0&#xff0c;后来以为没用了便草草一卸载以为万事大吉&#xff0c;不料不仅现在要重新使用而且安装出现特殊情况&#x…

【Multisim14】运行10版本文件时数码管一直显示为0的问题

解决办法&#xff1a;RefDes中不使用中文 问题发现过程&#xff1a; 1. 该文件是之前在Multisim10上完成的&#xff0c;今天在Multisim14运行是发现数码管一直显示为0。 2. 直接替换数码管后&#xff0c;依旧出现此问题。 3. 怀疑是输出到数码管的导线存在问题&#xff08;但电…

Multisim14访问主数据库失败的解决方法

Multisim14访问主数据库失败的解决方法 版本Multisim14.0 安装Multisim之后访问主数据库失败&#xff0c;然后就是元器件库一个文件也没有。 捣鼓了几天后&#xff0c;终于能用了&#xff0c;现在整理下可能的解决方法&#xff1a; 前俩个方法是某大佬的研究&#xff0c;在此附…

Multisim14 电子时钟(拥有定时闹钟、设置时间、全局复位功能)

详细请看https://afdian.net/item/914db14caed511eda23852540025c377 详细请看

单片机实验中用到的元器件(Multisim14)

文章目录 单片机实验中用到的元器件&#xff08;Multisim14&#xff09;发光二极管开关电阻电源地带小数点的共阳数码管8位的电阻排8位的拨码开关三极管继电器白炽灯交流电源译码器芯片74LS138比较器LM393可调电位器三极管2SC1815 单片机实验中用到的元器件&#xff08;Multisi…