开源中国http://my.oschina.net/xshuai/blog/293458也是本作者

https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的。

更新时间  2016年1月6日

更新时间  2016年1月6日

更新时间  2016年1月6日

重要的事情说三遍

http://mp.weixin.qq.com/wiki这个是官网的接口文档

微信授权获取用户openid-JAVA

开发微信测试需要用到的代码和jar包都在里面  包括核心代码  上面图片可以扫一扫 支持一下。

链接: http://mobile.qzone.qq.com/l?g=1357&sharekey=e43cb6432868c4b709c5351c3c82d3de

/**
     * 网页授权获取openId第2步,根据code取得openId
     *
     * @param appid   公众号的唯一标识
     * @param secret    公众号的appsecret密钥
     * @param code    code为换取access_token的票据          
     * @return
     */

代码为OAuthInfo 不在此博客中 OAuthInfo只获取到Openid 。获取详细信息。继续调用微信接口

拉取用户信息(需scope为 snsapi_userinfo)

本作者是用菜单的方式引导用户进入点击获取信息的。

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

                             

第一步:用户同意授权,获取code 引导用户进入授权的URL 修改一些参数

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

我的代码如下:一个Servlet请求 获取code

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //参数
        String code = request.getParameter("code");
         
        if(null != code && !"".equals(code)){
            log.info("==============[OAuthServlet]获取网页授权code不为空,code="+code);
            //根据code换取openId
            OAuthInfo oa = WeixinUtil.getOAuthOpenId(Constants.appId,Constants.appSecret,code);
            UserInfo info = WeixinUtil.getUserInfo(oa.getAccessToken(), oa.getOpenId());
            if(!"".equals(oa) && null != oa){
                 request.setAttribute("openid", oa.getOpenId());
                 request.setAttribute("nickname", info.getNickname());
                 request.getRequestDispatcher("/index.jsp").forward(request, response);
                  
            }else{
                log.info("==============[OAuthServlet]获取网页授权openId失败!");
            }
        }else{
            log.info("==============[OAuthServlet]获取网页授权code失败!");
        }
    }

替换相应的APPID APPSECRET SCOPE

第二步:通过code换取网页授权access_token  这里的access_token与基础获取的access_token不同

获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

具体做法与上面基本一致。更换相对应的值。需要注意的是code可以写一个Servlet获取。String code = request.getParameter("code");get/post都可以。

这样子就会返回一下json格式数据

{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE"
}

我们需要对这个json格式数据进行转换。大写自己都是用自己账号获取的数据。所有做了替换。

具体代码如下。获取的code换取的access_token

?
1
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public static OAuthInfo getOAuthOpenId(String appid, String secret, String code ) {
        OAuthInfo oAuthInfo = null;
        String requestUrl = o_auth_openid_url.replace("APPID", appid).replace("SECRET", secret).replace("CODE", code);
        
        JSONObject jsonObject = httpRequest(requestUrl, "GET"null);
         
         
        // 如果请求成功
        if (null != jsonObject) {
            try {
                oAuthInfo = new OAuthInfo();
                oAuthInfo.setAccessToken(jsonObject.getString("access_token"));
                oAuthInfo.setExpiresIn(jsonObject.getInt("expires_in"));
                oAuthInfo.setRefreshToken(jsonObject.getString("refresh_token"));
                oAuthInfo.setOpenId(jsonObject.getString("openid"));
                oAuthInfo.setScope(jsonObject.getString("scope"));
            catch (JSONException e) {
                oAuthInfo = null;
                // 获取token失败
                log.error("网页授权获取openId失败 errcode:{} errmsg:{}", jsonObject
                        .getInt("errcode"), jsonObject.getString("errmsg"));
            }
        }
        return oAuthInfo;
    }

根据上面代码获取的access_token  openid 然后再请求获取userinfo的接口。就能得到微信用户的所有信息了。

具体返回如下。获取用户信息代码不再写。

?
1
2
3
4
5
6
7
8
9
{"sex":1,
"nickname":"小帅",
"privilege":[],
"province":"北京",
"openid":"o2VKNju8JqCeGVoEWJ1S8Ue_up8E",
"language":"zh_CN",
"headimgurl":"http://wx.qlogo.cn/mmopen/ribqo6CmxxhyfrokJWjVAedZzl590B4HAbribNVS3CQvplHp8KgmH1kIfqpM4Ek5uTr0lFW8yMDjfZrWLtvjjKLXu1H5icSfRBl/0",
"country":"中国",
"city":"海淀"}

这就获取到用户的openid。应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)我自己用的作用域为snsapi_userinfo。用户点击跳转页面为

写一个Servlet专门接收传递过来的code。进行相应的操作。

1.OAuthServlet 对code进行access——token的验证

2.GetWeiXinCode的方法调用接口地址。得到相应code。

