微信公众平台开发[1] —— 获取用户Openid及个人信息

前言:

初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客、问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的学渣一点帮助

背景介绍:

我需要用户接收微信分享的链接后,点击进入给参加活动的用户【点赞】,然后需要后台获取该微信用户的 openid 作为唯一的标记信息,以便保证该用户下次进入后进行数据库的比对,直接提取其对应的操作信息

操作流程:

一.公众号的信息配置

(1).一般情况下,使用的公众号/服务号 进行配置的信息基本如下:

       

(2).因为我个人学习申请的是订阅号,好多功能不开放,进而选择了“公众平台测试账号”

       

(3).点击“进入”后会被要求扫描二维码,使用自己的微信账号就可以

需要注意的是,“接口配置信息”中,URL为验证 token 的回调地址,此URL填写时多半需要你已经将代码上传的外网可访问的地址,我在后面会提供相应代码,再者注意Token值的确定,因为后面代码中会用到

       

(4).下拉页面,需要配置 网页授权获取用户基本信息

需要注意的是回调页面的域名一定不要写错,之前我就是错在这里浪费了很多时间,如果错误,后面二维码扫描时会报错:“redirect_uri参数错误”.个人建议去掉“http://”以及多余的后缀就好,可以参考下图

       

       

注:建议参考新篇(简洁化)-> 微信公众平台开发[6]- 微信集成类的使用

二.后台代码的编写

(1).参考回调地址的代码,该文件是我直接从开发者平台下载而来,只改动了“token”值

(2).参考下面访问地址的代码

注意 appid 的正确填写,其次就是 redirect_uri 的地址确定,我提供的可作参考。再者对于下面代码中的url中“scope=snsapi_userinfo可以自行控制,需要分辨 snsapi_base 和 snsapi_userfo 的简单区别,百度可有很多具体解释。

(3).参考 redirect_uri 中的代码

此代码的功能是打印出微信用户的信息,便于参考获取的 json 数据,当提取到微信用户的数据,后续相关数据库操作代码开发就不是难事了。



三.最后的功能测试

(1).使用“草料二维码”生成微信可扫描的二维码,然后使用手机扫描即可:

   
(2).扫描过后显示如下:

   

附录:

(1).提示信息

①. 微信公众号开发文档中有说明,需要访问的网站域名端口为 80,需要注意一下,当然多数默认为 80端口开放,如果没有外网可访问的网站,建议使用新浪 SAE,在此我使用的是公司服务器直接测试

. 因为微信开发的信息更新,获取我们网上获取的信息已过时,所以建议学会方法后面的操作参考开发文档也不是难事

. 在此提供两个参考网站,个人觉得除了部分时间久远,还是很详细的,尤其对于SAE,以及开发文档的解释都值得一读

(2).文章推荐

方倍工作室  小宇博客     微信开发知识库 草料二维码

推荐新篇(简洁化)微信开发集成类的使用

(3).源代码下载 >>>


### 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_tokenopenid. */ 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
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值