Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
5
51business
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
方斌
51business
Commits
53b2cd31
Commit
53b2cd31
authored
Dec 01, 2019
by
李尚科
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix gjj wechat
parent
535282a7
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
53 deletions
+71
-53
wechat.js
app/controller/gjj/wechat.js
+71
-53
No files found.
app/controller/gjj/wechat.js
View file @
53b2cd31
...
@@ -3,8 +3,11 @@
...
@@ -3,8 +3,11 @@
const
Controller
=
require
(
'egg'
).
Controller
;
const
Controller
=
require
(
'egg'
).
Controller
;
const
moment
=
require
(
'moment'
);
const
moment
=
require
(
'moment'
);
const
WECHAT_CODE_URL
=
'https://open.weixin.qq.com/connect/oauth2/authorize'
;
const
WECHAT_CODE_URL
=
'https://open.weixin.qq.com/connect/oauth2/authorize'
;
const
WECHAT_AUTH
=
'https://api.weixin.qq.com/sns/oauth2/access_token'
;
const
WECHAT_APPID
=
'wx3c772df2d8d78da3'
;
const
WECHAT_APPID
=
'wx3c772df2d8d78da3'
;
const
WECHAT_APPID_TEST
=
'wxa9df2d60730b25d9'
;
const
WECHAT_APPID_TEST
=
'wxa9df2d60730b25d9'
;
const
WECHAT_SECRET
=
'b369fd28a9f9320ebe4e35dfaa00b194'
;
const
WECHAT_SECRET_TEST
=
'dfede7a3b543149a88b07b46bcc28e00'
;
const
REDIRECT_PAGE
=
'/webserve/accumulation/index'
;
const
REDIRECT_PAGE
=
'/webserve/accumulation/index'
;
class
WechatController
extends
Controller
{
class
WechatController
extends
Controller
{
...
@@ -15,67 +18,81 @@ class WechatController extends Controller {
...
@@ -15,67 +18,81 @@ class WechatController extends Controller {
const
{
ctx
}
=
this
;
const
{
ctx
}
=
this
;
const
code
=
ctx
.
query
.
code
;
const
code
=
ctx
.
query
.
code
;
const
channel_id
=
ctx
.
query
.
channel_id
;
const
channel_id
=
ctx
.
query
.
channel_id
;
const
app_id
=
[
'https://lan-nginx.jianbing.com'
,
'https://pro-nginx.jianbing.com'
,
'https://p.jianbing.com'
,
'https://b.jianbing.com'
].
includes
(
this
.
config
.
NODE_BASE_URL
)
?
WECHAT_APPID
:
WECHAT_APPID_TEST
;
const
app_id
=
[
'https://lan-nginx.jianbing.com'
,
'https://pro-nginx.jianbing.com'
].
includes
(
this
.
config
.
NODE_BASE_URL
)
?
WECHAT_APPID
:
WECHAT_APPID_TEST
;
if
(
!
code
||
code
.
length
===
0
)
{
const
appsecret
=
[
'https://lan-nginx.jianbing.com'
,
'https://pro-nginx.jianbing.com'
].
includes
(
this
.
config
.
NODE_BASE_URL
)
?
WECHAT_SECRET
:
WECHAT_SECRET_TEST
;
if
(
!
code
||
code
.
length
===
0
)
{
// this.app.config.OUT_P_NODE_URL
const
target_url
=
WECHAT_CODE_URL
+
`?appid=
${
app_id
}
&redirect_uri=
${
encodeURIComponent
(
`
${
this
.
app
.
config
.
PULIC_BASE_URL
}
/51business/api/gjj/wechat/oauth_login?&channel_id=
${
channel_id
}
`
)}
&response_type=code&scope=snsapi_base&state=gjjquery#wechat_redirect`
;
const
target_url
=
WECHAT_CODE_URL
+
`?appid=
${
app_id
}
&redirect_uri=
${
encodeURIComponent
(
`
${
this
.
app
.
config
.
PULIC_BASE_URL
}
/51business/api/gjj/wechat/oauth_login?&channel_id=
${
channel_id
}
`
)}
&response_type=code&scope=snsapi_base&state=gjjquery#wechat_redirect`
;
ctx
.
redirect
(
target_url
);
return
;
ctx
.
redirect
(
target_url
);
return
;
}
}
const
oauth_url
=
`
${
this
.
config
.
NODE_BASE_URL
}
/user_api/v1/login/oauth_login`
;
// 用户中心授权地址
const
url
=
`
${
WECHAT_AUTH
}
?appid=
${
app_id
}
&secret=
${
appsecret
}
&code=
${
code
}
&grant_type=authorization_code`
;
// 授权参数
const
result
=
await
ctx
.
helper
.
send_request
(
url
,
{},
{
method
:
'GET'
});
const
oauth_params
=
{
ctx
.
logger
.
info
(
JSON
.
stringify
({
wx_gjj_query
:
result
}));
login_type
:
'5'
,
// 5代表微信授权登录 如果有QQ授权登录,再扩展
if
(
result
.
status
!==
200
)
{
app_user_id
:
ctx
.
cookies
.
get
(
'app_user_id'
,
{
signed
:
false
}),
ctx
.
failed
(
'获取openid失败1'
);
code
,
}
token
:
ctx
.
cookies
.
get
(
'token'
,
{
signed
:
false
}),
const
wx_ret
=
result
.
data
;
app_id
,
if
(
!
wx_ret
.
openid
)
{
};
ctx
.
failed
(
'获取openid失败2'
);
const
result
=
await
ctx
.
helper
.
send_request
(
oauth_url
,
oauth_params
,
{
method
:
'POST'
});
// 通过授权码code返回授权状态
}
ctx
.
logger
.
info
(
JSON
.
stringify
({
gjj_wechat_oauth_login_params
:
oauth_params
,
gjj_wechat_oauth_login_result
:
result
}));
const
openid
=
wx_ret
.
openid
;
// 在微信端需要关闭微信重新打开才会销毁cookie值,所以在这里重置cookie值
const
ret
=
result
.
data
;
ctx
.
cookies
.
set
(
'openid'
,
openid
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
if
(
result
.
status
!==
201
)
{
// 调用接口出错抛出异常
ctx
.
cookies
.
set
(
'token'
,
null
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
const
error_message
=
ret
.
error
?
ret
.
error
:
'授权失败,请联系客服'
;
ctx
.
cookies
.
set
(
'user_id'
,
null
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
ctx
.
failed
(
error_message
);
ctx
.
cookies
.
set
(
'app_user_id'
,
null
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
}
ctx
.
cookies
.
set
(
'jianbing_customer_id'
,
null
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
ctx
.
cookies
.
set
(
'auth_token'
,
null
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
const
no_login_url
=
this
.
config
.
PULIC_BASE_URL
+
REDIRECT_PAGE
+
`?channel_id=
${
channel_id
}
&type=noLogin`
;
// 未登录并没有公积金数据的页面
const
detail_url
=
this
.
config
.
PULIC_BASE_URL
+
REDIRECT_PAGE
+
`?channel_id=
${
channel_id
}
&type=hasLogin`
;
// 已登录并且有公积金数据的公积金详情页,
const
redirect_url
=
this
.
app
.
config
.
PULIC_BASE_URL
+
REDIRECT_PAGE
;
// 判断是否已绑定手机号
// { code: '-1', msg: 'APP用户状态异常' }
const
user_exist_url
=
`
${
this
.
app
.
config
.
NODE_BASE_URL
}
/user_api/v1/user/is_exist/
${
openid
}
`
;
// { code: '-2', msg: '需要重新授权' }
const
bind_phone_result
=
await
ctx
.
helper
.
send_request
(
user_exist_url
,
{
type
:
5
},
{
method
:
'GET'
});
// { code: '-3', msg: '需要先手机登录' }
ctx
.
logger
.
info
(
JSON
.
stringify
({
bind_phone_result
}));
// { code: '-4', msg: '绑定失败,此QQ已绑定其他手机了'}
if
(
bind_phone_result
.
status
!==
200
)
{
if
(
ret
.
code
&&
ret
.
code
===
'-3'
)
{
// 如果用户未绑定手机,先去做登录绑定手机号
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
ctx
.
redirect
(
no_login_url
);
}
return
;
const
user_exist_ret
=
bind_phone_result
.
data
;
}
if
(
user_exist_ret
.
result
!=
'true'
)
{
// 未绑定的手机号时
if
(
!
ret
||
ret
.
code
!==
'1'
||
!
ret
.
data
||
!
ret
.
data
.
openid
)
{
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
const
error_msg
=
ret
.
msg
||
'获取openid失败'
;
}
ctx
.
failed
(
error_msg
);
const
user_id
=
user_exist_ret
.
uid
;
}
const
openid
=
ret
.
data
.
openid
;
const
login_result
=
await
this
.
user_login
({
code
,
openid
,
channel_id
});
// 用openid直接登录用户
const
user_id
=
login_result
.
user_id
;
// 已绑定手机的 继续 判断是否有导入公积金
// 已绑定手机的 继续 判断是否有导入公积金
if
(
!
login_result
.
token
)
{
const
login_result
=
await
this
.
user_login
({
code
,
openid
,
channel_id
});
// 已绑定的用户 直接登录
ctx
.
redirect
(
no_login_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
if
(
login_result
.
anew
&&
!
login_result
.
token
)
{
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
}
}
const
gjj_exist_url
=
`
${
this
.
app
.
config
.
NODE_BASE_URL
}
/cassandra-server/gjj/list/
${
user_id
}
`
;
const
gjj_exist_url
=
`
${
this
.
app
.
config
.
NODE_BASE_URL
}
/cassandra-server/gjj/list/
${
user_id
}
`
;
const
gjj_exist_result
=
await
ctx
.
helper
.
send_request
(
gjj_exist_url
,
{},
{
method
:
'GET'
});
const
gjj_exist_result
=
await
ctx
.
helper
.
send_request
(
gjj_exist_url
,
{},
{
method
:
'GET'
});
ctx
.
logger
.
info
(
JSON
.
stringify
({
user_id
,
gjj_exist_result
}));
ctx
.
logger
.
info
(
JSON
.
stringify
({
gjj_exist_result
}));
if
(
gjj_exist_result
.
status
!==
200
)
{
// 调用公积金接口出错
if
(
gjj_exist_result
.
status
!==
200
)
{
// 调用公积金接口出错
ctx
.
redirect
(
no_login_url
);
return
;
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
}
}
const
gjj_exist_ret
=
gjj_exist_result
.
data
;
const
gjj_exist_ret
=
gjj_exist_result
.
data
;
if
(
!
gjj_exist_ret
.
ret
||
gjj_exist_ret
.
ret
.
length
===
0
)
{
// 没有导入公积金时
if
(
!
gjj_exist_ret
.
ret
||
gjj_exist_ret
.
ret
.
length
===
0
)
{
// 没有导入公积金时
ctx
.
redirect
(
no_login_url
);
return
;
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=noLogin`
);
return
;
}
}
ctx
.
redirect
(
detail_url
);
return
;
// 已导入公积金
ctx
.
redirect
(
redirect_url
+
`?channel_id=
${
channel_id
}
&type=hasLogin`
);
return
;
// 已导入公积金
}
}
// 判断是否有公积金导入并跳转
// async checkGjj() {
// const { ctx } = this;
// const user_id = ctx.userId;
// //判断是否有导入公积金
// console.info(user_id);
// const gjj_exist_url = `${this.app.config.NODE_BASE_URL}/cassandra-server/gjj/list/${user_id}`;
// const gjj_exist_result = await ctx.helper.send_request(gjj_exist_url, {}, { method: 'GET' });
// ctx.logger.info(JSON.stringify({ gjj_exist_result: gjj_exist_result }));
// if (gjj_exist_result.status !== 200) {
// ctx.redirect(NO_GJJ_PAGE); return;
// }
// ctx.redirect(GJJ_DETAIL_PAGE); return;
// }
async
checkLogin
()
{
async
checkLogin
()
{
const
{
ctx
}
=
this
;
const
{
ctx
}
=
this
;
...
@@ -84,7 +101,7 @@ class WechatController extends Controller {
...
@@ -84,7 +101,7 @@ class WechatController extends Controller {
if
(
user_id
)
{
if
(
user_id
)
{
is_login
=
true
;
is_login
=
true
;
}
}
// const phone = await ctx.helper.getPhoneCity('15968762898');
ctx
.
success
({
result
:
is_login
});
ctx
.
success
({
result
:
is_login
});
}
}
...
@@ -106,13 +123,12 @@ class WechatController extends Controller {
...
@@ -106,13 +123,12 @@ class WechatController extends Controller {
ctx
.
failed
(
'渠道未关联APPID'
);
ctx
.
failed
(
'渠道未关联APPID'
);
}
}
const
device_login_params
=
{
// 设备登录的参数
const
device_login_params
=
{
past_deviceno
,
past_deviceno
,
channel_id
:
app_channel_info
.
channel_id
,
channel_id
:
app_channel_info
.
channel_id
,
app_id
:
app_channel_info
.
app_id
,
app_id
:
app_channel_info
.
app_id
,
device_info
:
{},
device_info
:
{},
};
};
// 设备登录
const
result_device_login
=
await
ctx
.
helper
.
send_request
(
this
.
config
.
NODE_URL
+
'/login/device'
,
device_login_params
,
{
method
:
'POST'
});
// 设备登录
const
result_device_login
=
await
ctx
.
helper
.
send_request
(
this
.
config
.
NODE_URL
+
'/login/device'
,
device_login_params
,
{
method
:
'POST'
});
// 设备登录
const
device_login_data
=
result_device_login
.
data
;
// 设备登录返回结果
const
device_login_data
=
result_device_login
.
data
;
// 设备登录返回结果
if
(
!
device_login_data
||
Object
.
keys
(
device_login_data
).
length
===
0
)
{
if
(
!
device_login_data
||
Object
.
keys
(
device_login_data
).
length
===
0
)
{
...
@@ -140,13 +156,16 @@ class WechatController extends Controller {
...
@@ -140,13 +156,16 @@ class WechatController extends Controller {
openid
:
openid
||
''
,
// 例如微信公众号的openid(不传默认是51查个税)
openid
:
openid
||
''
,
// 例如微信公众号的openid(不传默认是51查个税)
};
};
const
result_user_login
=
await
ctx
.
helper
.
send_request
(
this
.
config
.
NODE_URL
+
'/login/user'
,
user_login_params
,
{
method
:
'POST'
});
// 用户登录
const
result_user_login
=
await
ctx
.
helper
.
send_request
(
this
.
config
.
NODE_URL
+
'/login/user'
,
user_login_params
,
{
method
:
'POST'
});
// 用户登录
ctx
.
logger
.
info
(
JSON
.
stringify
({
user_
ologin_params
:
user_login_params
,
result_user_ologin
:
result_user_login
}));
ctx
.
logger
.
info
(
JSON
.
stringify
({
user_
login_params
,
result_user_login
}));
const
user_login_data
=
result_user_login
.
data
;
// 用户登录返回结果
const
user_login_data
=
result_user_login
.
data
;
// 用户登录返回结果
if
(
!
user_login_data
||
Object
.
keys
(
user_login_data
).
length
===
0
)
{
if
(
!
user_login_data
||
Object
.
keys
(
user_login_data
).
length
===
0
)
{
ctx
.
failed
(
'用户的登录失败'
);
ctx
.
failed
(
'用户的登录失败'
);
}
}
if
(
!
user_login_data
.
token
||
!
user_login_data
.
uid
||
!
user_login_data
.
app_user_id
)
{
if
(
!
user_login_data
.
token
||
!
user_login_data
.
uid
)
{
const
error_msg
=
user_login_data
.
error
?
user_login_data
.
error
:
'用户的openid登录失败'
;
const
error_msg
=
user_login_data
.
error
?
user_login_data
.
error
:
'用户的登录失败'
;
if
(
error_msg
===
'需要重新授权'
)
{
return
{
anew
:
1
};
}
ctx
.
failed
(
error_msg
);
ctx
.
failed
(
error_msg
);
}
}
// 获取用户信息
// 获取用户信息
...
@@ -163,7 +182,6 @@ class WechatController extends Controller {
...
@@ -163,7 +182,6 @@ class WechatController extends Controller {
auth_token
=
ctx
.
helper
.
md5
(
String
(
old_user_sid
)
+
moment
(
new
Date
()).
format
(
'MDYYYY'
)
+
'f74jkdsy83sjf'
,
'utf8'
);
auth_token
=
ctx
.
helper
.
md5
(
String
(
old_user_sid
)
+
moment
(
new
Date
()).
format
(
'MDYYYY'
)
+
'f74jkdsy83sjf'
,
'utf8'
);
}
}
// 需要存cookie的用户信息
const
user_info
=
{
const
user_info
=
{
token
:
login_token
,
token
:
login_token
,
app_user_id
,
app_user_id
,
...
@@ -175,7 +193,7 @@ class WechatController extends Controller {
...
@@ -175,7 +193,7 @@ class WechatController extends Controller {
jianbing_customer_id
:
old_user_sid
,
jianbing_customer_id
:
old_user_sid
,
auth_token
,
auth_token
,
};
};
for
(
const
key
in
user_info
)
{
// 保存cookie
for
(
const
key
in
user_info
)
{
const
value
=
user_info
[
key
];
const
value
=
user_info
[
key
];
ctx
.
cookies
.
set
(
key
,
value
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
ctx
.
cookies
.
set
(
key
,
value
,
{
httpOnly
:
false
,
signed
:
false
,
path
:
'/'
,
overwrite
:
true
});
}
}
...
...
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