3.OAuthInfo 返回数据相应的参数的PO类。set/get方法

4.WeiXinUtil添加一个方法 publicOAuth  getOAuthInfo(String appid, String secret, String code)得到json格式。并使用JSONObject读取出自己想要的数据。

https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的。

个人微博 http://weibo.com/u/2205636212 

个人博客 http://my.oschina.net/xshuai/blog 

公开QQ  783021975 请先留言说明您!否则不加!

个人联盟 http://www.bengbeng.com/?sid=687095   

微信OAuth授权获取用户OpenId-JAVA相关推荐

  1. 微信OAuth授权获取用户OpenId

    https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的. 博客最新更改在这里https://my.oschina.net/xshuai/blog/2934 ...

  2. 微信OAuth授权获取用户OpenId-JAVA(个人经验)

    个人微信小程序 可扫码体验 本文更新有可能先在开源中国.地址为:https://my.oschina.net/xshuai/blog/293458 https://open.weixin.qq.com ...

  3. 微信h5授权获取用户openId的方法和步骤,用于用户登录和注册

    微信公众号的配置和专业名词就不介绍了,不懂的问度娘,我就直接上代码  点击下载完整demo 先说一下我的demo放的位置: 微信H5授权登录分两种: ① 静默授权:snsapi_base,没有弹窗,只 ...

  4. 微信网页授权获取用户openid及用户信息

    $code = $_GET["code"];//获取code $appid="xxxx";//公众号appid $APPSECRET="xxx&quo ...

  5. 微信公众号授权获取用户OpenID和UnionId然后发生消息通知

    微信公众号授权获取用户OpenID和UnionId然后发生消息通知 1.获取微信公众号code 1.微信公众拿取公众号appid和appSecret 2.网页域名授权,这里的域名拼接上html所在位置 ...

  6. 微信h5静默、非静默授权获取用户openId的方法和步骤

    微信h5静默.非静默授权获取用户openId的方法和步骤: 一.openId是什么? openId是用户在当前公众号下的唯一标识('身份证'),就是说通过这个openId,就能区分在这个公众号下具体是 ...

  7. Spring Boot 微信-网页授权获取用户信息

    微信-验证服务器有效性 微信-网页授权获取用户信息 网页授权获取用户信息步骤 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需sc ...

  8. 微信网页授权获取用户基本信息 --- 20/03/16

    ThinkPHP5实现微信网页授权获取用户基本信息 本次使用的appID与appSecret为公众号 一:准备工作 登录微信公众平台,左侧菜单下拉至开发选中基本配置 启用开发者密码(AppSecret ...

  9. PHP开发之-微信网页授权获取用户基本信息

    如何通过网页授权获取用户基本信息(国家,省,市,昵称)相关信息 必要条件: 1)公众号认证 2)有网页授权获取用户基本信息的权限接口 注意:最近有朋友说:在公众平台申请的测试号,会出现无法取到用户信息 ...

最新文章

  1. 理解Android编译命令(转)
  2. oracle创建自增
  3. 等式成立JAVA_java – 找到两个线性等式成立的整数集
  4. 居中弹出一个层,打开一个文件。
  5. spring中bean的细节之三种创建Bean对象的方式
  6. python indexerror怎么办_Python IndexError:使用列表作为可迭代对象时...
  7. ORA-01033: ORACLE initialization or shutdown in progress
  8. arm9260 linux编译,关于linux9260烧写软件和gdb调试器的使用
  9. 都是自私惹的祸? 论蹭网再触道德底线
  10. [转载] python+opencv图像处理:numpy数组操作
  11. Codeforces Round #422 (Div. 2) D. My pretty girl Noora [数论][dp]
  12. 粮食增产的重要性顺序,土水肥种
  13. Unity - 射线检测
  14. 我想健康富有聪明怎么导告_富有成效的远程工作(当您的心理健康说“否”时)
  15. K-中心点聚类算法(K-Medoide)
  16. 达梦数据库如何把EXCEL的数据导入到表中?
  17. 获取手机通讯录联系人(包含模糊查询,dialog自定义,也有一个自定义通知栏)
  18. fs.readFileSync 引入路径错误
  19. pads2007版本pcb导出的dxf在cad中打不开,提示“DXF 输入无效或不完整 -- 图形被放弃”
  20. python和接码平台对接_GitHub - zhupite233/yima: 易码平台API的Python接口

热门文章

  1. java用友eai_用友EAI接口开发的问题
  2. 傅里叶变换,拉氏变换,Z变换学习笔记
  3. python 爬虫 小姐姐
  4. java百度身份证识别
  5. Python flood
  6. Sobel算子的数学基础
  7. 【js调用后端接口】
  8. jQuery日期插件
  9. 基于VHDL的具有自动乐曲演奏功能的电子琴设计
  10. SPI的NSS硬件模式