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)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...
随机推荐
- 前端规范之Git工作流规范(Husky + Comminilint + Lint-staged)
代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...
- openlayer 4326与3857坐标互转之Java版
public class Transform { private static final double PI = Math.PI; private static final double merca ...
- Superior Scheduler:带你了解FusionInsight MRS的超级调度器
摘要:Superior Scheduler是一个专门为Hadoop YARN分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器. 本文分享自华为云社 ...
- Java秘诀!零基础怎样快速学习Java?
对于零基础想学Java的朋友,其实一开始最应该做的就是定好学习目标和端正学习态度,切记不要三天打鱼两天晒网! 首先你是零基础,现在急需把Java学好,在保证学习质量的同时,用最短的时间学好Java应该 ...
- 如何利用Prometheus监控你的应用(此列子是对于golang sdk进行运用)
Prometheus作为一套完整的开源监控接近方案,因为其诸多强大的特性以及生态的开放性,俨然已经成为了监控领域的事实标准并在全球范围内得到了广泛的部署应用.那么应该如何利用Prometheus对我们 ...
- spark性能优化(一)
本文内容说明 初始化配置给rdd和dataframe带来的影响 repartition的相关说明 cache&persist的相关说明 性能优化的说明建议以及实例 配置说明 spark:2.4 ...
- 用C++生成solidity语言描述的buchi自动机的初级经验
我的项目rvtool(https://github.com/Zeraka/rvtool)中增加了生成solidity语言格式的监控器的模块. solidity特殊之处在于,它是运行在以太坊虚拟机环境中 ...
- Java中的函数式编程(三)lambda表达式
写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架. lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...
- 【UE4】 补丁Patch 与 DLC
概述 UE4 中主要使用 Project Launcher 来进行补丁和DLC的制作 补丁与 DLC 都需要基于某个版本而制作 补丁 与 DLC 最后以 Pak 形式表现, 补丁的 pak 可以重命名 ...
- SpringBoot 整合 Thymeleaf & 如何使用后台模板快速搭建项目
如果你和我一样,是一名 Java 道路上的编程男孩,其实我不太建议你花时间学 Thymeleaf,当然他的思想还是值得借鉴的.但是他的本质在我看来就是 Jsp 技术的翻版(Jsp 现在用的真的很少很少 ...