java的网站通过微信登录
来源:互联网 发布:如何黑进路由器 知乎 编辑:程序博客网 时间:2024/05/15 00:57
网站通过微信登录需要用到微信开发平台。
这是微信的文档说明
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&
token=7002e0c37ed916d2f51caee85c6a4c8c01f557aa&lang=zh_CN
基本的流程是这样的
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
我以自己的理解再说一遍
首先,我们需要发送一个URL,来获取code:
第一步:请求CODE
第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。
发送这个url后会返回一个code,比如我们发送https://open.weixin.qq.com/connect/qrconnect?appid=wx5695ad2ae014ffb3&redirect_uri=http://www.ssyer.com/oauth&response_type=code&scope=snsapi_login&
state=STATE#wechat_redirect,然后我们在java代码中用String code = request.getParameter("code");来获取code。
这里的重定向http://www.ssyer.com/oauth要关注,因为重定向去访问这个接口的时候,请求中包含了code的信息。
第二步:通过code获取access_token
通过code获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
Map<String, String> map = new TreeMap<String, String>();
map.put("appid","wx5695ad2ae014ffb3");
map.put("secret","01331709f6c1297d4ccea01a4cfa2c98");
map.put("code",code);
map.put("grant_type","authorization_code");
LOGGER.error("oauth.code="+code);
HttpResult httprequest=HttpClientUtil.post("https://api.weixin.qq.com/sns/oauth2/access_token", map,null);
这里用了HttpClient的类来发送url,关于这个的说明参看我的一篇用java发送url的文章
发送了这个请求后会有返回的内容,我们来看下返回的内容:
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
错误返回样例:
{"errcode":40029,"errmsg":"invalid code"}
我们需要用到access_token和openid这两个参数
Map<String, String> accMap = new TreeMap<String, String>();
accMap.put("access_token",jsonObject.getString("access_token"));
accMap.put("openid",jsonObject.getString("openid"));
HttpResult accReq=HttpClientUtil.get("https://api.weixin.qq.com/sns/userinfo?"+accMap.toString().substring(1,accMap.toString().length()-1).replaceAll(", ","&"));
明明是get清求还把参数放到Map中个人觉得搞复杂了
String config2=new String(accReq.getStream(),"UTF-8");
JSONObject jsonObject2= JSONArray.parseObject(config2);
Object errorCode2= jsonObject2.get("errcode");
if(errorCode2 == null) {
BieyangUser bieyangUser=new BieyangUser();
bieyangUser.setWcOpenId(jsonObject2.getString("openid"));
BieyangUserInfo bieyangUserInfo=new BieyangUserInfo();
bieyangUserInfo.setCity(jsonObject2.getString("city"));
bieyangUserInfo.setFace(jsonObject2.getString("headimgurl"));
bieyangUserInfo.setNickname(jsonObject2.getString("nickname"));
以上代码为获取用户信息
这样就把信息放到了bieyangUserInfo的对象当中和bieyangUser中,然后就是根据你的据需要添加你的代码了比如我这里是这样的代码
UserAuthUtil.signIn(bieyangUserService.create(bieyangUser, bieyangUserInfo).getData(), request, response);
UserAuthUtil.wechat(request, response);/*加cookies*/
}
}
return "redirect:" + webServerUrl;
意思是微信用户登录加cookies然重定向到网站首页
- java的网站通过微信登录
- 第三方网站微信登录java代码实现
- 第三方网站微信登录java代码实现
- 网站接入微信登录模块的一点小心得
- 网站使用微信登录接口,所踩的坑...
- 微信扫描二维码快速登录网站
- 网站微信登录-python 实现
- 微信第三方网站登录
- 网站应用并接入微信登录
- 代码笔记 | 网站微信登录
- php 网站微信登录class
- 网站获取微信授权登录功能
- 第三方网站微信登录实现
- PHP 网站应用微信登录
- 网站添加微信登录功能
- 微信登录网站session不一致问题
- 微信登录开发-java
- Springboot网站第三方登录——微信登录
- linux下删除oracle数据库实例
- ios接入微信SDK的一些坑(后期会陆续更新)
- 异步请求
- elasticsearch ik pingyin 分词器的安装和使用
- TCP网络编程中connect()、listen()和accept()三者之间的关系
- java的网站通过微信登录
- CXF框架实现WebService
- 大话设计模式——单例模式
- springboot(十一):Spring boot中mongodb的使用
- 学习——C#,碎知识记录
- 数塔
- Android对Java的优化
- Java 中将 String 转化为 Date 和 DateTime
- HTML5新特性