微信小程序获取openId(JAVA)

1|0openId是微信用户的唯一标识

官方文档:小程序登陆

1|01、app.js
onLaunch: function () { // 展示本地存储能力 this.getUserOpenId(); } getUserOpenId: function(callback) { var self = this if (self.globalData.openid) { callback(null, self.globalData.openid) } else { wx.login({ success: function(data) { wx.request({ url: self.globalData.URL+"/wxLoginController/getWxOpenId.json?code="+data.code, method:"POST", success: function(res) { console.log('拉取openid成功', res.data) self.globalData.openid = res.data.openid }, fail: function(res) { console.log('拉取用户openid失败,将无法正常使用开放接口等服务', res) } }) }, fail: function(err) { console.log('wx.login 接口调用失败,将无法正常使用开放接口等服务', err) } }) } },
1|02、wxLoginController.java
@RequestMapping(value = "/getWxOpenId.json", method = RequestMethod.POST) @ResponseBody public JSONObject getWxOpenId(HttpServletRequest request){ String code=request.getParameter("code"); String APPID=""; //密钥 String SECRET=""; //请求微信api获取用户的openid和sessionKey JSONObject jsonObject = getUserWXLoginInfo(code,APPID,SECRET); return jsonObject; } private JSONObject getUserWXLoginInfo(String wxCode,String AppID,String AppSecret) { String requestUrl = "https://api.weixin.qq.com/sns/jscode2session"; Map<String,String> requestUrlParam = new HashMap<String,String>(); requestUrlParam.put("appid",AppID); //开发者设置中的appId requestUrlParam.put("secret", AppSecret); //开发者设置中的appSecret requestUrlParam.put("js_code", wxCode); //小程序调用wx.login返回的code requestUrlParam.put("grant_type", "authorization_code"); //默认参数 //发送post请求读取调用微信 https://api.weixin.qq.com/sns/jscode2session 接口获取openid用户唯一标识 JSONObject jsonObject = JSON.parseObject(UrlUtil.sendPost(requestUrl, requestUrlParam)); return jsonObject; }
1|03、UrlUtil.java
public class UrlUtil { private final Logger LOG = LogManager.getLogger(this.getClass()); /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param paramMap 请求参数 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, Map<String, ?> paramMap) { PrintWriter out = null; BufferedReader in = null; String result = ""; String param = ""; Iterator<String> it = paramMap.keySet().iterator(); while(it.hasNext()) { String key = it.next(); param += key + "=" + paramMap.get(key) + "&"; } try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } }

__EOF__

本文作者boxJLP
本文链接https://www.cnblogs.com/toWorld/p/getOpenId.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   boxJLP  阅读(510)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示