微信小程序
wx.login({
success (res) {
if (res.code) {
console.log(res,);
wx.request({
url: '服务端获取,
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
服务端
@SneakyThrows
@ApiOperation(value="微信小程序登录", notes="微信登录")
@GetMapping("getwxCode")
public Result<?> getwxCode(String code){
Auser ausersass = (Auser)redisUtils.get(code);
if (ausersass!=null){
return Result.OK(ausersass);
}
String appid = "";
String secret = "";
RequestBuilder builder =
RequestBuilder.get("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code");
JSONObject getJson = IdmApiClient.executessss(builder);
System.out.println("================================");
System.out.println(getJson);
System.out.println("================================");
return Result.OK();
}
@SneakyThrows
@ApiOperation(value="微信公众号(网页)登录获取openid", notes="微信登录")
@GetMapping("authorize")
public void authorize(HttpServletResponse response){
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+Wxpojo.wxwy_appId+"&redirect_uri=" +
WeChatConstants.wx_redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
response.sendRedirect(url);
}
@SneakyThrows
@ApiOperation(value="微信公众号(网页)登录获取openid", notes="微信登录")
@GetMapping("getgzhCode")
public Result<?> getgzhCode(String code){
Auser ausersass = (Auser)redisUtils.get(code);
if (ausersass!=null){
return Result.OK(ausersass);
}
RequestBuilder builder =
RequestBuilder.get("https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Wxpojo.appId+"&secret="+Wxpojo.secret+"&code="+code+"&grant_type=authorization_code");
JSONObject getJson = IdmApiClient.executessss(builder);
System.out.println("================================");
System.out.println(getJson);
System.out.println("================================");
String accessToken = getJson.get("access_token").toString();
String expiresIn = getJson.get("expires_in").toString();
String refreshToken = getJson.get("refresh_token").toString();
String openid = getJson.get("openid").toString();
String scope = getJson.get("scope").toString();
Wxcode wxcodes = new Wxcode();
wxcodes.setAccesstoken(accessToken);
wxcodes.setExpiresin(expiresIn);
wxcodes.setRefreshtoken(refreshToken);
wxcodes.setOpenid(openid);
wxcodes.setScope(scope);
wxcodes.setId(1);
wxcodes.setTime(DateUtil.now());
wxcodeService.save(wxcodes);
System.out.println("第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步");
RequestBuilder builders =
RequestBuilder.get("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+Wxpojo.appId+"&grant_type=refreshToken"+"&refresh_token="+refreshToken);
JSONObject getJsons = IdmApiClient.executessss(builders);
System.out.println("11111111111111111111111111111111111111111111111");
System.out.println(getJsons);
System.out.println("11111111111111111111111111111111111111111111111");
System.out.println("第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步");
RequestBuilder builderssi =
RequestBuilder.get("https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openid+"&lang=zh_CN");
JSONObject getJsonssi = IdmApiClient.executessss(builderssi);
System.out.println("用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息");
System.out.println(getJsonssi);
System.out.println("用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息");
String openiduser = getJsonssi.get("openid").toString();
String nickname = getJsonssi.get("nickname").toString();
String sex = getJsonssi.get("sex").toString();
String headimgurl = getJsonssi.get("headimgurl").toString();
QueryWrapper<Auser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("openid",openiduser);
Auser ausers = auserService.getOne(queryWrapper);
Auser auser = new Auser();
auser.setOpenid(openiduser);
try {
String username = new String(nickname.getBytes("ISO-8859-1"), "UTF-8");
auser.setUsername(username);
}catch (Exception e) {
}
auser.setXb(Integer.parseInt(sex));
auser.setImg(headimgurl);
if (ausers == null) {
auser.setInstime(DateUtil.now());
auserService.save(auser);
logger.info("进行添加新的用户");
}else{
auser.setId(ausers.getId());
auser.setUpdatetime(DateUtil.now());
auserService.updateById(auser);
logger.info("修改老用户");
}
QueryWrapper<Auser> queryWrapperuser = new QueryWrapper<>();
queryWrapperuser.eq("openid",openiduser);
Auser ausersqueryWrapperuser = auserService.getOne(queryWrapperuser);
if (ausersqueryWrapperuser.getUsername()==null){
ausersqueryWrapperuser.setUsername(ausersqueryWrapperuser.getName());
}
redisUtils.set(code,ausersqueryWrapperuser);
return Result.OK(ausersqueryWrapperuser);
}
pox
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.8</version>
</dependency>
package com.demo.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
public class IdmApiClient {
private static Logger LOGGER = LoggerFactory.getLogger(IdmApiClient.class);
private String appUser;
private String privateKey;
private String prefix;
public static JSONObject executessss(RequestBuilder builder) {
try {
CloseableHttpClient client = buildHttpClient();
HttpUriRequest request = builder.build();
LOGGER.debug("请求接口:{}", request);
CloseableHttpResponse response = client.execute(request);
String result = EntityUtils.toString(response.getEntity());
LOGGER.debug("接口响应:{}", result);
HttpClientUtils.closeQuietly(response);
HttpClientUtils.closeQuietly(client);
return JSON.parseObject(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String executs(RequestBuilder builder) {
try {
CloseableHttpClient client = buildHttpClient();
HttpUriRequest request = builder.build();
LOGGER.debug("请求接口:{}", request);
CloseableHttpResponse response = client.execute(request);
String result = EntityUtils.toString(response.getEntity());
LOGGER.debug("接口响应:{}", result);
HttpClientUtils.closeQuietly(response);
HttpClientUtils.closeQuietly(client);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String buildSign(RequestBuilder builder) {
String uri = StringUtils.substringAfter(builder.build().getURI().toString(), prefix);
String content = "";
String method = builder.getMethod();
if (StringUtils.equals(method, "PUT") || StringUtils.equals(method, "POST")) {
try {
HttpEntity entity = builder.getEntity();
if (Objects.nonNull(entity)) {
content = EntityUtils.toString(entity);
}
} catch (IOException ignored) {
}
}
String text = StringUtils.join(new String[]{uri, content, privateKey}, "&");
return DigestUtils.md5Hex(text);
}
private static CloseableHttpClient buildHttpClient() throws Exception {
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial((TrustStrategy) (chain, authType) -> true)
.build();
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslcontext,
new String[]{"TLSv1"},
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
}
}