最近在做一个微信公众号的项目,和微信交互,获取用户基本信息是基本需求。获取用户基本信息有很多途径,现在我们讨论的是“网页授权获取用户基本信息”这种方式。
文章需要参考微信开发者文档:点击打开链接
另,会把部分java实现代码贴出来供参考。
微信公众平台通过OAUTH认证获取用户信息,这个过程大体分为以下几个步骤:
1、根据appid以及回调url获取code(时效==5min);
2、根据code获取access_token(时效in(1天、7天、30天、90天));
3、根据access_token获取用户基本信息;
具体例子如下:
1、根据appid和回调url获取code。
假如微信公众平台配置的业务回调url为:"https://myreturn.com.cn"、appid为:"fdsaadeicekandead";
再结合文章前边连接给出的文档,那么我们需要请求的url为:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=fdsaadeicekandead&redirect_uri=https%3A%2F%2FmySite/myreturn&response_type=code&scope=snsapi_base&state=123#wechat_redirect
发起请求的代码
@RequestMapping("/loginWx/") public ModelAndView initWxLogin() { try { String url = "
ModelAndView modelAndView = new ModelAndView(url);return modelAndView;} catch (UnsupportedEncodingException e) {e.printStackTrace();return new ModelAndView("error");}}https://open.weixin.qq.com/connect/oauth2/authorize?appid=fdsaadeicekandead&redirect_uri=https%3A%2F%2FmySite/myreturn&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
2、根据code获取access_token的代码如下:Toke类参照给出的连接定义即可;@RequestMapping(value="/myreturn") public ModelAndView myreturn(String code, String state){ if (null != code) { try { HttpUriRequest httpUriRequest = RequestBuilder.post() .setUri("https://api.weixin.qq.com/sns/oauth2/access_token") .addParameter("appid", appid) .addParameter("secret", secret).addParameter("code", code).addParameter("grant_type", "authorization_code").build(); Token token = httpClient.execute(httpUriRequest , responseHandler,HttpClientContext.create()); } catch (Exception e) { e.printStackTrace(); } return new ModelAndView("跳转的url"); } }
3、根据access_token获取用户的基本信息:
HttpUriRequest httpUriRequest = RequestBuilder.post() .setUri(BASE_URI+"/sns/userinfo") /* .setUri(BASE_URI+"/cgi-bin/user/info") */ .addParameter(getATPN(),access_token) .addParameter("openid",openid) .addParameter("lang","zh_CN") .build(); User user = httpClient.execute(httpUriRequest , responseHandler,HttpClientContext.create());
User参照给出的链接指出的用户信息定义即可;