....

public String cs() throws Exception{
/*访问页面,服务器会得到 code(request.getParameter("code")) ,根据 code 换取网页授权access_token
根据获取的access_token,openid 然后再请求获取userinfo的接口。得到微信用户的所有信息*/
String code = request().getParameter("code");
String scope = request().getParameter("scope");
JSONObject jsonObject=new JSONObject(); if(null != code && !"".equals(code)){
jsonObject = UserInfo.getOAuthOpenId("企业ID","应用秘钥",code);
//jsonObject.put("UserId","kaitou_kid");
if(!jsonObject.equals("")){
String sql = "select * from T_yh where USERID='"+jsonObject.get("UserId").toString()+"'";
dBSelect(sql);
}
jsonObject.put("existence","1"); // 存在
jsonObject.put("status","1"); // 成功
}else{
jsonObject.put("status","-1");
System.out.println("============== 失败!");
}
return jsonObject.toString(); }

...

import java.util.Map;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL; import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager; import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import weixin.qq.weixin.tool.MyX509TrustManager; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import net.sf.json.JSONObject; public class UserInfo {
//文档:https://work.weixin.qq.com/api/doc/90000/90135/91022 //获得凭证 corpid:企业ID,corpsecret:应用的凭证密钥
public static String voucher = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET"; //该接口用于根据code获取成员信息 //access_token:调用接口凭证(在上一个链接内获取的数据中),
// code:通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
public static String Member_information = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE"; //使用user_ticket获取成员详情
public static String userinfo_url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token=ACCESS_TOKEN"; /*access_token:调用接口凭证,
* code:通过成员授权获取到的code,每次成员授权带上的code将不一样*/ /**
* 网页授权,根据code取得openId
* @param appid 公众号的唯一标识
* @param secret 公众号的appsecret密钥
* @param code code为换取access_token的票据
* @return
*/
public static JSONObject getOAuthOpenId(String appid, String secret, String code ) { //根据code获取成员信息
JSONObject jsonObject=null; String voucherStr = voucher.replace("ID", appid).replace("SECRET", secret);
JSONObject voucherJsonObject = JSONObject.fromObject(httpRequest(voucherStr, "GET", null)); /*返回一下json格式数据
{ "UserId":"USERID", // 成员UserID
"DeviceId":"DEVICEID" // 手机设备号(由微信在安装时随机生成,删除重装会改变
"user_ticket": "USER_TICKET", //成员票据,最大为512字节
"expires_in":7200}*/ //user_token的有效时间(秒)
// 如果请求成功
if (null != voucherJsonObject) {
try {
String MemberInformationStr = Member_information.replace("ACCESS_TOKEN", voucherJsonObject.get("access_token").toString())
.replace("CODE", code);
JSONObject MemberInformationJsonObject = JSONObject.fromObject(httpRequest(MemberInformationStr, "GET", null));
/*{ "errcode": 0,
"errmsg": "ok",
"UserId":"USERID",
"DeviceId":"DEVICEID"}*/
if (null != MemberInformationJsonObject) {
jsonObject=MemberInformationJsonObject;
}
} catch (Exception e) {
jsonObject = null;
// 获取token失败
System.out.println("网页授权获取openId失败 errcode:{} errmsg:{}");
}
}
return jsonObject;
} /**
* 发起https请求并获取结果
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
*/
public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
//请求的url
URL url = null;
//请求的输入流
BufferedReader in = null;
//输入流的缓冲
StringBuffer sb = new StringBuffer();
try{
url = new URL(requestUrl);
in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8") );
String str = null;
//一行一行进行读入
while((str = in.readLine()) != null) { sb.append( str ); }
} catch (Exception ex) { } finally{
try{
if(in!=null) {
in.close(); //关闭流
}
}catch(IOException ex) { }
} System.out.println("==============httpRequest方法结束==============="); return sb.toString();
} public static void main(String[] args) {
// TODO Auto-generated method stub } }

java 获得 微信 UserId的更多相关文章

  1. Java企业微信开发_03_通讯录同步

    一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...

  2. Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

    注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...

  3. Java企业微信开发_05_消息推送之被动回复消息

    一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip      ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...

  4. Java企业微信开发_02_通讯录同步

    一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...

  5. java实现微信扫一扫详解

    java实现微信扫一扫详解 一.微信JS-SDK参数配置及查找 JS安全域名配置(查找:微信公众号里-公众号设置-功能设置页) 注:1.安全域名外网必须可以访问的到  2.域名不能有下划线  3.要将 ...

  6. 荒废了很久的java以及微信公众平台今天拿起来看了看:这里有很好的教程

    我的微信公众号刚刚起步: ,感兴趣可以关注一下. 关于java开发微信公众号有一个很好的教程博客:推荐一下:http://blog.csdn.net/lyq8479/article/details/8 ...

  7. Java实现微信菜单json字符串拼接

    Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...

  8. Java企业微信开发_07_素材管理之上传本地临时素材文件

    一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...

  9. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

随机推荐

  1. 做毕设的tricks

    CNKI上无法下载博硕士学位论文的PDF版本,只有CAJ版本,挺恶心的.直接下载安装Chrome extension就可以解决了. 链接:https://share.weiyun.com/5HGFF2 ...

  2. Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互

    Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...

  3. 关于Servlet

    Servlet与CGI CGI(Common Gateway Interface),早期的Web服务器技术.执行模式:将服务端的资源基于进程运行. Servlet:运行模式改为单进程多线程的形式,利用 ...

  4. mysql从零开始之MySQL LIKE 子句

    MySQL LIKE 子句 我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录. WHERE 子句中可以 ...

  5. MySQL8.0.20安装教程图文详解,MySQL8.0.20安装教程winodws10

    MySQL8.0.20安装教程图文详解,非常详细 一:mysql官网下载 https://dev.mysql.com/downloads/file/?id=494993 不用注册,直接下载就好 二:解 ...

  6. 理解ASP.NET Core - 选项(Options)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 Options绑定 上期我们已经聊过了配置(IConfiguration),今天我们来聊一聊O ...

  7. ArcToolbox工具箱

    3D Analyst 工具 Data Interoperability Tools Geostatistical Analyst 工具 Network Analyst 工具 Schematics 工具 ...

  8. Noip模拟50 2021.9.10

    已经好长时间没有考试不挂分的良好体验了... T1 第零题 开场数据结构,真爽 对于这道题首先要理解对于一条链从上向下和从下向上走复活次数相等 (这可能需要晚上躺在被窝里面脑摸几种情况的样例) 然后就 ...

  9. 2021.9.9考试总结[NOIP模拟50]

    T1 第零题 神秘结论:从一个点满体力到另一个点的复活次数与倒过来相同. 于是预处理出每个点向上走第$2^i$个死亡点的位置,具体实现可以倍增或二分. 每次询问先从两个点同时向上倍增,都转到离$LCA ...

  10. Pandas核心用法

    目录 Numpy和Pandas Numpy科学计算 Pandas数据分析 安装jupyter notebook Numpy语法 创建和基本使用 切片索引 布尔索引 对位运算 矩阵的乘除 其他方法 Pa ...