一. 前端页面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,微信用户信息相关推荐

  1. php微信获取openid_微信公众号获取openid(php实例)

    微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...

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

    文章的一开始,我先解释下微信公众号的openId. openId是微信对于用户的唯一辨识,只要有用户关注你的公众号,微信会通过公众号和用户微信号通过一种算法生成一种唯一标识码,也就是openId,用数 ...

  3. 微信公众号获取openid(vue)

    export default {created () {this.page= (this.getUrlParam("page")===null)?this.getUrlParam( ...

  4. php微信小程序获取用户信息,微信小程序获取openid及用户信息的方法

    本文主要介绍微信小程序如何获取openid及用户信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 1. 获取openid 1.1 获取code 调用接口获取登录凭证(code ...

  5. 微信公众号获取openid(java后端+html实现)

    准备工作: 1.认证通过的微信公众号 2.获取微信公众号的appid和secret 3.配置回调地址:开发>接口权限>网页服务>网页授权>修改 该示例为用户静默状态下获取ope ...

  6. 微信公众号获取openid失败

    前提:微信公众号设置中的"网页授权域名"已经配置好. 现象:获取code成功,但是通过code获取openid失败,报错 : {"errcode":40029, ...

  7. 微信公众号获取AccessToken

    微信公众号获取AccessToken 微信公众号appid和appSecret及配置相关的ip白名单 用到的pom.xml文件 <!-- fastjson--><dependency ...

  8. 微信公众号开发:获取openId和用户信息(完整版)

    注:之前总结怎么进行本地公众号开发调试,时间一长忘记开发配置却忘了,所以这里记录一下公众号开发配置,方便快速上手. 目录 开发前服务器配置 网页授权获取用户基本信息 snsapi_base snsap ...

  9. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

最新文章

  1. 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】...
  2. word中viso/math type公式比文字大
  3. tc351i  发送短信息 代码
  4. arm linux 添加ntp服务,嵌入式linux添加NTP服务
  5. EBS业务学习之应付INVOICE类型
  6. 【CodeForces - 244B】Undoubtedly Lucky Numbers (dfs打表 + 二分)
  7. 物流行业解决方案:聚焦物流行业数据痛点,帮助企业搭建数据平台
  8. 尝试从远程计算机访问Web服务不显示调用按钮
  9. Linux使用docker安装RabbitMQ一站式教程【图文教程】
  10. bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: 的解决方法
  11. 《模拟电子技术》清华大学华成英教授主讲
  12. freeswitch被外国IP攻击盗打的防护措施
  13. 配置管理计划的新设想
  14. android垃圾清理动画,[Android开发实战]金山清理大师(猎豹清理大师)一键加速快捷方式动画实现...
  15. 第六十九章 Caché 函数大全 $WCHAR 函数
  16. Gaussdb,国产数据库的崛起
  17. 《c语言程序设计》网课答案,C语言程序设计基础知到网课答案
  18. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
  19. 18、iOS底层分析 - GCD(一)基本概念与简单使用
  20. 在web服务器上运行jsp文件

热门文章

  1. 安全浏览器“隐身”模式可以查看历史记录吗?
  2. 将多个Word表格中的指定值提取到Excel中,方便查看、统计、汇总。Word精灵
  3. HTML5基础学习——列表标签表单标签
  4. javascript五种跳转代码分享
  5. 2018年度托福考情分析——写作篇
  6. 怎样区分汽车脚垫和汽车地胶?
  7. vue滚动条事件(获取滚动条距离底部距离)
  8. 红米1S的android 4.4.4刷机到android 7.1的Lineage OS 14.1
  9. 十六、数字图像处理之图像分割
  10. 芯片国产自研将是不可逆转的趋势