大致流程,点击登录,获取二维码,扫描之后,将微信用户的信息传到后台,判断t_wxuser表中是否已经存在该用户,没有就新保存,有就继续判断是否绑定了t_user账户,没有就绑定账户,有就直接登录。
1、准备工作
1、官网
微信开放平台:https://open.weixin.qq.com/
微信开放文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
1.2、注册认证
要想接入微信的登录功能,首先需要在微信开发平台进行用户的注册,同时需要认证为开发者,再创建网站应用,等待微信审批,审批过后,就可以使用相关功能。
1.2.1、注册
在开放平台注册:
使用邮箱进行注册(最好使用企业邮箱,避免使用私人邮箱,后续需要企业的资质认证等,避免你离职后的交接麻烦):
1.2.2、开发者认证
注册完成后,需要进行开发者的认证,登录后,点击登录名,进入,大致需要个人身份证等真实信息,还需要企业签字盖章等流程,认证一次300人民币。
1.2.3、创建网站应用
认证成功后,创建网站应用,也需要企业签字盖章,还需要备案的域名,作为微信的回调。
创建完成后,获取到appid和appsecret,配置好回调域名。
1.2.4、回调域名
在开发阶段要让回调指向本地,本地改了才生效,否则要把代码编译存在网上服务器才可以。
修改本地hosts
路径:C:\Windows\System32\drivers\etc\hosts
2、后台代码
2.1、导包
<!--处理json的包
https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!--httpclient的依赖:-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.7</version>
</dependency>
2.2、base-util
HttpClientUtil
package com.sevens.base.util;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HttpClientUtil {
public static String get(String url) {
CloseableHttpResponse response = null;
String str = null;
try {
// 获取http客户端
CloseableHttpClient client = HttpClients.createDefault();
// 通过httpget方式来实现我们的get请求
HttpGet httpGet = new HttpGet(url);
// 通过client调用execute方法,得到我们的执行结果就是一个response,所有的数据都封装在response里面了
response = client.execute(httpGet);
// HttpEntity
// 是一个中间的桥梁,在httpClient里面,是连接我们的请求与响应的一个中间桥梁,所有的请求参数都是通过HttpEntity携带过去的
// 所有的响应的数据,也全部都是封装在HttpEntity里面
HttpEntity entity = response.getEntity();
// 通过EntityUtils 来将我们的数据转换成字符串
return EntityUtils.toString(entity, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
2.3、crm-common
- WxConstant:微信所用常量
- WechatUser:储存微信登录的用户,需要crud
WxConstant
package com.sevens.crm.constant;
/**
* 微信相关的常量
*/
public class WxConstant {
//申请完账号后的appid
public static final String APPID = "自己的";
//申请完账号后的APPSECRET
public final static String APPSECRET = "自己的";
//用户授权后微信的回调域名
public final static String CALLBACK="http://xxxxx自己的/wechat/callback";
//网站应用scope都填写此值
public static final String SCOPE = "snsapi_login";
//获取授权码对应的url地址
public static final String CODEURL = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
//获取token的url地址
public static final String TOKENURL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
//获取用户的基本信息
public static final String USERINFOURL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
}
WechatUser
package com.sevens.crm.domain;
import com.sevens.base.domain.BaseDomain;
public class WechatUser extends BaseDomain {
//微信唯一标志
private String openid;
//微信名
private String nickname;
//性别
private Boolean sex;
//地址
private String address;
//头像
private String headimgurl;
//绑定的用户
private User user;
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Boolean getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getHeadimgurl() {
return headimgurl;
}
public void setHeadimgurl(String headimgurl) {
this.headimgurl = headimgurl;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}