微信小程序实现登录之java后台
第一步:前端调用wx.login()函数,获取返回的code值。(每次通过wx.login()得到的code值可能不一样)
第三步:将用户openid保存到数据库,并将用户id返回到前端,放到缓存中保持登录态。
个人比较喜欢在小程序启动时,将登陆代码写到onLanuch()中,每次小程序启动后,去登陆,如果第一次进入该小程序,就将新用户保存到数据库,如果不是新用户,将用户id返回到前端。下面给出app.js文件的实现代码:
//app.js
App({
onLaunch: function() {
let that = this;
wx.login({
success: function (res) {
//console.log(res.code);
if (res.code) {
wx.request({
url: that.globalData.host + /xxx/xxx/xxxx/xxxx,//这里写自己java后台的请求地址
method: POST,
data: {
code: res.code
},
header: {
content-type: application/x-www-form-urlencoded
},
success(res) {
//console.log(用户登录成功!id= + res.data.session_key);
wx.setStorageSync("userid", res.data.userid);//将用户id保存到缓存中
wx.setStorageSync("session_key", res.data.session_key);//将session_key保存到缓存中
}
})
} else {
console.log(获取用户登录态失败! + res.errMsg)
}
}
})
},
globalData: {
host: http://localhost:80
}
})
java后台的接收代码如下:
HttpUtil工具类实现如下:
package xxx.xxxxxx.xxxxxxxx.xxxxxxxxxx;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.httpclient.HttpStatus;//此类需要添加maven依赖或jar包
/** 将此依赖添加到pom.xml中
<!-- HttpUtils所需包-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
**/
public class HttpUtil {
public static String doGet(String urlPath, HashMap<String, Object> params)
throws Exception {
StringBuilder sb = new StringBuilder(urlPath);
if (params != null && !params.isEmpty()) { // 说明有参数
sb.append("?");
Set<Entry<String, Object>> set = params.entrySet();
for (Entry<String, Object> entry : set) { // 遍历map里面的参数
String key = entry.getKey();
String value = "";
if (null != entry.getValue()) {
value = entry.getValue().toString();
// 转码
value = URLEncoder.encode(value, "UTF-8");
}
sb.append(key).append("=").append(value).append("&");
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个&
}
// System.out.println(sb.toString());
URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000); // 5s超时
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpStatus.SC_OK) {// HttpStatus.SC_OK ==
// 200
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
StringBuilder sbs = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sbs.append(line);
}
// JSONObject jsonObject = new JSONObject(sbs.toString());
return sbs.toString();
}
return null;
}
}
Configure类的代码如下:
package xxxx.xxxxx.xxxxxxxx.xxxxxxx;
/**
* 这里放置各种配置数据
*/
public class Configure {
/************************************************************小程序设置********************************************************************/
public static String mini_appID = "xxxxxxxxxxxxxxxxx";//appid,去自己的小程序后台找
public static String mini_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";//appsecret,去自己小程序后台找
public static String grant_type = "authorization_code";
/************************************************************小程序设置********************************************************************/
}
以上为所有的代码,有疑问的小伙伴可以留言,或者有错误之处还请多多指正。
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
CC微校园小程序(云开发)设计方案
