JAVA版微信公众号获取openId,微信用户信息
一. 前端页面js
1.获取页面传来的数据
function GetQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]); return null;
}
2.引用
var code = GetQueryString("code");
3.准备
(1).对地址进行UrlEncode编码
var url = encodeURIComponent("http://hamiwangluo.cn/hdw/web/index.html");
// 注意(1): 如果有业务需求,防止页面刷新,业务数据丢失,可以在连接后加参
// 例如:"http://hamiwangluo.cn/hdw/web/index.html?username=wanglei"
// 注意(2):此处的url不加 www、端口
(2).微信公众号的appid
微信公众平台登录
(3).微信API
window.location.href ="https://open.weixin.qq.com/connect/oauth2/authorize?" +"appid=APPID&redirect_uri=URL&response_type=code" +"&scope=snsapi_userinfo&state=STATE#wechat_redirect";
注意: APPID(大写) 替换为公众号appid、URL(大写) 替换为 上述(1)的url.
4.获取code
getCode();function GetQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]); return null;
}function getCode(){var code = GetQueryString("code");if(code==null||code==""){var url = encodeURIComponent("http://hamikeji.cn/hdw/web/index.html);window.location.href ="https://open.weixin.qq.com/connect/oauth2/authorize?" +"appid=wx0000000000&redirect_uri="+url+"&response_type=code" +"&scope=snsapi_userinfo&state=STATE#wechat_redirect";}else{$.ajax({ type : "POST", //提交方式 url : "localhost:8080/index",//路径 data : { "code" : code},success : function(result) {//返回数据根据结果进行相应的处理 } });}
}
(1)在你需要获取code的页面中加入如上js代码
(2)将获取到的code传入后台接口
二. 后台java代码
MAVEN - pom
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.3</version><classifier>jdk15</classifier></dependency>
1.需要的工具类
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;
import java.security.SecureRandom;public class CommonUtil {/*** 发送https请求* @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)*/public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {JSONObject jsonObject = null;try {// 创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setSSLSocketFactory(ssf);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 设置请求方式(GET/POST)conn.setRequestMethod(requestMethod);// 当outputStr不为null时向输出流写数据if (null != outputStr) {OutputStream outputStream = conn.getOutputStream();// 注意编码格式outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 从输入流读取返回内容InputStream inputStream = conn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;StringBuffer buffer = new StringBuffer();while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();inputStream = null;conn.disconnect();//jsonObject = JSONObject.fromObject(buffer.toString());jsonObject = JSONObject.fromObject(buffer.toString());} catch (ConnectException ce) {System.out.println("连接超时");} catch (Exception e) {System.out.println("请求异常");}return jsonObject;}
}
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;public class MyX509TrustManager implements X509TrustManager {// 检查客户端证书public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}// 检查服务器端证书public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}// 返回受信任的X509证书数组public X509Certificate[] getAcceptedIssuers() {return null;}
}
public class WeChatConfig {/*** 微信服务号APPID*/public static String APPID="";/*** appsecret*/public static String APPSECRECT="";/*** grant_type*/public static String GRANTTYPE="authorization_code";}
2.Controller
@RequestMapping(value = "/insertUserRoom", method = RequestMethod.POST)@ResponseBodypublic Object insertUserRoom(String code) {return roomService.insertUserRoom(code);}
3.Service
public Object insertUserRoom(String code) {String WX_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";try {if (StringUtils.isBlank(code)) {System.out.println("code为空");return "code为空";} else {String requestUrl = WX_URL.replace("APPID", WeChatConfig.APPID).replace("SECRET", WeChatConfig.APPSECRECT).replace("CODE", code).replace("authorization_code", WeChatConfig.GRANTTYPE);JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);if (jsonObject != null) {try {// 业务操作String access_token = jsonObject.getString("access_token");String openId = jsonObject.getString("openid");//拉取用户信息getUserMsg(access_token, openId);return openId;} catch (Exception e) {e.printStackTrace();}} else {System.out.println("code无效");return "code无效";}}} catch (Exception e) {e.printStackTrace();}return "error";}
注意:微信公众号获取用户头像等信息与小程序不一样,需要用openId、access_token获取(请看如下getUserMsg()方法)
private String getUserMsg(String access_token, String openId) {System.out.println();String WX_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";String requestUrl = WX_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openId);JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);try {if (jsonObject != null) {//System.out.println("用户信息"+jsonObject);String nickname = jsonObject.getString("nickname");String headimgurl = jsonObject.getString("headimgurl");String sex = jsonObject.getString("sex");String city = jsonObject.getString("city");String province = jsonObject.getString("province");String country = jsonObject.getString("country");//业务逻辑处理}else{System.out.println("信息为空");}} catch (IOException e) {e.printStackTrace();}return "success";}
JAVA版微信公众号获取openId,微信用户信息相关推荐
- php微信获取openid_微信公众号获取openid(php实例)
微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...
- 微信公众号获取OpenId(未授权)(需要关注公众号)
文章的一开始,我先解释下微信公众号的openId. openId是微信对于用户的唯一辨识,只要有用户关注你的公众号,微信会通过公众号和用户微信号通过一种算法生成一种唯一标识码,也就是openId,用数 ...
- 微信公众号获取openid(vue)
export default {created () {this.page= (this.getUrlParam("page")===null)?this.getUrlParam( ...
- php微信小程序获取用户信息,微信小程序获取openid及用户信息的方法
本文主要介绍微信小程序如何获取openid及用户信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 1. 获取openid 1.1 获取code 调用接口获取登录凭证(code ...
- 微信公众号获取openid(java后端+html实现)
准备工作: 1.认证通过的微信公众号 2.获取微信公众号的appid和secret 3.配置回调地址:开发>接口权限>网页服务>网页授权>修改 该示例为用户静默状态下获取ope ...
- 微信公众号获取openid失败
前提:微信公众号设置中的"网页授权域名"已经配置好. 现象:获取code成功,但是通过code获取openid失败,报错 : {"errcode":40029, ...
- 微信公众号获取AccessToken
微信公众号获取AccessToken 微信公众号appid和appSecret及配置相关的ip白名单 用到的pom.xml文件 <!-- fastjson--><dependency ...
- 微信公众号开发:获取openId和用户信息(完整版)
注:之前总结怎么进行本地公众号开发调试,时间一长忘记开发配置却忘了,所以这里记录一下公众号开发配置,方便快速上手. 目录 开发前服务器配置 网页授权获取用户基本信息 snsapi_base snsap ...
- java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例
本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...
最新文章
- 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】...
- word中viso/math type公式比文字大
- tc351i 发送短信息 代码
- arm linux 添加ntp服务,嵌入式linux添加NTP服务
- EBS业务学习之应付INVOICE类型
- 【CodeForces - 244B】Undoubtedly Lucky Numbers (dfs打表 + 二分)
- 物流行业解决方案:聚焦物流行业数据痛点,帮助企业搭建数据平台
- 尝试从远程计算机访问Web服务不显示调用按钮
- Linux使用docker安装RabbitMQ一站式教程【图文教程】
- bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: 的解决方法
- 《模拟电子技术》清华大学华成英教授主讲
- freeswitch被外国IP攻击盗打的防护措施
- 配置管理计划的新设想
- android垃圾清理动画,[Android开发实战]金山清理大师(猎豹清理大师)一键加速快捷方式动画实现...
- 第六十九章 Caché 函数大全 $WCHAR 函数
- Gaussdb,国产数据库的崛起
- 《c语言程序设计》网课答案,C语言程序设计基础知到网课答案
- 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
- 18、iOS底层分析 - GCD(一)基本概念与简单使用
- 在web服务器上运行jsp文件