Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zhichan
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
蒋勇
zhichan
Commits
ad57b81f
Commit
ad57b81f
authored
May 13, 2020
by
庄冰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cache feishu
parent
1ef3c589
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
69 additions
and
6 deletions
+69
-6
center-channel/app/base/db/cache/feishuUserAccessTokenCache.js
+11
-1
center-channel/app/base/service/impl/utilsSve/utilsFeishuSve.js
+44
-5
center-channel/app/base/utils/execClient.js
+14
-0
No files found.
center-channel/app/base/db/cache/feishuUserAccessTokenCache.js
View file @
ad57b81f
...
...
@@ -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
;
...
...
center-channel/app/base/service/impl/utilsSve/utilsFeishuSve.js
View file @
ad57b81f
...
...
@@ -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直接返回
}
// // 获取飞书用户信息
...
...
center-channel/app/base/utils/execClient.js
View file @
ad57b81f
...
...
@@ -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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment