最近在做一个微信公众号的项目,和微信交互,获取用户基本信息是基本需求。获取用户基本信息有很多途径,现在我们讨论的是“网页授权获取用户基本信息”这种方式。
文章需要参考微信开发者文档:点击打开链接
另,会把部分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 = "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";
ModelAndView modelAndView = new ModelAndView(url);return modelAndView;} catch (UnsupportedEncodingException e) {e.printStackTrace();return new ModelAndView("error");}}
2、根据code获取access_token的代码如下:
@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");
}
}
Toke类参照给出的连接定义即可;
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参照给出的链接指出的用户信息定义即可;