java 获得 微信 UserId
....
- 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的更多相关文章
- Java企业微信开发_03_通讯录同步
一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步” ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...
- Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...
- Java企业微信开发_05_消息推送之被动回复消息
一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...
- Java企业微信开发_02_通讯录同步
一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步” ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...
- java实现微信扫一扫详解
java实现微信扫一扫详解 一.微信JS-SDK参数配置及查找 JS安全域名配置(查找:微信公众号里-公众号设置-功能设置页) 注:1.安全域名外网必须可以访问的到 2.域名不能有下划线 3.要将 ...
- 荒废了很久的java以及微信公众平台今天拿起来看了看:这里有很好的教程
我的微信公众号刚刚起步: ,感兴趣可以关注一下. 关于java开发微信公众号有一个很好的教程博客:推荐一下:http://blog.csdn.net/lyq8479/article/details/8 ...
- Java实现微信菜单json字符串拼接
Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...
- Java企业微信开发_07_素材管理之上传本地临时素材文件
一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...
- Java企业微信开发_05_消息推送之发送消息(主动)
一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...
随机推荐
- Redis事件机制
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件:Redis通过套接字与客户端连接,文件事件是服务器对套接字操作的抽象. 时间事件:Redis服务器中的一些操作需要给定的时间 ...
- C++ 可变数组实现
话不多说,直接上代码,看注释 template<class T> // 支持传入泛型,但string这种可变长度的类型还不支持 class Array { int mSize = 0, m ...
- 深入理解Java虚拟机之JVM内存布局篇
内存布局**** JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...
- python自定义翻页配置
1.创建pager.py文件,针对翻页进行函数书写 class PageInfo(object): # current_page 当前页数 # all_count 所有行 # per_page 每页的 ...
- React Native之新架构中的Turbo Module实现原理分析
有段时间没更新博客了,之前计划由浅到深.从应用到原理,更新一些RN的相关博客.之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新.主要是平时空余时间都用来帮着带娃了,不过还是 ...
- luogu3888 GDOI2014拯救莫里斯 (状压dp)
题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市\(( 1\le ...
- 渗透测试神器——Burp的使用
公众号:白帽子左一 版本说明:Burp Suite2.1 下载地址: 链接:https://pan.baidu.com/s/1JPV8rRjzxCL-4ubj2HVsug 提取码:zkaq 使用环境: ...
- Noip模拟62 2021.9.26
T1 Set 真就随机化拿了$90$?? 不过还是有依据的,毕竟这道题出解的几率很大,随出答案的概率也极大 所以不妨打一个随机化 1 #include<bits/stdc++.h> 2 # ...
- [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解
前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...
- 大牛针对零基础入门c语言详解指针(超详细)
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...