....

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. The art of multipropcessor programming 读书笔记-硬件基础1

    本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...

  2. LuoguP1557 Kruscal的加法 题解

    题目Link 就是这道题,做了我整整一天! 看到题目,首先想到的就是:就这?就这一道大水题也能是绿?然后十分钟写完代码,提交-- 果不其然,绿题不是白绿的,看了一眼数据和讨论,又得写高精了-- 先附上 ...

  3. Python爬取 | 唯美女生图片

    这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...

  4. 破解安装pyhotn

    1.网址 https://www.jetbrains.com/pycharm/download/#section=windows,打开页面,点击下载专业版 2.这是下载好的文件,双击运行即可. //详 ...

  5. SimpleDateFormat、Date和String互转

    今天在修改bug时遇到一个查询异常:根据时间段查询的时候,如果查询时间段含12点钟,那么能查到时间段之外的其他数据: 跟踪了数据流动发现,前同事写的程序中,有一处是讲前端传来时间字符串转为Date的一 ...

  6. modal框

    modal框 创建modal款的基本"框架": 1 <body> 2 <!--1.触发模态框的按钮--> 3 <button class=" ...

  7. 多项式(polynomial)

    多项式(polynomial) 题目大意: 给出一个 n 次多项式 \(f(x)=\sum_{i=0}^na_ix^i\) 对于\(k ≤ x ≤ k + l − 1\) 的\(l\) 个\(x\), ...

  8. C++ 与 Visual Studio 2019 和 WSL(二)

    终端 A more integrated terminal experience | Visual Studio Blog (microsoft.com) Say hello to the new V ...

  9. python编写学习助手0

    项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...

  10. java的加载与执行原理剖析

    到目前为止,我们接触过的重点术语,总结一下: Java体系的技术被划分为三大块: JavaSE:标准版 JavaEE:企业版 JavaME:微型版 安装JDK之后: JDK:java开发工具箱 JRE ...