微信公众号获取OpenId(未授权)(需要关注公众号)

文章的一开始,我先解释下微信公众号的openId。

openId是微信对于用户的唯一辨识,只要有用户关注你的公众号,微信会通过公众号和用户微信号通过一种算法生成一种唯一标识码,也就是openId,用数学表达式也就是说:

x=你的公众号,y=用户微信号,f()函数表示算法

那么openId = f(x,y);

后面就讲讲怎么获取到openId把,我下面先讲一种简易的方式(还有一种后续有空加上)

1.在公众号后台设置回调的域名(大多情况下是你的项目)

开发-接口权限-网页账号-用户授权获取用户基础信息中修改

2.在页面上访问下面的网址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=*******&redirect_uri=你回调的地址&response_type=code&scope=snsapi_base&state=1#wechat_redirect

上面的会返回到你回调的地址?code=xxxxxxxxx

也就是说它会返回到你回调的地址并且带上code参数,一般情况下,回调的地址设置为后端的action即可,然后就可以获取到code了,当你获取到code,已经成功了一大半。

3.然后在后端访问下面的网址

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

code的参数用刚刚返回的code值。</

### Java 微信公众号 实现 获取 OpenID 示例代码 为了通过Java项目实现微信公众号获取OpenID功能,可以按照以下方法操作。此过程涉及使用AppID、AppSecret以及用户授权码(code),并通过调用微信API来获得用户的OpenID。 #### 准备工作 确保已经注册并配置好微信公众平台账号,并拥有合法的应用程序标识符(AppID)和应用程序密钥(AppSecret)[^1]。 #### 用户授权重定向URL构建 当用户访问应用时,需先引导其至微信OAuth2.0授权页面完成登录授权动作: ```java // 构建授权链接 String appId = "your_appid"; // 替换成实际的appid String redirectUrl = URLEncoder.encode("http://example.com/callback", "UTF-8"); // 回调地址编码处理 String scope = "snsapi_base"; // 如果只需要获取openid则设置为snsapi_base;如果还需要其他信息,则设为snsapi_userinfo StringBuilder authUrlBuilder = new StringBuilder(); authUrlBuilder.append("https://open.weixin.qq.com/connect/oauth2/authorize?") .append("appid=").append(appId) .append("&redirect_uri=").append(redirectUrl) .append("&response_type=code&scope=").append(scope).append("#wechat_redirect"); ``` #### 处理回调请求中的Code参数 一旦用户同意授权后会被重定向回指定的`redirect_url?code=CODE&state=STATE`路径,在这里可以从HTTP GET请求中提取出临时票据(code),用于下一步换取access_token及openid: ```java @WebServlet("/callback") public class CallbackServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String code = request.getParameter("code"); if (null != code && !"".equals(code.trim())) { try { // 使用code去交换access_token 和 openid String accessTokenAndOpenId = getAccessTokenAndOpenIdByCode(code); // 解析返回的结果... } catch (Exception e) { logger.error(e.getMessage(), e); } } // 继续后续逻辑... } } ``` #### 调用接口获取Access Token 及 OpenID 最后一步就是利用上一步得到的code微信服务器发起POST请求以获取最终所需的access_token与openid组合数据包: ```java private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token"; /** * 根据授权后的code获取access_token和openid. */ private String getAccessTokenAndOpenIdByCode(String code) throws Exception{ Map<String,Object> params = Maps.newHashMap(); params.put("appid","your_appid"); params.put("secret","your_secret"); params.put("code",code); params.put("grant_type","authorization_code"); ResponseEntity<String> resultEntity = RestTemplateUtil.postForResponseEntity(ACCESS_TOKEN_URL,params); JSONObject jsonObject = JSON.parseObject(resultEntity.getBody()); return JsonUtils.toJSONString(jsonObject); // 返回json字符串形式的数据给前端解析 } ``` 上述代码片段展示了如何在一个典型的Web环境中集成微信OAuth2.0认证机制从而安全有效地取得用户的唯一身份识别号——OpenID
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值