java实现微信登录(SSM)
2018-03-20 21:15
537 查看
提醒:本文章可能需要一定的java基础,所需jar包也需要自己寻找
效果图:
扫描后获取的数据
openid:(微信唯一标识)
headimgurl:头像
nickname:昵称
(其他就不列举啦)
点击查看进入下图
注:花生壳可以免费注册域名,并且映射至外网测试
package com.t5.weixin;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@Controller
@Request
4000
Mapping(value = "/WeCat")
public class LoginAction {
@RequestMapping(value = "/login")
public void login(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
System.out.println("================>>");
String url = "https://open.weixin.qq.com/connect/qrconnect?";
url += "appid=你的appid";
url += "&redirect_uri=" + URLEncoder.encode("http://169l5w4498.imwork.net:16282/WeCat/callBackLogin", "UTF-8"); //此处和微信会调用的域名相同
url += "&response_type=code&scope=snsapi_login";
url += "&state=" + request.getSession().getId() + "#wechat_redirect";
//redirect_uri;指定回调路径
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping(value = "/callBackLogin")
public String callBackLogin(HttpServletRequest request, HttpServletResponse response,Model model) {
System.out.println("callBackLogin....");
// return "redirect:../loginSuccess.jsp";
String code = request.getParameter("code");
String state = request.getParameter("state");
System.out.println("code=" + code);
System.out.println("state=" + state);
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?";
url += "appid=你的appid";
url += "&secret=你的secret";
url += "&code=" + code + "&grant_type=authorization_code";
JSONObject jsonObject = this.httpGet(url);
String at = jsonObject.getString("access_token");//获取微信开放平台票据号
String openId = jsonObject.getString("openid");
System.out.println("at="+at);
url="https://api.weixin.qq.com/sns/userinfo?access_token="+at+"&openid="+openId;
jsonObject = this.httpGet(url);//以json对象格式返回用户数据
System.out.println("==============>"+jsonObject);
model.addAttribute("weixin", jsonObject);
//把用户微信信息保存到数据库(判断这个信息是否存在,如果不存在,新增到数据库表(自动创建一个用户),如果已存在,直接登录成功)
return "index";
}
/**
* ����get���� http://www.cnblogs.com/QQParadise/articles/5020215.html *
* @param url
* @return
*/
public JSONObject httpGet(String url) {
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(response.getEntity(),"UTF-8"); //此处设定编码格式
jsonResult = JSON.parseObject(strResult);
System.out.println("strResult=" + strResult);
} else {
System.out.println("*******************");
}
} catch (IOException e) {
e.printStackTrace();
}
return jsonResult;
}
}
此致,调用login方法即可
效果图:
扫描后获取的数据
openid:(微信唯一标识)
headimgurl:头像
nickname:昵称
(其他就不列举啦)
1.注册微信开放平台开发者账号并创建一个或一个以上的网站应用
点击查看进入下图
2.把授权回调域改成自己的
授权回调域:域名注:花生壳可以免费注册域名,并且映射至外网测试
3.一个类搞定登录,LoginAction
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@Controller
@Request
4000
Mapping(value = "/WeCat")
public class LoginAction {
@RequestMapping(value = "/login")
public void login(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
System.out.println("================>>");
String url = "https://open.weixin.qq.com/connect/qrconnect?";
url += "appid=你的appid";
url += "&redirect_uri=" + URLEncoder.encode("http://169l5w4498.imwork.net:16282/WeCat/callBackLogin", "UTF-8"); //此处和微信会调用的域名相同
url += "&response_type=code&scope=snsapi_login";
url += "&state=" + request.getSession().getId() + "#wechat_redirect";
//redirect_uri;指定回调路径
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping(value = "/callBackLogin")
public String callBackLogin(HttpServletRequest request, HttpServletResponse response,Model model) {
System.out.println("callBackLogin....");
// return "redirect:../loginSuccess.jsp";
String code = request.getParameter("code");
String state = request.getParameter("state");
System.out.println("code=" + code);
System.out.println("state=" + state);
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?";
url += "appid=你的appid";
url += "&secret=你的secret";
url += "&code=" + code + "&grant_type=authorization_code";
JSONObject jsonObject = this.httpGet(url);
String at = jsonObject.getString("access_token");//获取微信开放平台票据号
String openId = jsonObject.getString("openid");
System.out.println("at="+at);
url="https://api.weixin.qq.com/sns/userinfo?access_token="+at+"&openid="+openId;
jsonObject = this.httpGet(url);//以json对象格式返回用户数据
System.out.println("==============>"+jsonObject);
model.addAttribute("weixin", jsonObject);
//把用户微信信息保存到数据库(判断这个信息是否存在,如果不存在,新增到数据库表(自动创建一个用户),如果已存在,直接登录成功)
return "index";
}
/**
* ����get���� http://www.cnblogs.com/QQParadise/articles/5020215.html *
* @param url
* @return
*/
public JSONObject httpGet(String url) {
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(response.getEntity(),"UTF-8"); //此处设定编码格式
jsonResult = JSON.parseObject(strResult);
System.out.println("strResult=" + strResult);
} else {
System.out.println("*******************");
}
} catch (IOException e) {
e.printStackTrace();
}
return jsonResult;
}
}
此致,调用login方法即可
相关文章推荐
- 微信小程序Java登录流程(ssm实现具体功能和加解密隐私信息问题解决方案)
- 微信小程序Java登录流程(ssm实现具体功能和加解密隐私信息问题解决方案)
- 第三方网站微信登录java代码实现
- 第三方网站微信登录java代码实现
- java实现 微博登录、微信登录、qq登录实现代码
- java实现微信小程序第三方登录-保存用户至自己的服务器
- java实现微信小程序登录态维护的示例代码
- java实现 微博登录、微信登录、qq登录实现代码
- U3D与JAVA交互实现微信登录、支付合成案例
- 第三方网站微信登录java代码实现
- 微博登录、微信登录、qq登录java技术实现
- Java实现微信授权登录
- 第三方网站微信登录java代码实现
- 自己写的JAVA实现登录限制原理(SSM框架)
- 第三方登录-[微博、微信、qq] java实现
- Java中SSM+Shiro系统登录验证码的实现方法
- 如何实现网页程序自动登录(java)?
- java网络编程五:暴力法破解登录系统的完全实现(木子)
- java web中实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)
- java动态实现登录验证