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)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...
随机推荐
- Android系统编程入门系列之应用级文件在应用程序间的共享
在上篇文章了解到应用级文件只能被其所创建的应用程序所访问,那么其他应用程序是不是就无论如何都无法访问了呢?肯定不是的,只要文件经过其创建的应用程序授权,还是可以被其他应用程序所访问的.这也就是应用级文 ...
- Linux环境yum,安装MySQL
Linux 使用yum命令安装mysql [安装步骤] 1.先检查系统是否安装有mysql [root@localhost ~]#yum list installed mysql* [root@loc ...
- javascriptRemke之原型的重要性
前言:JavaScript的原型对象一直是新人学习js的一大重大阻碍,但是原型的知识往往又是面试中常常会被深挖的一个点,为什么会这样呢?本文带你揭秘JavaScript原型的重要性,了解重要性之后再进 ...
- 一时兴起,用python抓了一下美女图片。实现简单。附上实现代码,可以交流。
"""1.定义目标网址 网址2.数据定位 照片3.数据匹配 标签4.数据下载 下载"""import requestsfrom lxml i ...
- 如何正确使用JMeter性能测试?紧扣面试实际要求
前段时间专门挑了一段时间在准备面试.经过两次面试后,有一些比较深刻的认识.对于企业要求来说,除了对专业理论知识考究之外,对测试工具这块也是看重的. 一.使用JMeter测试快速入门 1.线程组是什么 ...
- ShutdownHook原理
微信搜索"捉虫大师",点赞.关注是对我最大的鼓励 ShutdownHook介绍 在java程序中,很容易在进程结束时添加一个钩子,即ShutdownHook.通常在程序启动时加入以 ...
- 代码混淆保安全「GitHub 热点速览 v.21.43」
作者:HelloGitHub-小鱼干 虽然让代码难以阅读看似是件难以理解的事情,但是混淆后的代码起到了类似加密的作用,而且经过混淆的代码依旧能实现原代码的功能.javascript-obfuscato ...
- the Agiles Scrum Meeting 2
会议时间:2020.4.10 21:00 1.每个人的工作 今天已完成的工作 yjy:debug:班级创建了个人项目不能访问班级:教师窗口的前端bug. issues:Bug:教师创建博客时显示项目为 ...
- kafka生产者和消费者api的简单使用
kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...
- 【做题记录】CF1451E2 Bitwise Queries (Hard Version)
CF1451E2 Bitwise Queries (Hard Version) 题意: 有 \(n\) 个数( \(n\le 2^{16}\) ,且为 \(2\) 的整数次幂,且每一个数都属于区间 \ ...