Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EduSpider
Project
Project
Details
Activity
Releases
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
viitto
EduSpider
Commits
6192d280
Commit
6192d280
authored
May 26, 2022
by
liudong1993
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
6eba9fa4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1943 additions
and
13 deletions
+1943
-13
CacheKey.cs
EduSpider.Cache/CacheKey.cs
+14
-0
EduSpider.Cache.csproj
EduSpider.Cache/EduSpider.Cache.csproj
+19
-0
UserReidsCache.cs
EduSpider.Cache/User/UserReidsCache.cs
+163
-0
IAccountService.cs
EduSpider.IServices/IAccountService.cs
+19
-0
UserInfo.cs
EduSpider.Model/CacheModel/UserInfo.cs
+52
-0
RB_Account.cs
EduSpider.Model/Entity/RB_Account.cs
+4
-3
RB_Account_Extend.cs
EduSpider.Model/Extend/RB_Account_Extend.cs
+5
-0
AccountRepository.cs
EduSpider.Repository/AccountRepository.cs
+5
-5
AccountService.cs
EduSpider.Services/AccountService.cs
+58
-0
TokenUserInfo.cs
EduSpider.Utility/API/TokenUserInfo.cs
+26
-0
Config.cs
EduSpider.Utility/Config.cs
+198
-0
EduSpider.Utility.csproj
EduSpider.Utility/EduSpider.Utility.csproj
+2
-0
AccountTypeEnum.cs
EduSpider.Utility/Enum/AccountTypeEnum.cs
+22
-0
ApiRequestFromEnum.cs
EduSpider.Utility/Enum/ApiRequestFromEnum.cs
+22
-0
DateStateEnum.cs
EduSpider.Utility/Enum/DateStateEnum.cs
+22
-0
HttpHelper.cs
EduSpider.Utility/HttpHelper.cs
+82
-1
EncryptionHelper.cs
EduSpider.Utility/Plugin/EncryptionHelper.cs
+720
-0
WeChatHelper.cs
EduSpider.Utility/Plugin/WeChatHelper.cs
+195
-0
LoginController.cs
EduSpider.WebApi/Controllers/User/LoginController.cs
+299
-0
EduSpider.WebApi.csproj
EduSpider.WebApi/EduSpider.WebApi.csproj
+3
-1
appsettings.json
EduSpider.WebApi/appsettings.json
+9
-1
EduSpider.sln
EduSpider.sln
+2
-0
StudentManager.cs
EduSpider/Spiders/ClassInRule/StudentManager.cs
+1
-1
TeacherManager.cs
EduSpider/Spiders/ClassInRule/TeacherManager.cs
+1
-1
No files found.
EduSpider.Cache/CacheKey.cs
0 → 100644
View file @
6192d280
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
EduSpider.Cache
{
public
class
CacheKey
{
/// <summary>
/// 用户登录缓存Key
/// </summary>
public
static
string
User_Login_Key
=
"JJSW_Login_"
;
}
}
EduSpider.Cache/EduSpider.Cache.csproj
0 → 100644
View file @
6192d280
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="StackExchange.Redis" Version="2.0.601" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EduSpider.Model\EduSpider.Model.csproj" />
<ProjectReference Include="..\EduSpider.Repository\EduSpider.Repository.csproj" />
</ItemGroup>
</Project>
EduSpider.Cache/User/UserReidsCache.cs
0 → 100644
View file @
6192d280
using
EduSpider.Model.Cache
;
using
EduSpider.Repository
;
using
EduSpider.Utility
;
using
EduSpider.Utility.Enum
;
using
System
;
using
System.Linq
;
using
VTX.FW.Helper
;
using
VTX.FW.Api
;
using
VTX.FW.Cache
;
namespace
EduSpider.Cache.User
{
/// <summary>
/// redis缓存
/// </summary>
public
class
UserReidsCache
{
readonly
static
RedisCache
redis
=
new
(
new
RedisConfig
{
DbNum
=
3
,
RedisServer
=
ConfigHelper
.
GetAppsettings
(
"RedisSetting"
,
"RedisServer"
),
RedisPort
=
Convert
.
ToInt32
(
ConfigHelper
.
GetAppsettings
(
"RedisSetting"
,
"RedisPort"
)),
RedisPwd
=
ConfigHelper
.
GetAppsettings
(
"RedisSetting"
,
"RedisPwd"
)
});
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="model"></param>
public
static
void
UserInfoSet
(
string
cacheKey
,
UserInfo
model
,
int
JwtExpirTime
)
{
try
{
TimeSpan
ts
=
GetExpirTime
(
JwtExpirTime
);
redis
.
StringSet
<
UserInfo
>(
cacheKey
,
model
,
ts
);
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
"UserInfoSet"
,
"缓存设置失败"
,
ex
);
}
}
/// <summary>
/// 获取缓存时长
/// </summary>
/// <param name="JwtExpirTime"></param>
/// <returns></returns>
private
static
TimeSpan
GetExpirTime
(
int
JwtExpirTime
)
{
DateTime
dt
=
DateTime
.
Now
;
DateTime
dt2
=
DateTime
.
Now
;
TimeSpan
ts
=
dt
.
AddSeconds
(
JwtExpirTime
)
-
dt2
;
return
ts
;
}
/// <summary>
/// 判断key是否存在
/// </summary>
/// <param name="cacheKey"></param>
/// <returns></returns>
public
static
bool
Exists
(
string
cacheKey
)
{
return
redis
.
KeyExists
(
cacheKey
);
}
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="Data"></param>
/// <param name="JwtExpirTime"></param>
public
static
void
Set
(
string
cacheKey
,
object
Data
,
int
JwtExpirTime
)
{
try
{
TimeSpan
ts
=
GetExpirTime
(
JwtExpirTime
);
redis
.
StringSet
(
cacheKey
,
Data
,
ts
);
}
catch
(
Exception
)
{
}
}
/// <summary>
/// 获取缓存
/// </summary>
/// <param name="cacheKey"></param>
public
static
object
Get
(
string
cacheKey
)
{
try
{
object
info
=
redis
.
StringGet
<
object
>(
cacheKey
);
return
info
;
}
catch
(
Exception
)
{
return
""
;
}
}
/// <summary>
/// 账号仓储层对象
/// </summary>
private
static
readonly
AccountRepository
accountRepository
=
new
();
/// <summary>
/// 获取用户登录信息
/// </summary>
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns>
public
static
UserInfo
GetUserLoginInfo
(
object
Id
,
ApiRequestFromEnum
apiRequestFromEnum
=
ApiRequestFromEnum
.
MiniProgram
)
{
UserInfo
userInfo
=
null
;
if
(
Id
!=
null
)
{
string
cacheKey
=
CacheKey
.
User_Login_Key
+
Id
.
ToString
();
try
{
userInfo
=
redis
.
StringGet
<
UserInfo
>(
cacheKey
);
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
"GetUserLoginInfo"
,
"获取缓存失败"
,
ex
);
}
if
(
userInfo
==
null
)
{
Int32
.
TryParse
(
Id
.
ToString
(),
out
int
NewId
);
if
(
NewId
>
0
)
{
string
token
=
""
;
var
model
=
accountRepository
.
GetAccountList
(
new
Model
.
Extend
.
RB_Account_Extend
()
{
Id
=
NewId
})?.
FirstOrDefault
();
if
(
model
!=
null
)
{
userInfo
=
new
UserInfo
{
Id
=
model
.
Id
,
AccountType
=
model
.
AccountType
,
AccountName
=
model
.
AccountName
,
Token
=
token
,
ApiRequestFromEnum
=
apiRequestFromEnum
,
AccountId
=
model
.
AccountId
,
UserMobile
=
model
.
Account
,
UserIcon
=
model
.
UserIcon
,
};
UserInfoSet
(
CacheKey
.
User_Login_Key
+
Id
.
ToString
(),
userInfo
,
Config
.
JwtExpirTime
);
}
}
}
}
else
{
userInfo
=
new
UserInfo
();
}
return
userInfo
;
}
}
}
\ No newline at end of file
EduSpider.IServices/IAccountService.cs
0 → 100644
View file @
6192d280
using
EduSpider.Model.Extend
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Config
;
namespace
EduSpider.IServices
{
/// <summary>
/// 账号服务层接口
/// </summary>
public
interface
IAccountService
:
IDependency
{
List
<
RB_Account_Extend
>
GetAccountList
(
RB_Account_Extend
demodel
);
bool
UpdateAccountUnionId
(
RB_Account_Extend
model
);
}
}
EduSpider.Model/CacheModel/UserInfo.cs
0 → 100644
View file @
6192d280
using
EduSpider.Utility.Enum
;
using
System.Collections.Generic
;
namespace
EduSpider.Model.Cache
{
/// <summary>
/// 用户缓存
/// </summary>
public
class
UserInfo
{
/// <summary>
/// 账号编号
/// </summary>
public
int
Id
{
get
;
set
;
}
/// <summary>
/// 账号名称
/// </summary>
public
string
AccountName
{
get
;
set
;
}
/// <summary>
/// 请求来源
/// </summary>
public
ApiRequestFromEnum
ApiRequestFromEnum
{
get
;
set
;
}
/// <summary>
/// 账号类型(1-管理端,2,-教师端,3-助教,4-学生)
/// </summary>
public
AccountTypeEnum
AccountType
{
get
;
set
;
}
/// <summary>
/// 对应的账户id
/// </summary>
public
int
AccountId
{
get
;
set
;
}
/// <summary>
/// Token验证
/// </summary>
public
string
Token
{
get
;
set
;
}
/// <summary>
/// 用户头像
/// </summary>
public
string
UserIcon
{
get
;
set
;
}
/// <summary>
/// 用户手机号码
/// </summary>
public
string
UserMobile
{
get
;
set
;
}
}
}
\ No newline at end of file
EduSpider.Model/Entity/RB_Account.cs
View file @
6192d280
using
System
;
using
EduSpider.Utility.Enum
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
...
...
@@ -29,7 +30,7 @@ namespace EduSpider.Model.Entity
/// <summary>
/// 类型 1老师 2学生
/// </summary>
public
int
AccountType
{
get
;
set
;
}
public
AccountTypeEnum
AccountType
{
get
;
set
;
}
/// <summary>
/// 对应 老师/学生ID
...
...
@@ -39,7 +40,7 @@ namespace EduSpider.Model.Entity
/// <summary>
/// 删除状态
/// </summary>
public
int
Status
{
get
;
set
;
}
public
DateStateEnum
Status
{
get
;
set
;
}
/// <summary>
/// 微信唯一识别码
...
...
EduSpider.Model/Extend/RB_Account_Extend.cs
View file @
6192d280
...
...
@@ -16,5 +16,10 @@ namespace EduSpider.Model.Extend
/// 帐号名称
/// </summary>
public
string
AccountName
{
get
;
set
;
}
/// <summary>
/// 用户头像
/// </summary>
public
string
UserIcon
{
get
;
set
;
}
}
}
EduSpider.Repository/AccountRepository.cs
View file @
6192d280
...
...
@@ -38,15 +38,15 @@ namespace EduSpider.Repository
}
if
(
demodel
.
AccountType
>
0
)
{
where
+=
$" and t.
{
nameof
(
RB_Account_Extend
.
AccountType
)}
=
{
demodel
.
AccountType
}
"
;
where
+=
$" and t.
{
nameof
(
RB_Account_Extend
.
AccountType
)}
=
{
(
int
)
demodel
.
AccountType
}
"
;
}
if
(
demodel
.
AccountId
>
0
)
{
where
+=
$" and t.
{
nameof
(
RB_Account_Extend
.
AccountId
)}
=
{
demodel
.
AccountId
}
"
;
}
if
(
demodel
.
Status
>
-
1
)
if
(
demodel
.
Status
>
=
0
)
{
where
+=
$" and t.
{
nameof
(
RB_Account_Extend
.
Status
)}
=
{
demodel
.
Status
}
"
;
where
+=
$" and t.
{
nameof
(
RB_Account_Extend
.
Status
)}
=
{
(
int
)
demodel
.
Status
}
"
;
}
if
(!
string
.
IsNullOrEmpty
(
demodel
.
Account
))
{
...
...
@@ -59,10 +59,10 @@ namespace EduSpider.Repository
string
sql
=
$@"
select * from(
SELECT a.Id,a.Account,a.`Password`,a.AccountType,a.AccountId,t.TeacherName AS AccountName,a.Status FROM rb_account a
SELECT a.Id,a.Account,a.`Password`,a.AccountType,a.AccountId,t.TeacherName AS AccountName,
t.Logo as UserIcon,
a.Status FROM rb_account a
INNER JOIN rb_teacher t on a.AccountId =t.TeacherId and a.AccountType =1
UNION
SELECT a.Id,a.Account,a.`Password`,a.AccountType,a.AccountId,s.StudentName AS AccountName,a.Status FROM rb_account a
SELECT a.Id,a.Account,a.`Password`,a.AccountType,a.AccountId,s.StudentName AS AccountName,
'' as UserIcon,
a.Status FROM rb_account a
INNER JOIN rb_student s on a.AccountId =s.StudId and a.AccountType =2
) t where
{
where
}
"
;
...
...
EduSpider.Services/AccountService.cs
0 → 100644
View file @
6192d280
using
EduSpider.IServices
;
using
EduSpider.Model.Extend
;
using
EduSpider.Repository
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
VTX.FW.Attr
;
using
VTX.FW.DB
;
namespace
EduSpider.Services
{
/// <summary>
/// 账号服务实现
/// </summary>
public
class
AccountService
:
IAccountService
{
/// <summary>
/// 帐号仓储接口
/// </summary>
[
Autowired
]
public
IAccountRepository
accountRepository
{
get
;
set
;
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public
List
<
RB_Account_Extend
>
GetAccountList
(
RB_Account_Extend
demodel
)
{
return
accountRepository
.
GetAccountList
(
demodel
);
}
/// <summary>
/// 更新微信信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public
bool
UpdateAccountUnionId
(
RB_Account_Extend
model
)
{
Dictionary
<
string
,
object
>
keyValues
=
new
()
{
{
nameof
(
RB_Account_Extend
.
OpenId
),
model
.
OpenId
},
{
nameof
(
RB_Account_Extend
.
UnionId
),
model
.
UnionId
},
};
List
<
WhereHelper
>
wheres
=
new
()
{
new
WhereHelper
(){
FiledName
=
nameof
(
RB_Account_Extend
.
Id
),
FiledValue
=
model
.
Id
,
OperatorEnum
=
OperatorEnum
.
Equal
}
};
return
accountRepository
.
Update
(
keyValues
,
wheres
);
}
}
}
EduSpider.Utility/API/TokenUserInfo.cs
0 → 100644
View file @
6192d280
using
EduSpider.Utility.Enum
;
using
System
;
namespace
EduSpider.Utility.API
{
/// <summary>
/// API请求token携带的用户信息
/// </summary>
public
class
TokenUserInfo
{
/// <summary>
/// 用户ID
/// </summary>
public
string
uid
{
get
;
set
;
}
/// <summary>
/// 请求消息
/// </summary>
public
ApiRequestFromEnum
requestFrom
{
get
;
set
;
}
/// <summary>
/// 集团编号
/// </summary>
public
int
groupId
{
get
;
set
;
}
}
}
EduSpider.Utility/Config.cs
0 → 100644
View file @
6192d280
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.Configuration.Json
;
using
System
;
using
System.IO
;
using
System.Text.RegularExpressions
;
using
VTX.FW.Helper
;
namespace
EduSpider.Utility
{
/// <summary>
/// 全局配置
/// </summary>
public
class
Config
{
/// <summary>
/// 配置文件注入
/// </summary>
public
readonly
static
IConfiguration
Configuration
;
static
Config
()
{
try
{
Configuration
=
new
ConfigurationBuilder
()
.
Add
(
new
JsonConfigurationSource
{
Path
=
"appsettings.json"
,
ReloadOnChange
=
true
})
.
Build
();
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
"Config"
,
"获取配置文件"
,
ex
);
}
}
/// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public
static
string
GetConnectionString
(
string
key
)
{
try
{
return
Configuration
.
GetConnectionString
(
key
);
}
catch
{
return
""
;
}
}
/// <summary>
/// 读取配置文件key的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public
static
string
ReadConfigKey
(
string
key
,
string
subKey
=
""
)
{
string
valueStr
=
""
;
try
{
if
(!
string
.
IsNullOrWhiteSpace
(
subKey
))
{
valueStr
=
Configuration
.
GetSection
(
key
)[
subKey
].
ToString
();
}
else
{
valueStr
=
Configuration
.
GetSection
(
key
).
Value
;
}
}
catch
{
}
return
valueStr
;
}
/// <summary>
/// 异常日志保存路径
/// </summary>
public
static
string
LogPath
{
get
{
string
logPath
=
Path
.
Combine
(
AppDomain
.
CurrentDomain
.
BaseDirectory
,
"log/error"
);
return
logPath
.
ToString
();
}
}
/// <summary>
/// 打印日志保存路径
/// </summary>
public
static
string
InofLogPath
{
get
{
string
logPath
=
Path
.
Combine
(
AppDomain
.
CurrentDomain
.
BaseDirectory
,
"log/info"
);
return
logPath
.
ToString
();
}
}
/// <summary>
/// 接口请求日志保存路径
/// </summary>
public
static
string
RequestLogPath
{
get
{
string
logPath
=
Path
.
Combine
(
AppDomain
.
CurrentDomain
.
BaseDirectory
,
"log/request"
);
return
logPath
.
ToString
();
}
}
/// <summary>
/// JWT加密秘钥
/// </summary>
public
static
string
JwtSecretKey
{
get
{
return
ReadConfigKey
(
"JwtSecretKey"
);
}
}
/// <summary>
/// 过期时间,单位为秒
/// </summary>
public
static
int
JwtExpirTime
{
get
{
Int32
.
TryParse
(
ReadConfigKey
(
"JwtExpirTime"
),
out
int
JwtExpirTime
);
return
JwtExpirTime
;
}
}
/// <summary>
/// 获取文件相对路径
/// </summary>
public
static
string
GetFilePath
(
string
path
)
{
if
(!
string
.
IsNullOrWhiteSpace
(
path
))
{
string
p
=
@"(http|https)://(?<domain>[^(:|/]*)"
;
Regex
reg
=
new
Regex
(
p
,
RegexOptions
.
IgnoreCase
);
string
value
=
reg
.
Match
(
path
).
Value
;
if
(!
string
.
IsNullOrEmpty
(
value
))
{
Uri
url
=
new
Uri
(
path
);
return
url
.
AbsolutePath
;
}
else
{
return
path
;
}
}
else
{
return
path
;
}
}
/// <summary>
/// 甲鹤小程序AppId
/// </summary>
public
static
string
AppID
{
get
{
return
"wx38e054ee42b054f4"
;
}
}
/// <summary>
/// 甲鹤小程序AppSecret
/// </summary>
public
static
string
AppSecret
{
get
{
return
"d3ad4699265ba885ae2c8b65bf574ea5"
;
}
}
/// <summary>
/// 微信小程序Api地址
/// </summary>
public
static
string
WechatApi
{
get
{
return
"https://api.weixin.qq.com/"
;
}
}
/// <summary>
/// 是否是本地服务器
/// </summary>
public
static
int
IsLocal
{
get
{
Int32
.
TryParse
(
ReadConfigKey
(
"IsLocal"
),
out
int
_IsLocal
);
return
_IsLocal
;
}
}
}
}
\ No newline at end of file
EduSpider.Utility/EduSpider.Utility.csproj
View file @
6192d280
...
...
@@ -5,6 +5,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="VTX.FW" Version="1.1.0" />
</ItemGroup>
...
...
EduSpider.Utility/Enum/AccountTypeEnum.cs
0 → 100644
View file @
6192d280
using
VTX.FW.Attr
;
namespace
EduSpider.Utility.Enum
{
/// <summary>
/// 账号类型
/// </summary>
public
enum
AccountTypeEnum
{
/// <summary>
/// 老师
/// </summary>
[
EnumField
(
"老师"
)]
Teacher
=
1
,
/// <summary>
/// 学生
/// </summary>
[
EnumField
(
"学生"
)]
Student
=
2
}
}
EduSpider.Utility/Enum/ApiRequestFromEnum.cs
0 → 100644
View file @
6192d280
using
VTX.FW.Attr
;
namespace
EduSpider.Utility.Enum
{
/// <summary>
/// 接口请求来源
/// </summary>
public
enum
ApiRequestFromEnum
{
/// <summary>
/// Web端
/// </summary>
[
EnumField
(
"Web端"
)]
Web
=
1
,
/// <summary>
/// 小程序
/// </summary>
[
EnumField
(
"小程序"
)]
MiniProgram
=
2
,
}
}
\ No newline at end of file
EduSpider.Utility/Enum/DateStateEnum.cs
0 → 100644
View file @
6192d280
using
VTX.FW.Attr
;
namespace
EduSpider.Utility.Enum
{
/// <summary>
/// 数据状态
/// </summary>
public
enum
DateStateEnum
{
/// <summary>
/// 正常
/// </summary>
[
EnumField
(
"正常"
)]
Normal
=
0
,
/// <summary>
/// 已删除
/// </summary>
[
EnumField
(
"已删除"
)]
Delete
=
1
}
}
\ No newline at end of file
EduSpider.Utility/HttpHelper.cs
View file @
6192d280
using
System
;
using
System.IO
;
using
System.Net
;
using
System.Net.Http
;
using
System.Text
;
using
VTX.FW.Helper
;
namespace
EduSpider.Utility
{
...
...
@@ -76,5 +78,84 @@ namespace EduSpider.Utility
}
return
cc
;
}
/// <summary>
/// Post提交数据
/// </summary>
/// <param name="url">url地址</param>
/// <param name="body">参数</param>
/// <param name="contenttype">参数</param>
/// <returns></returns>
public
static
string
HttpPost
(
string
url
,
string
body
,
string
contenttype
=
""
)
{
try
{
Encoding
encoding
=
Encoding
.
UTF8
;
HttpWebRequest
request
=
(
HttpWebRequest
)
WebRequest
.
Create
(
url
);
request
.
Method
=
"POST"
;
request
.
Accept
=
"application/json, text/javascript, */*"
;
//"text/html, application/xhtml+xml, */*";
request
.
ContentType
=
"application/json; charset=utf-8"
;
if
(
contenttype
!=
""
)
{
request
.
ContentType
=
contenttype
;
}
byte
[]
buffer
=
encoding
.
GetBytes
(
body
);
request
.
ContentLength
=
buffer
.
Length
;
request
.
GetRequestStream
().
Write
(
buffer
,
0
,
buffer
.
Length
);
HttpWebResponse
response
=
(
HttpWebResponse
)
request
.
GetResponse
();
using
StreamReader
reader
=
new
StreamReader
(
response
.
GetResponseStream
(),
encoding
);
return
reader
.
ReadToEnd
();
}
catch
(
WebException
ex
)
{
var
res
=
(
HttpWebResponse
)
ex
.
Response
;
StringBuilder
sb
=
new
StringBuilder
();
StreamReader
sr
=
new
StreamReader
(
res
.
GetResponseStream
(),
Encoding
.
UTF8
);
sb
.
Append
(
sr
.
ReadToEnd
());
throw
new
Exception
(
sb
.
ToString
());
}
}
/// <summary>
/// 执行HTTP GET请求。
/// </summary>
/// <param name="url">请求地址</param>
/// <returns>HTTP响应</returns>
public
static
string
HttpGet
(
string
url
)
{
string
result
=
""
;
HttpWebRequest
req
=
(
HttpWebRequest
)
WebRequest
.
Create
(
url
);
req
.
Method
=
"GET"
;
req
.
ContentType
=
"application/json"
;
HttpWebResponse
rsp
=
(
HttpWebResponse
)
req
.
GetResponse
();
Encoding
encoding
=
Encoding
.
UTF8
;
if
(!
string
.
IsNullOrWhiteSpace
(
rsp
.
CharacterSet
))
{
encoding
=
Encoding
.
GetEncoding
(
rsp
.
CharacterSet
);
}
System
.
IO
.
Stream
stream
=
null
;
StreamReader
reader
=
null
;
try
{
// 以字符流的方式读取HTTP响应
stream
=
rsp
.
GetResponseStream
();
reader
=
new
StreamReader
(
stream
,
encoding
);
result
=
reader
.
ReadToEnd
();
}
catch
(
Exception
ex
)
{
LogHelper
.
WriteError
(
""
,
string
.
Format
(
"HttpGet:url=={0}"
,
url
),
ex
);
result
=
""
;
}
finally
{
// 释放资源
if
(
reader
!=
null
)
reader
.
Close
();
if
(
stream
!=
null
)
stream
.
Close
();
if
(
rsp
!=
null
)
rsp
.
Close
();
}
return
result
;
}
}
}
\ No newline at end of file
EduSpider.Utility/Plugin/EncryptionHelper.cs
0 → 100644
View file @
6192d280
This diff is collapsed.
Click to expand it.
EduSpider.Utility/Plugin/WeChatHelper.cs
0 → 100644
View file @
6192d280
using
Newtonsoft.Json
;
using
Newtonsoft.Json.Linq
;
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Net
;
using
System.Security.Cryptography
;
using
System.Text
;
using
VTX.FW.Helper
;
namespace
EduSpider.Utility
{
/// <summary>
/// 微信帮助类
/// </summary>
public
class
WeChatHelper
{
/// <summary>
/// 获取access_token
/// </summary>
/// <param name="AppID"></param>
/// <param name="AppSecret"></param>
/// <returns></returns>
public
static
string
GetAccessToken
(
string
AppID
,
string
AppSecret
)
{
string
token
=
string
.
Empty
;
try
{
string
wechatapi
=
Config
.
WechatApi
;
string
appID
=
AppID
;
string
appSecret
=
AppSecret
;
//获取微信token
string
token_url
=
wechatapi
+
"cgi-bin/token?grant_type=client_credential&appid="
+
appID
+
"&secret="
+
appSecret
;
HttpWebRequest
myRequest
=
(
HttpWebRequest
)
WebRequest
.
Create
(
token_url
);
//请求方式
myRequest
.
Method
=
"GET"
;
HttpWebResponse
myResponse
=
(
HttpWebResponse
)
myRequest
.
GetResponse
();
StreamReader
reader
=
new
StreamReader
(
myResponse
.
GetResponseStream
(),
Encoding
.
UTF8
);
string
content
=
reader
.
ReadToEnd
();
myResponse
.
Close
();
reader
.
Dispose
();
JObject
jo
=
(
JObject
)
JsonConvert
.
DeserializeObject
(
content
);
token
=
jo
[
"access_token"
].
ToString
();
}
catch
(
Exception
ex
)
{
token
=
""
;
LogHelper
.
WriteError
(
"GetAccessToken"
,
"获取微信token"
,
ex
);
}
return
token
;
}
/// <summary>
/// 获取微信用户OpenId
/// </summary>
/// <param name="AppId"></param>
/// <param name="AppSecret"></param>
/// <param name="Code"></param>
/// <returns></returns>
public
static
result
GetWeChatOpenId
(
string
AppId
,
string
AppSecret
,
string
Code
)
{
// string result = "";
result
userInfo
=
new
result
();
string
resultInfo
=
""
;
try
{
//请求路径
string
url
=
"https://api.weixin.qq.com/sns/jscode2session?appid="
+
AppId
+
"&secret="
+
AppSecret
+
"&js_code="
+
Code
+
"&grant_type=authorization_code"
;
resultInfo
=
HttpHelper
.
HttpGet
(
url
);
if
(
resultInfo
!=
null
&&
!
string
.
IsNullOrEmpty
(
resultInfo
))
{
userInfo
=
JsonConvert
.
DeserializeObject
<
result
>(
resultInfo
);
}
}
catch
(
Exception
ex
)
{
//GetWeChatOpenId:result={"errcode":40163,"errmsg":"code been used, hints: [ req_id: AHGbGiqNe-OhJh.a ]"}&&Code=051S1Ykl2wYCF64U7gnl2AK6ga0S1Yk2
//Code过期
LogHelper
.
WriteError
(
"GetWeChatOpenId"
,
string
.
Format
(
"GetWeChatOpenId:result={0}&&Code={1}"
,
resultInfo
,
Code
),
ex
);
}
return
userInfo
;
}
/// <summary>
/// 获取微信授权手机号码
/// </summary>
/// <param name="encryptedData"></param>
/// <param name="code"></param>
/// <param name="ivStr"></param>
/// <returns></returns>
public
static
result
GetWechatMobile
(
string
encryptedData
,
string
code
,
string
iv
)
{
string
Appid
=
Config
.
AppID
;
var
Secret
=
Config
.
AppSecret
;
string
grant_type
=
"authorization_code"
;
//向微信服务端 使用登录凭证 code 获取 session_key 和 openid
string
url
=
"https://api.weixin.qq.com/sns/jscode2session?appid="
+
Appid
+
"&secret="
+
Secret
+
"&js_code="
+
code
+
"&grant_type="
+
grant_type
;
string
type
=
"utf-8"
;
GetUsersHelper
GetUsersHelper
=
new
GetUsersHelper
();
result
res
=
new
result
();
string
j
=
GetUsersHelper
.
GetUrltoHtml
(
url
,
type
);
//获取微信服务器返回字符串
//将字符串转换为json格式
JObject
jo
=
JObject
.
Parse
(
j
);
//微信服务器验证成功
res
.
openid
=
jo
.
GetString
(
"openid"
);
res
.
session_key
=
jo
.
GetString
(
"session_key"
);
res
.
unionid
=
jo
.
GetString
(
"unionid"
);
if
(!
string
.
IsNullOrWhiteSpace
(
res
.
openid
))
{
if
(!
string
.
IsNullOrEmpty
(
encryptedData
)
&&
!
string
.
IsNullOrEmpty
(
iv
))
{
//解析手机号码
res
.
phoneNumber
=
EncryptionHelper
.
AES_decrypt
(
encryptedData
,
res
.
session_key
,
iv
);
}
}
return
res
;
}
}
/// <summary>
/// 获取用心信息帮助类
/// </summary>
public
class
GetUsersHelper
{
/// <summary>
/// 获取链接返回数据
/// </summary>
/// <param name="Url">链接</param>
/// <param name="type">请求类型</param>
/// <returns></returns>
public
string
GetUrltoHtml
(
string
Url
,
string
type
)
{
try
{
System
.
Net
.
WebRequest
wReq
=
System
.
Net
.
WebRequest
.
Create
(
Url
);
// Get the response instance.
System
.
Net
.
WebResponse
wResp
=
wReq
.
GetResponse
();
System
.
IO
.
Stream
respStream
=
wResp
.
GetResponseStream
();
// Dim reader As StreamReader = New StreamReader(respStream)
using
System.IO.StreamReader
reader
=
new
System
.
IO
.
StreamReader
(
respStream
,
Encoding
.
GetEncoding
(
type
));
return
reader
.
ReadToEnd
();
}
catch
(
System
.
Exception
ex
)
{
return
ex
.
Message
;
}
}
}
/// <summary>
/// 微信小程序验证返回结果
/// </summary>
public
class
result
{
/// <summary>
/// openid
/// </summary>
public
string
openid
{
get
;
set
;
}
/// <summary>
/// openid
/// </summary>
public
string
unionid
{
get
;
set
;
}
/// <summary>
/// session_key
/// </summary>
public
string
session_key
{
get
;
set
;
}
/// <summary>
/// 错误状态码
/// </summary>
public
string
errcode
{
get
;
set
;
}
/// <summary>
/// 错误提示信息
/// </summary>
public
string
errmsg
{
get
;
set
;
}
/// <summary>
/// 电话号码
/// </summary>
public
string
phoneNumber
{
get
;
set
;
}
}
}
\ No newline at end of file
EduSpider.WebApi/Controllers/User/LoginController.cs
0 → 100644
View file @
6192d280
This diff is collapsed.
Click to expand it.
EduSpider.WebApi/EduSpider.WebApi.csproj
View file @
6192d280
...
...
@@ -9,6 +9,7 @@
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.2.0" />
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.1" />
<PackageReference Include="Castle.Core" Version="4.4.0" />
<PackageReference Include="JWT" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
...
...
@@ -16,10 +17,11 @@
<PackageReference Include="SqlSugarCore" Version="5.0.8.3" />
<PackageReference Include="StackExchange.Redis" Version="2.0.601" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
<PackageReference Include="VTX.FW" Version="1.
0
.0" />
<PackageReference Include="VTX.FW" Version="1.
1
.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EduSpider.Cache\EduSpider.Cache.csproj" />
<ProjectReference Include="..\EduSpider.IRepository\EduSpider.IRepository.csproj" />
<ProjectReference Include="..\EduSpider.IServices\EduSpider.IServices.csproj" />
<ProjectReference Include="..\EduSpider.Model\EduSpider.Model.csproj" />
...
...
EduSpider.WebApi/appsettings.json
View file @
6192d280
...
...
@@ -25,5 +25,13 @@
"ConnectionStrings"
:
{
"DefaultConnection"
:
"server=192.168.10.214;user id=reborn;password=Reborn@2018;database=reborn_think;CharSet=utf8mb4; Convert Zero Datetime=true; "
,
"DefaultConnectionPName"
:
"MySql.Data.MySqlClient"
}
},
"JwtSecretKey"
:
"@VIITTOREBORN*2022"
,
"JwtExpirTime"
:
2592000
,
"RedisSetting"
:
{
"RedisServer"
:
"47.96.23.199"
,
"RedisPort"
:
"6379"
,
"RedisPwd"
:
"Viitto2018"
},
"IsLocal"
:
1
}
EduSpider.sln
View file @
6192d280
...
...
@@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EduSpider.Utility", "EduSpi
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EduSpider", "EduSpider\EduSpider.csproj", "{DAC5E8C6-98DF-4B33-9E2C-452DDE54A5FA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EduSpider.Cache", "EduSpider.Cache\EduSpider.Cache.csproj", "{6D059BFB-A071-4856-A35D-38EB893FED74}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
...
...
EduSpider/Spiders/ClassInRule/StudentManager.cs
View file @
6192d280
...
...
@@ -87,7 +87,7 @@ namespace EduSpider.Spiders.ClassInRule
Id
=
item
.
StudentUid
,
Account
=
item
.
StudentAccount
,
AccountId
=
item
.
StudId
,
AccountType
=
2
,
AccountType
=
Utility
.
Enum
.
AccountTypeEnum
.
Student
,
OpenId
=
""
,
Password
=
Utility
.
DES
.
Encrypt
(
item
.
StudentAccount
[^
6.
.]),
Status
=
0
,
...
...
EduSpider/Spiders/ClassInRule/TeacherManager.cs
View file @
6192d280
...
...
@@ -86,7 +86,7 @@ namespace EduSpider.Spiders.ClassInRule
Id
=
item
.
TeacherUid
,
Account
=
item
.
TeacherAccount
,
AccountId
=
item
.
TeacherId
,
AccountType
=
1
,
AccountType
=
AccountTypeEnum
.
Teacher
,
OpenId
=
""
,
Password
=
Utility
.
DES
.
Encrypt
(
item
.
TeacherAccount
[^
6.
.]),
Status
=
0
,
...
...
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