....

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

...

  1. import java.util.Map;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStream;
  7. import java.net.ConnectException;
  8. import java.net.URL;
  9.  
  10. import javax.net.ssl.HttpsURLConnection;
  11. import javax.net.ssl.SSLContext;
  12. import javax.net.ssl.SSLSocketFactory;
  13. import javax.net.ssl.TrustManager;
  14.  
  15. import net.sf.json.JSONException;
  16. import net.sf.json.JSONObject;
  17. import weixin.qq.weixin.tool.MyX509TrustManager;
  18.  
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21.  
  22. import net.sf.json.JSONObject;
  23.  
  24. public class UserInfo {
  25. //文档:https://work.weixin.qq.com/api/doc/90000/90135/91022
  26.  
  27. //获得凭证 corpid:企业ID,corpsecret:应用的凭证密钥
  28. public static String voucher = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET";
  29.  
  30. //该接口用于根据code获取成员信息 //access_token:调用接口凭证(在上一个链接内获取的数据中),
  31. // code:通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
  32. public static String Member_information = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE";
  33.  
  34. //使用user_ticket获取成员详情
  35. public static String userinfo_url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token=ACCESS_TOKEN";
  36.  
  37. /*access_token:调用接口凭证,
  38. * code:通过成员授权获取到的code,每次成员授权带上的code将不一样*/
  39.  
  40. /**
  41. * 网页授权,根据code取得openId
  42. * @param appid 公众号的唯一标识
  43. * @param secret 公众号的appsecret密钥
  44. * @param code code为换取access_token的票据
  45. * @return
  46. */
  47. public static JSONObject getOAuthOpenId(String appid, String secret, String code ) { //根据code获取成员信息
  48. JSONObject jsonObject=null;
  49.  
  50. String voucherStr = voucher.replace("ID", appid).replace("SECRET", secret);
  51. JSONObject voucherJsonObject = JSONObject.fromObject(httpRequest(voucherStr, "GET", null));
  52.  
  53. /*返回一下json格式数据
  54. { "UserId":"USERID", // 成员UserID
  55. "DeviceId":"DEVICEID" // 手机设备号(由微信在安装时随机生成,删除重装会改变
  56. "user_ticket": "USER_TICKET", //成员票据,最大为512字节
  57. "expires_in":7200}*/ //user_token的有效时间(秒)
  58. // 如果请求成功
  59. if (null != voucherJsonObject) {
  60. try {
  61. String MemberInformationStr = Member_information.replace("ACCESS_TOKEN", voucherJsonObject.get("access_token").toString())
  62. .replace("CODE", code);
  63. JSONObject MemberInformationJsonObject = JSONObject.fromObject(httpRequest(MemberInformationStr, "GET", null));
  64. /*{ "errcode": 0,
  65. "errmsg": "ok",
  66. "UserId":"USERID",
  67. "DeviceId":"DEVICEID"}*/
  68. if (null != MemberInformationJsonObject) {
  69. jsonObject=MemberInformationJsonObject;
  70. }
  71. } catch (Exception e) {
  72. jsonObject = null;
  73. // 获取token失败
  74. System.out.println("网页授权获取openId失败 errcode:{} errmsg:{}");
  75. }
  76. }
  77. return jsonObject;
  78. }
  79.  
  80. /**
  81. * 发起https请求并获取结果
  82. *
  83. * @param requestUrl 请求地址
  84. * @param requestMethod 请求方式(GET、POST)
  85. * @param outputStr 提交的数据
  86. */
  87. public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {
  88. JSONObject jsonObject = null;
  89. //请求的url
  90. URL url = null;
  91. //请求的输入流
  92. BufferedReader in = null;
  93. //输入流的缓冲
  94. StringBuffer sb = new StringBuffer();
  95. try{
  96. url = new URL(requestUrl);
  97. in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8") );
  98. String str = null;
  99. //一行一行进行读入
  100. while((str = in.readLine()) != null) { sb.append( str ); }
  101. } catch (Exception ex) {
  102.  
  103. } finally{
  104. try{
  105. if(in!=null) {
  106. in.close(); //关闭流
  107. }
  108. }catch(IOException ex) {
  109.  
  110. }
  111. }
  112.  
  113. System.out.println("==============httpRequest方法结束===============");
  114.  
  115. return sb.toString();
  116. }
  117.  
  118. public static void main(String[] args) {
  119. // TODO Auto-generated method stub
  120.  
  121. }
  122.  
  123. }

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. Redis事件机制

    Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件:Redis通过套接字与客户端连接,文件事件是服务器对套接字操作的抽象. 时间事件:Redis服务器中的一些操作需要给定的时间 ...

  2. C++ 可变数组实现

    话不多说,直接上代码,看注释 template<class T> // 支持传入泛型,但string这种可变长度的类型还不支持 class Array { int mSize = 0, m ...

  3. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  4. python自定义翻页配置

    1.创建pager.py文件,针对翻页进行函数书写 class PageInfo(object): # current_page 当前页数 # all_count 所有行 # per_page 每页的 ...

  5. React Native之新架构中的Turbo Module实现原理分析

    有段时间没更新博客了,之前计划由浅到深.从应用到原理,更新一些RN的相关博客.之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新.主要是平时空余时间都用来帮着带娃了,不过还是 ...

  6. luogu3888 GDOI2014拯救莫里斯 (状压dp)

    题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市\(( 1\le ...

  7. 渗透测试神器——Burp的使用

    公众号:白帽子左一 版本说明:Burp Suite2.1 下载地址: 链接:https://pan.baidu.com/s/1JPV8rRjzxCL-4ubj2HVsug 提取码:zkaq 使用环境: ...

  8. Noip模拟62 2021.9.26

    T1 Set 真就随机化拿了$90$?? 不过还是有依据的,毕竟这道题出解的几率很大,随出答案的概率也极大 所以不妨打一个随机化 1 #include<bits/stdc++.h> 2 # ...

  9. [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解

    前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...

  10. 大牛针对零基础入门c语言详解指针(超详细)

    C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...