java二次开发微信公众号授权
2016-02-19 16:13
423 查看
这篇文章我想记录一下微信服务号二次开发怎么进行授权登录获取用户信息的。我用流程化的方式来阐述一下怎么实现微信授权取用户信息。
第一:
我们要取得微信授权,加入我们是从菜单栏点击某一个连接菜单进行实现的。所以此时我们菜单的连接就必须是:
当然如果你选择静默授权,那scope就变成snsapi_base。当你单击这个菜单的时候,就会进行授权第一次访问。这个访问会返回一个code,它会和state的值一起作为参数传给你的重定向地址redirect_uri,而这个重定向url是必须经过url encode转换的。
第二:
在你的重定向uri这边的接口你就必须取出code的值,然后回调微信的
接口,这个接口可以返回特殊的access_token,它是针对用户授权的access_token, 跟我们上传文件或者创建菜单的accessToken是有所区别的。如果正常调用会返回这样数据格式的数据:
第三:
你拿着accesstoken的值还有针对用户的唯一标识openid就可以获取用户信息,然后你在这个接口中在通过get请求获取用户信息,访问地址为
取到用户数据后就可以在这个接口中直接跳转到你的app,然后直接静默登录,或者显示用户信息。实现免登录。
其中还涉及到一个重新刷新accesstoken的操作,那是因为这个特殊的accesstoken是有时间显示,第一次的时间较短,再次刷新的时间可以更长。下面我把我接受授权的那个回调接口代码贴出来。当然你那个redirect_uri就要指向这个接口
@RequestMapping(value="/cardniu/mystore",method=RequestMethod.GET)
public String gotoMyShop(HttpServletRequest request,Model model){
log.info("=============进入授权回调接口=========");
WeixinUtil weixinUtil = new WeixinUtil();
String tempCode = request.getParameter("code");
log.info("==========返回回来的code: "+tempCode+"==========");
UserAccessToken userAccesssToken=weixinUtil.getUserAccessToken(tempCode);
OpenUser userInfo = weixinUtil.getOpenUserInfo(userAccesssToken);
JSONObject userInfoObject = JSONObject.fromObject(userInfo);
log.info("=========获取到的用户信息:"+userInfoObject.toString()+"=========");
model.addAttribute("userInfo", userInfo);
model.addAttribute("userToken", userAccesssToken);
model.addAttribute("code", tempCode);
return "myStore/myShop";
}
第一:
我们要取得微信授权,加入我们是从菜单栏点击某一个连接菜单进行实现的。所以此时我们菜单的连接就必须是:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
当然如果你选择静默授权,那scope就变成snsapi_base。当你单击这个菜单的时候,就会进行授权第一次访问。这个访问会返回一个code,它会和state的值一起作为参数传给你的重定向地址redirect_uri,而这个重定向url是必须经过url encode转换的。
第二:
在你的重定向uri这边的接口你就必须取出code的值,然后回调微信的
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
接口,这个接口可以返回特殊的access_token,它是针对用户授权的access_token, 跟我们上传文件或者创建菜单的accessToken是有所区别的。如果正常调用会返回这样数据格式的数据:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
第三:
你拿着accesstoken的值还有针对用户的唯一标识openid就可以获取用户信息,然后你在这个接口中在通过get请求获取用户信息,访问地址为
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
取到用户数据后就可以在这个接口中直接跳转到你的app,然后直接静默登录,或者显示用户信息。实现免登录。
其中还涉及到一个重新刷新accesstoken的操作,那是因为这个特殊的accesstoken是有时间显示,第一次的时间较短,再次刷新的时间可以更长。下面我把我接受授权的那个回调接口代码贴出来。当然你那个redirect_uri就要指向这个接口
@RequestMapping(value="/cardniu/mystore",method=RequestMethod.GET)
public String gotoMyShop(HttpServletRequest request,Model model){
log.info("=============进入授权回调接口=========");
WeixinUtil weixinUtil = new WeixinUtil();
String tempCode = request.getParameter("code");
log.info("==========返回回来的code: "+tempCode+"==========");
UserAccessToken userAccesssToken=weixinUtil.getUserAccessToken(tempCode);
OpenUser userInfo = weixinUtil.getOpenUserInfo(userAccesssToken);
JSONObject userInfoObject = JSONObject.fromObject(userInfo);
log.info("=========获取到的用户信息:"+userInfoObject.toString()+"=========");
model.addAttribute("userInfo", userInfo);
model.addAttribute("userToken", userAccesssToken);
model.addAttribute("code", tempCode);
return "myStore/myShop";
}
相关文章推荐
- 如何做到日消息量100万的微信公众号?
- C#开发微信公众号接口开发
- .NET微信公众号开发之公众号消息处理
- 微信公众号支付(一)如何获取用户openId
- Oracle新建用户、角色,授权,建表空间的sql语句
- MySql增加用户、授权、修改密码等语句
- 远程连接mysql 授权方法详解
- 在WIN命令提示符下mysql 用户新建、授权、删除,密码修改
- 图文介绍报表与企业微信公众号集成方案
- .NET微信公众号开发之准备工作
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- sqlSQL数据库怎么批量为存储过程/函数授权呢?
- .NET微信公众号开发之创建自定义菜单
- weiphp微信公众平台授权设置
- 微信开发之网页授权获取用户信息(二)
- PHP实现微信网页授权开发教程
- 使用Nodejs开发微信公众号后台服务实例
- php实现微信公众号主动推送消息
- .NET微信公众号开发之查询自定义菜单
- asp.net5中用户认证与授权(2)