Commit ad57b81f by 庄冰

cache feishu

parent 1ef3c589
......@@ -29,10 +29,20 @@ class feishuUserAccessTokenCache extends CacheBase{
return null;
}
async set(obj,openid){
var expire = 7100;
if(obj.expires_in){
var time = obj.expires_in;
var now = Date.parse(new Date())/1000;
if(now<time){
expire = time - now;
}else{
return null;
}
}
var key = this.prefix+"_"+openid;
if(obj && obj.access_token){
var stringobj = JSON.stringify(obj);
await this.redisClient.setWithEx(key,stringobj,7100);
await this.redisClient.setWithEx(key,stringobj,expire);
return obj;
}
return null;
......
......@@ -106,6 +106,9 @@ class UtilsFeishuService{
}
return system.getResultFail("获取appAccessToken失败");
}
//------------------------飞书网页开发---------------------------------------------------------------
//获取登录用户身份
async getUserAccessToken(obj){
var resData = {};
......@@ -160,6 +163,43 @@ class UtilsFeishuService{
}
return system.getResult(null, "获取飞书用户信息失败");
}
//------------------------飞书网页开发-------结束--------------------------------------------------------
//------------------------飞书小程序开发---------------------------------------------------------------
//获取登录用户身份 session_key 和 openId
async tokenLoginValidate(obj){
var resData = {};
if(obj.open_id){
//缓存中获取登录用户身份
resData = await this.cacheManager["feishuUserAccessTokenCache"].get(obj.open_id);
}
//缓存中存在 直接返回
if(resData && resData.access_token){
return system.getResultSuccess(resData);
}
if(!obj.code){
return system.getResultFail("code参数不能为空");
}
if(!obj.app_access_token){
return system.getResultFail("app_access_token参数不能为空");
}
var url = "https://open.feishu.cn/open-apis/mina/v2/tokenLoginValidate";
var fsObj={
token:obj.app_access_token,//应用的 app_access_token,必须与请求身份验证中的应用保持一致
code:obj.code //来自请求身份验证(新)流程,用户扫码登录后会自动302到redirect_uri并带上此参数
};
var rtn = await this.execClient.execFeishuPost(fsObj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0 && result.data){
//缓存AppAccessToken
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data,result.data.open_id);
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书登录用户身份失败");
}
//------------------------飞书小程序开发------结束---------------------------------------------------------
getUUID() {
var uuid = uuidv4();
......@@ -185,7 +225,8 @@ class UtilsFeishuService{
var userAccessTokenParams = {
"code":pobj.code,"app_access_token":app_access_token,"open_id":pobj.open_id || ""
};
var userAccessTokenRes = await this.getUserAccessToken(userAccessTokenParams);
// var userAccessTokenRes = await this.getUserAccessToken(userAccessTokenParams);
var userAccessTokenRes = await this.tokenLoginValidate(userAccessTokenParams);
if(userAccessTokenRes.status!=0){
return userAccessTokenRes;
}
......@@ -197,14 +238,12 @@ class UtilsFeishuService{
"actionType": "getLoginByUserName",
"actionBody": {
"openId":userAccessTokenObj.open_id,
"channelUserId":userAccessTokenObj.open_id,// Y 渠道用户ID
"channelUserName":userAccessTokenObj.name,// N 渠道用户名
"nickName":userAccessTokenObj.name, // N 用户昵称
"head_url":userAccessTokenObj.avatar_url //头像
"channelUserId":userAccessTokenObj.open_id,// Y 渠道用户ID
}
};
var loginByUserNameRes = await this.getLoginByUserName(loginByUserNameParams);
if(loginByUserNameRes && loginByUserNameRes.status==0){
loginByUserNameRes.data.open_id = userAccessTokenObj.open_id;
return loginByUserNameRes;//获取userpin直接返回
}
// // 获取飞书用户信息
......
......@@ -8,6 +8,8 @@ class ExecClient {
this.cmdGetPattern = "curl -G -X GET '{url}'";
this.cmdPushDataPostPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'request-id:{requestId}' -d '{data}' {url}";
this.cmdFeishuGetPattern = "curl -X GET -k -H 'Content-Type: application/json' -H 'Authorization: {Authorization}' -d '{data}' {url} ";
this.cmdFeishuPostPattern = "curl -k -H 'Content-type: application/json' -H 'Authorization: {Authorization}' -d '{data}' {url}";
}
getUUID() {
var uuid = uuidv4();
......@@ -33,6 +35,13 @@ class ExecClient {
console.log(cmd);
return cmd;
}
FetchFeishuPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdFeishuPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{Authorization\}/g, "Bearer "+subData.token);
console.log(cmd);
return cmd;
}
FetchPushDataPostCmd(subData, url, token, requestId) {
var requestId = requestId || this.getUUID();
var data = JSON.stringify(subData);
......@@ -46,6 +55,11 @@ class ExecClient {
var result = await this.exec(cmd);
return result;
}
async execFeishuPost(subData, url) {
let cmd = this.FetchFeishuPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execPushDataPost(subData, url, token, requestId) {
let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId);
var result = await this.exec(cmd);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment