0、可参考的官方页面
获取登录凭证:https://developers.weixin.qq.com/miniprogram/dev/api/wx.login.html
检查登录态是否过期: https://developers.weixin.qq.com/miniprogram/dev/api/wx.checkSession.html
备注:你要明白什么是登录态:这里的登录态是微信小程序自己的登录态,我们可以再自己写个登录页面作为自己的登录态,不过为了用户体验良好我直接以微信登录态做为自己的登录态。所以我的整个小程序是直接自动登录的
注意:微信小程序缓存很容易被清除,所以你必须时刻提防小程序缓存被清除的状态下怎么处理。
备注:我从后台返回来给小程序的对象格式为:
public ResultCode resultCode; // 业务响应码
public String resultMsg = ""; // 返回信息描述
public String errCode; // 错误代码
public String errCodeDes = ""; // 错误描述
public Object data; // 返回业务数据
public enum ResultCode {
SUCCESS, // 业务处理成功
FAIL; // 业务处理失败
}
1、流程
(1)调用wx.checkSession检查用户登录态是否过期,如果没有过期就检查用户注册没注册①,如果过期了就去重新执行登录流程②
(2)②的流程为:调用wx.login来获取登录凭证(code),然后把code发给后台,后台调用 auth.code2Session,使用 code 换取 openid 等信息来获取openId , 把openId返回给小程序, 然后把openId放到小程序缓存里面,然后检查用户注册没注册①
(3)①的流程为:先从缓存查该用户注册没注册过(通过检查缓存变量registered存不存在),有就是老用户,没有就去后台通过openId查有没有这个用户,把结果返回给小程序,如果后台有这个用户,说明已经注册过,就把在缓存里加个registered并赋值true。
(4)然后我们就可以在其他页面通过registered来判断用户注册没注册过,从而跳转进入注册页面或者是主页
2、app.js代码
App({
globalData: {
serverHost: 'http://localhost:8080', //服务器域名
},
onLaunch: function() {
var that = this;
//检查登录态是否过期
wx.checkSession({
success() {
// session_key 未过期,并且在本生命周期一直有效
console.log("【用户小程序登录态未过期】");
that.isRegister();
},
fail() {
// session_key 已经失效,需要重新执行登录流程
that.wxLogin();
}
})
},
//查看当前用户是否已经注册过
isRegister: function() {
var that = this;
var host = this.globalData.serverHost;
// (先从缓存查该用户,有就是老用户,没有就后台查有没有这个用户,后台查到有这个用户就放缓存,没有就是新用户)
wx.getStorage({
key: 'registered',
success(res) {
console.log("【通过缓存查询到该用户是已经注册过的】");
console.log("【当前用户的openid为:】" + wx.getStorageSync('openid'));
},
fail(res) {
var openid;
openid = wx.getStorageSync('openid');
wx.request({
url: host + '写自己的后台请求检查用户存不存在的URL',
method: 'POST',
data: {
openId: openid,
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: (res) => {
if (后台返回注册过") {
if (res.data.data) {
console.log("【通过后台查询到该用户已经注册过】");
wx.setStorage({
key: "registered",
data: true
});
} else {
console.log("【通过后台查询到该用户还没注册过】");
}
}
}
})
},
})
},
//该函数用来登录的
wxLogin: function() {
var that = this;
//设置后台host
var host = this.globalData.serverHost;
console.log("【用户重新执行小程序登录流程】");
wx.login({
success(res) {
// 发起网络请求,发送 res.code 到后台换取 openId
if (res.code) {
var code = res.code;
wx.request({
url: host + '写自己后台用code换取OpenId的请求URL',
method: 'POST',
data: {
code: code,
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: (res) => {
console.log("【获取用户openid成功】");
console.log("【从后台获取到用户openid为】" + res.data.data.openid)
let openId = res.data.data.openid;
wx.setStorage({
key: "openid",
data: res.data.data.openid
});
console.log("【用户openid放入缓存成功】");
that.isRegister();
}
})
}
}
})
},
},
})
3、java后台怎么通过code获取openId
import net.sf.json.JSONObject;
/**
* @author niqinhua
* @date 2019/3/8 9:19
*/
public class WXUtil {
public static JSONObject getOpenidAndSessionKey(String code) {
String url = "https://api.weixin.qq.com/sns/jscode2session";
String param = "appid=写自己的appId&secret=写自己的密钥&js_code=" +
code + "&grant_type=authorization_code";
String wxReturnResult = sendGet(url, param);
JSONObject wxReturnResultObject = JSONObject.fromObject(wxReturnResult);
return wxReturnResultObject;
}
/**
* 从规范上,建议把这个方法抽出来放到HttpUtil类里面
* 向指定URL发送GET方法的请求
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.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();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("【HTTP发送GET请求出现异常】:访问URL:"+url+",错误:"+e.getMessage());
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
System.out.println("【HTTP请求关闭输入流异常】:访问URL:"+url+",错误:"+e2.getMessage());
}
}
return result;
}
}
上面只是工具类直接拿就行,真正业务逻辑要自己写,我只给出重点部分
JSONObject wxReturnJson = WXUtil.getOpenidAndSessionKey(code);
if (wxReturnJson.get("errCode")!=null) {
//log.error("【获取用户的openid】【失败】【传递参数code无效】");
} else {
//log.info("【获取用户的openid】【成功】【传递参数code无效】");
}
总结
以上所述是小编给大家介绍的微信小程序登录态和检验注册过没的app.js写法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
小程序登录态,app.js写法
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]