公司需要开发一个微信公众号,要求用户通过公众号登录公司网站时候自动获取用户的基本信息,在网上查资料发现大部分都是直接copy微信公众平台的开发文档,感觉还是介绍的不是太小白,所以为了方便大家也为了自己备用,这里就把如何通过用户授权获取用户基本信息的步骤记录下来。

  第一步:进入网站直接跳转到获取用户授权界面

  

/**
* 用户同意授权,获取code
* 这是弹出授权页面,
* 可通过openid拿到昵称、性别、所在地,
* 即使在未关注的情况下,只要用户授权,也能获取其信息
* @return 链接地址
*/
public static String getUserInfoCodeUrl(){
return GET_CODE_URL.replace("APPID", APPID)
          .replace("REDIRECT_URI",url1+"/weixin/getUserInfo")
.replace("SCOPE", SNSAPI_USERINFO)
.replace("STATE", "wfcm");
}

  APPID是你自己公众号的APPID,REDIRECT_URI是用户授权后你要跳转的网址(可以是网页也可以是接口),SCOPE有两种一种是普通授权一种是用户授权,这里选择用户授权即SNSAPI_USERINFO,STATE是用户自定义这里可以随便填写。

  第二步:用户授权同意后跳转到你自己定义的网页或者接口中(这里我跳转的是接口),这一步已经由第一步获得了用户授权后返回的code,再通过用户返回的code获取用户的openid与网页授权的Access_token

  

/**
* 获取openID与网页版的access_token得到用户信息
* @param req
* @param resp
* @return
* @throws IOException
*/
@RequestMapping(value="getUserInfo" ,method=RequestMethod.GET)
public String getUserInfoCodeUrl(
HttpServletRequest req,
HttpServletResponse resp) throws IOException{
//1、用户授权得到code
String code = req.getParameter("code");
String state = req.getParameter("state");
System.out.println("code:"+code);
log.info("获得到code值------得到用户openId与access_token"+code);
//2、通过code得到用户openId与access_token
JSONObject jsonObject1 = WeixinUtil.doGetStr(WeixinUtil.getOpenIdAndAccessTokenUrl(code));
String openId = jsonObject1.getString("openid");
String accessToken = jsonObject1.getString("access_token");
//3、通过用户openId与access_token得到用户信息
System.out.println("accessToken:"+accessToken);
System.out.println("openId:"+openId);//测试access_token是否过期
JSONObject jsonObject3 = WeixinUtil.doGetStr(WeixinUtil.checkAccessTokenUrl(accessToken, openId));
while(jsonObject3.getString("errcode").equals("40003")||Integer.valueOf(jsonObject3.getString("errcode"))==40003){
//再次通过code得到用户openId与access_token
JSONObject jsonObject4 = WeixinUtil.doGetStr(WeixinUtil.getOpenIdAndAccessTokenUrl(code));
openId = jsonObject4.getString("openid");
accessToken = jsonObject4.getString("access_token");
jsonObject3 = WeixinUtil.doGetStr(WeixinUtil.checkAccessTokenUrl(accessToken, openId));
if(!jsonObject3.getString("errcode").equals("40003")||Integer.valueOf(jsonObject3.getString("errcode"))!=40003){
break;
}
}
//获得用户信息
JSONObject jsonObject2 = WeixinUtil.doGetStr(WeixinUtil.getUserInformationUrl(accessToken, openId));
System.out.println("JSON2-----"+jsonObject2.toString());
//至此就获得了用户的基本信息了,下面就是执行获得用户信息后做的操作 }

微信公众号通过用户授权获取用户基本信息java版的更多相关文章

  1. 微信 公众号 小程序 授权 unionid 用户信息 实验总结

    -*-*-*-*-*-*-*-*-*--*-*-*-1.小程序通过code获取用户openid的接口,如果用户曾经授权并未过期,或者用户关注过同主体的公众号,会带回unionID,但没有用户头像等信息 ...

  2. ASP.NET微信公众号用于给指定OpenId用户发送红包

    ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...

  3. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息二

    前言 这一篇实现snsapi_userinfo,写这篇时其实我是有疑惑的,因为我并没有调试成功,但是我反复检查程序和思路是没有问题的,因为我使用的测试公众号,群里一个伙计说他之前调试时用的也是测试公众 ...

  4. 微信公众号订阅号以及服务号通过网页授权获取用户openid方法

    微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方流程 网页授权流程分为四步: 1.引导用户 ...

  5. C#微信公众号开发 -- (三)用户关注之后自动回复

    通过了上一篇文章之后的微信开发者验证之后,我们就可以做微信公众号的代码开发了. 当我们点击关注某个公众号的时候,有时候会发现他会自动给我们回复一条消息,比如欢迎关注XXX公众号.这个功能其实是在点击关 ...

  6. C#微信公众号开发——access_token的获取

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_toke ...

  7. 服务器通过微信公众号Token验证测试的代码(Python版)

    我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意 ...

  8. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一

    前言 微信网页授权共分为两种方式:snsapi_base.snsapi_userinfo. snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面. snsapi_userinfo是在 ...

  9. 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)

    https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...

随机推荐

  1. 修改quartus 配置rom时memory很小的问题。

    我用的是quartus ii 13版本的仿真软件,在做VGA实验时显示用到640*480的图片所以就需要307200*1bit的rom.但是坑爹的megawizard- plug-in-manager ...

  2. 【线性代数】7-3:对角化和伪逆(Diagonalization and the Pseudoinverse)

    title: [线性代数]7-3:对角化和伪逆(Diagonalization and the Pseudoinverse) categories: Mathematic Linear Algebra ...

  3. MGR---mysql组复制多主模式

    组复制有两种模式:单主模式和多主模式. 1.在单主模式下,组复制具有自动选主功能,每次只有一个 server成员接受更新.2.在多主模式下,所有的 server 成员都可以同时接受更新. MGR的限制 ...

  4. 2016百度之星资格赛 Problem A(前缀积与求逆元)

    题意:给出一个字符串,每次询问给出x和y要求算出从x到y的每个字符的(ASCII 码值-28)的值的积(mod9973). 分析:首先的想法肯定是算出每个位置的前缀积,然后只要F[y]/F[x-1]即 ...

  5. RES协议和断网访问URL出现的错误页面

    # 11 Id: 26a4.1470 Suspend: 1 Teb: 7ff9f000 Unfrozen # Memory ChildEBP RetAddr Args to Child 00 01ca ...

  6. 从UDP的”连接性”说起–告知你不为人知的UDP

    原文地址:http://bbs.utest.qq.com/?p=631 很早就计划写篇关于UDP的文章,尽管UDP协议远没TCP协议那么庞大.复杂,但是,要想将UDP描述清楚,用好UDP却要比TCP难 ...

  7. Ajax提交之后,Method从POST变成GET

    https://developer.aliyun.com/ask/68268?spm=a2c6h.13159736 https://blog.csdn.net/uzizi/article/detail ...

  8. Caffe windows下安装攻略

    Caffe 是一个高效的深度学习框架,鉴于不想折腾装个双系统,最近鼓捣了下用caffe源码在windows进行编译.非常感谢Yangqing Jia博士的caffe开源代码.Neil Z.Shao's ...

  9. TransitionDrawable

    ayerDrawable的一个子类,TransitionDrawable只管理两层的Drawable!两层!两层! 并且提供了透明度变化的动画,可以控制一层Drawable过度到另一层Drawable ...

  10. kotlin之高阶函数

    高阶函数是一种特殊的函数,它接受函数作为参数,或者返回一个函数 import java.awt.geom.Area fun main(arg: Array<String>) { val m ...