https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
onGetUserInfo(event) {
const userInfo = event.detail.userInfo
if (userInfo) {
wx.login({
success: function (login_res) {
wx.getUserInfo({
success: function (res) {
wx.request({
url: config.api_base_url+'me/login',
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
code:login_res.code,
userHead: userInfo.avatarUrl,
userName: userInfo.nickName,
userGender: userInfo.gender,
userCity: userInfo.city,
userProvince: userInfo.province
},
success:function(res) {
const userInfo = res.data.object
// 将返回的数据保存到全局的缓冲中,方便其他页面使用
wx.setStorage({ key: 'userInfo', data: userInfo })
}
})
}
})
}
})
this.setData({
hasUserInfo: true,
userInfo: userInfo
})
}
}
需要注意因为发送的是POST请求,所以需要将请求头设置为 ‘content-type’ : ‘application/x-www-form-urlencoded’ 并将method设置为PSOT类型。
public interface UserConstantInterface {
// 请求的网址
public static final String WX_LOGIN_URL = "https://api.weixin.qq.com/sns/jscode2session";
// 你的appid
public static final String WX_LOGIN_APPID = "xxxxxxxxxxxxxxxxxx";
// 你的密匙
public static final String WX_LOGIN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// 固定参数
public static final String WX_LOGIN_GRANT_TYPE = "authorization_code";
}
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpclientartifactId>
<version>4.3.5version>
dependency>
发送请求的工具类
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HttpClientUtil {
public static String doGet(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
String resultString = "";
CloseableHttpResponse response = null;
try {
// 创建uri
URIBuilder builder = new URIBuilder(url);
if (param != null) {
for (String key : param.keySet()) {
builder.addParameter(key, param.get(key));
}
}
URI uri = builder.build();
// 创建http GET请求
HttpGet httpGet = new HttpGet(uri);
// 执行请求
response = httpclient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
public static String doGet(String url) {
return doGet(url, null);
}
public static String doPost(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建参数列表
if (param != null) {
List<NameValuePair> paramList = new ArrayList<>();
for (String key : param.keySet()) {
paramList.add(new BasicNameValuePair(key, param.get(key)));
}
// 模拟表单
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
httpPost.setEntity(entity);
}
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
public static String doPost(String url) {
return doPost(url, null);
}
public static String doPostJson(String url, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
}
@RestController
@RequestMapping("/api")
public class UserApi {
@Autowired
private UserService userService;
@PostMapping("/me/login")
public JsonResult user_login(
@RequestParam("code") String code,
@RequestParam("userHead") String userHead,
@RequestParam("userName") String userName,
@RequestParam("userGender") String userGender,
@RequestParam("userCity") String userCity,
@RequestParam("userProvince") String userProvince
){
// 配置请求参数
Map<String, String> param = new HashMap<>();
param.put("appid", UserConstantInterface.WX_LOGIN_APPID);
param.put("secret", UserConstantInterface.WX_LOGIN_SECRET);
param.put("js_code", code);
param.put("grant_type", UserConstantInterface.WX_LOGIN_GRANT_TYPE);
// 发送请求
String wxResult = HttpClientUtil.doGet(UserConstantInterface.WX_LOGIN_URL, param);
JSONObject jsonObject = JSONObject.parseObject(wxResult);
// 获取参数返回的
String session_key = jsonObject.get("session_key").toString();
String open_id = jsonObject.get("openid").toString();
// 根据返回的user实体类,判断用户是否是新用户,不是的话,更新最新登录时间,是的话,将用户信息存到数据库
User user = userService.selectByOpenId(open_id);
if(user != null){
user.setUserNewLogin(new Date());
userService.updateById(user);
}else{
User insert_user = new User();
insert_user.setUserHead(userHead);
insert_user.setUserName(userName);
insert_user.setUserGender(userGender);
insert_user.setUserNewLogin(new Date());
insert_user.setUserCity(userCity);
insert_user.setUserProvince(userProvince);
insert_user.setUserOpenid(open_id);
System.out.println("insert_user:"+insert_user.toString());
// 添加到数据库
Boolean flag = userService.insert(insert_user);
if(!flag){
return new JsonResult(ResultCode.FAIL);
}
}
// 封装返回小程序
Map<String, String> result = new HashMap<>();
result.put("session_key", session_key);
result.put("open_id", open_id);
return new JsonResult(ResultCode.SUCCESS, result);
}
}