本教程调用wx-tools.jar
想要在微信公众号里获取用户的基本信息,必须是保证服务是在80端口
1.去公众号后台设置获取授权的域名
不能待http这些,也不能带端口,这意味着必须是80端口的
2.创建菜单,同时,将菜单的url指向静默授权的页面
3.这时候微信就会给用户信息分配一个code,并且携带这个code,转发到那个设置url里
我在那个简单yyy.html里只做了简单的打印获取访问连接.
这时候我们打开公众号,发现按钮变成了mytest2,点开一看,进入了这个页面
可以看到微信转发时候带了一个code.
4.我们拿到这个code之后就只需要用code和appid以及serictkey来换取用户的openid,进而换取其他的信息
下面是基本的controller代码
private static Logger log=Logger.getLogger(WxController.class);
@Resource
private MachineService machineService;
@Resource
private UserorderService userorderService;
@Resource
private AuthenEhcache authenEhcache;
@Resource
private UserService userService;
@Resource
private IService iService;
@RequestMapping("/indexPage")
public String index(HttpServletRequest request,String code) throws WxErrorException, MyException{
//1.判断user是否在session里.如果不存在,则重新拉取信息,并放到session域里
User existUser = (User) request.getSession().getAttribute("user");
if(existUser==null){
//2.获得用户授权的openid
WxOAuth2AccessTokenResult result = iService.oauth2ToGetAccessToken(code);
if(result!=null){
String openid = result.getOpenid();
if(!StringUtils.isBlank(openid)){
//3.去数据库里查询,是否有该项记录,如果没有,就报错,因为根本没有关注,不允许进入此页
User user=userService.getUserByOpenid(openid);
if(user==null){
throw new MyException(-1000, "用户未关注");
}
WxUser wxUser = iService.getUserInfoByOpenId(new WxUserGet(openid, "ch"));
//4.如果个人信息有改动,就去修改
if(!user.getCity().equals(wxUser.getCity())||
!user.getHeadpic().equals(wxUser.getHeadimgurl())||
!user.getNickname().equals(wxUser.getHeadimgurl())||
user.getSex()!=wxUser.getSex()){
user.setCity(wxUser.getCity());
user.setHeadpic(wxUser.getHeadimgurl());
user.setNickname(wxUser.getNickname());
user.setSex(wxUser.getSex());
userService.updateUser(user);
}
//5.把user放到session域里面
request.getSession().setAttribute("user", user);
}else{
throw new MyException(-1001, "openid为空");
}
}else{
throw new MyException(-1002, "code值无效");
}
}
return "index";
}
ok