1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JAVA版微信公众号获取openId 微信用户信息

JAVA版微信公众号获取openId 微信用户信息

时间:2024-05-19 03:10:06

相关推荐

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("/hdw/web/index.html");// 注意(1): 如果有业务需求,防止页面刷新,业务数据丢失,可以在连接后加参// 例如:"/hdw/web/index.html?username=wanglei"// 注意(2):此处的url不加 www、端口

(2).微信公众号的appid

微信公众平台登录

(3).微信API

window.location.href ="https://open./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("/hdw/web/index.html);window.location.href ="https://open./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 .ssl.HttpsURLConnection;import .ssl.SSLContext;import .ssl.SSLSocketFactory;import .ssl.TrustManager;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ConnectException;import .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 .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./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./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";}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。