网站微信登录,做起来挺简单的,我们做这个,首页是要去看微信文档,文档看懂了,然后理清楚逻辑,怎么进行绑定贵公司的账号,业务那块要理清楚!
首先,微信官方告诉我们,要先去申请网站应用,好吧,去申请一下,几小时后,审批通过,速度蛮快的!
申请成功,我们就可以拿到AppId, AppSercret,那么就可以去开心的调接口了!
看看接口文档,嗯,二维码是吧,看看URL,简单,传参,然后发起请求,好舒服,嗯,按照参往里面传,然后出现了二维码。开心!
第二步,用户扫描成功,跳到我传的回调地址,进行授权申请登录,那么就可以拿到oppid了,开心,oppid拿到手了,不是就可以进行关联了,简单,关联在一起,这里要提醒一下,公众号与小程序的oppid是不一样的,但是uuid是一样的,如果要关联小程序与公众号,那么就要再通过token去拿uuid哦,我是偷懒,没有再去调接口拿uuid了!
又有同学问我了,如果没有绑定账号怎么办,这个我就不给与回答,你自己动动小脑袋去想,哈哈!还有,token不要总是去调,要缓存起来,每次用户登录,你要延迟这个token的时间,博主我是知道怎么做,就是懒,到时候如果需要用到,我再花几分钟改改代码。
开始写代码了!
首先,写一个WxConfig类,把你的配置写好,我公开下我的
//微信二维码
public static final String WX_OA_CODE = "https://open.weixin.qq.com/connect/qrconnect?";
//微信二维码回调地址
public static final String REDIRECT_URL = "http://127.0.0.1:8888/v1/b/user/wx_login";
//微信网站应用
public static final String APPID="1";
public static final String APPSERCRET="2";
http请求
/**
* dapeng
*/
public class Httprequests {
public static String sendGet (String url,String param) {
String result ="";
BufferedReader in =null;
try {
String urlNameString = url +"?" +param;
System.out.println("发送的链接请求:"+urlNameString);
URL reaurl = new URL(urlNameString);
URLConnection connection = reaurl.openConnection();
//设置通用
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//建立实际的连接
connection.connect();
Map<String, List<String>> map = connection.getHeaderFields();
//定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
* @param url 发送请求的 URL
* @param param 参数
* @return String 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
service层
/**
* 微信登录 - 二维码
* @param request
*/
void getCode(HttpServletRequest request);
/**
* 微信登录
* @param request
*/
OrgSessionEntity wxLogin(HttpServletRequest request);
impl层
/**
* dapeng
*/
@Override
public void getCode(HttpServletRequest request) {
String state = UUID.randomUUID().toString().replaceAll("_","");
RedisUtil.setex("wx_open_state" + request.getSession().getId(), state,600);
StringBuilder url = new StringBuilder();
url.append(WxConfigVar.WX_OA_CODE);
url.append("appid=" + WxConfigVar.APPID);
url.append("&redirect_uri=" + URLEncoder.encode(WxConfigVar.REDIRECT_URL));
url.append("&response_type=code");
url.append("&scope=snsapi_login");
url.append("&state=" + state + "#wechat_redirect");
//打印路径
System.out.println(url);
Httprequests.sendGet(url.toString(), "");
}
@Override
public OrgSessionEntity wxLogin(HttpServletRequest request) {
String code = request.getParameter("code");
String state = request.getParameter("state");
String stateStr = RedisUtil.get("wx_open_state"+ request.getSession().getId());
if(state.equals(stateStr) || StringUtils.isEmpty(state)){
throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NON_HAIR.code(),ErrorCodeEnum.WX_PARAMETER_NON_HAIR.msg());
}
//用户授权成功
if(StringUtils.isNotEmpty(code)){
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WxConfigVar.APPID +"&secret="+WxConfigVar.APPSERCRET+"&code="+code+"&grant_type=authorization_code";
String urln = Httprequests.sendGet(url,"");
System.out.println(urln);
JSONObject jsonObject = JSONObject.parseObject(urln);
String openid = jsonObject.getString("openid");
//已经拿到了openid了,开心起来吧!
}else {
throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NULL.code(),ErrorCodeEnum.WX_PARAMETER_NULL.msg());
}
}
OK了,就网站微信登录就完成了,是不是很简单,半小时就做好了,如果你的领导给你3天时间做个微信登录,那你就有2天半的时间去学习,去逛贴吧了,美滋滋哈!!!