Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
WeComApi
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
changjin.pan
WeComApi
Commits
a22b8086
Commit
a22b8086
authored
Jun 21, 2022
by
姚传斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交更新
parent
eb2e0621
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
74 additions
and
10 deletions
+74
-10
SigerWeComThirdService.cs
src/Siger.WeComApi.Biz/service/SigerWeComThirdService.cs
+53
-7
ISigerWeComThirdService.cs
src/Siger.WeComApi.Core/Biz/ISigerWeComThirdService.cs
+2
-0
CallbackController.cs
src/Siger.WeComApi.WebApi/Controllers/CallbackController.cs
+19
-3
No files found.
src/Siger.WeComApi.Biz/service/SigerWeComThirdService.cs
View file @
a22b8086
...
...
@@ -55,6 +55,9 @@ namespace Siger.WeComApi.Biz.service
//在1秒内响应GET请求,响应内容为上一步得到的明文消息内容decryptEchoString(不能加引号,不能带bom头,不能带换行符)
string
echostr
=
request
.
Query
[
"echostr"
];
//加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文
_logger
.
Info
(
$"数据回调URL验证开始:Token:
{
Token
}
,CorpID:
{
CorpID
}
,EncodingAESKey:
{
EncodingAESKey
}
,signature:
{
signature
}
,timestamp:
{
timestamp
}
,nonce:
{
nonce
}
,echostr:
{
echostr
}
"
);
if
(!
string
.
IsNullOrEmpty
(
signature
)
&&
!
string
.
IsNullOrEmpty
(
timestamp
)
&&
!
string
.
IsNullOrEmpty
(
nonce
)
&&
!
string
.
IsNullOrEmpty
(
echostr
))
{
string
decryptEchoString
=
null
;
...
...
@@ -108,6 +111,9 @@ namespace Siger.WeComApi.Biz.service
{
string
responseContent
=
""
;
string
postString
=
GetXMLParameters
(
request
);
//xml数据解析
_logger
.
Info
(
$"指令回调:
{
postString
}
"
);
if
(
string
.
IsNullOrEmpty
(
postString
))
{
responseContent
=
"响应失败,未获取到xml中的请求参数"
;
...
...
@@ -129,7 +135,9 @@ namespace Siger.WeComApi.Biz.service
string
signature
=
request
.
Query
[
"msg_signature"
];
//微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
string
timestamp
=
request
.
Query
[
"timestamp"
];
//时间戳
string
nonce
=
request
.
Query
[
"nonce"
];
//随机数
_logger
.
Info
(
$"WXBizMsgCrypt-DecryptMsg:Token:
{
Token
}
,CorpID:
{
CorpID
}
,EncodingAESKey:
{
EncodingAESKey
}
,signature:
{
signature
}
,timestamp:
{
timestamp
}
,nonce:
{
nonce
}
"
);
WXBizMsgCrypt
crypt
=
new
WXBizMsgCrypt
(
Token
,
EncodingAESKey
,
xmlDoc
.
Root
.
Element
(
"ToUserName"
).
Value
);
var
result
=
crypt
.
DecryptMsg
(
signature
,
timestamp
,
nonce
,
postString
,
ref
decryptionParame
);
if
(
result
!=
0
)
...
...
@@ -137,6 +145,8 @@ namespace Siger.WeComApi.Biz.service
return
"fail"
;
}
_logger
.
Info
(
$"WXBizMsgCrypt-DecryptMsg-decryptionParame:
{
decryptionParame
}
"
);
//解密后的数据 囊括了身份信息 验证信息
WeComThirdHelper
weComThirdHelper
=
new
WeComThirdHelper
();
var
decryptInfo
=
XDocument
.
Parse
(
decryptionParame
);
...
...
@@ -148,11 +158,17 @@ namespace Siger.WeComApi.Biz.service
case
"suite_ticket"
:
string
suitTicket
=
decryptInfo
.
Root
.
Element
(
"SuiteTicket"
).
Value
;
weComThirdHelper
.
SetSuitTicket
(
suitTicket
);
_logger
.
Info
(
$"InstructCallback-suite_ticket:
{
suitTicket
}
"
);
break
;
case
"create_auth"
:
//从企业微信应用市场发起授权时,企业微信后台会推送授权成功通知
//获取auth_code 临时授权码
string
authCode
=
decryptInfo
.
Root
.
Element
(
"AuthCode"
).
Value
;
_logger
.
Info
(
$"InstructCallback-authCode:
{
authCode
}
"
);
GetPermentCode
(
authCode
);
break
;
case
"change_auth"
:
...
...
@@ -184,7 +200,11 @@ namespace Siger.WeComApi.Biz.service
JObject
postJson
=
new
JObject
();
postJson
[
"auth_code"
]
=
authCode
;
var
suitAccessToken
=
weComThirdHelper
.
GetSuiteAccessToken
();
_logger
.
Info
(
$"获取第三方应用凭证:
{
suitAccessToken
}
"
);
string
pUrl
=
weComThirdHelper
.
GetPermanentCodeUrl
()
+
suitAccessToken
;
_logger
.
Info
(
$"开始获取授权的客户企业:pUrl:
{
pUrl
}
,postJson:
{
postJson
}
"
);
string
corpInfo
=
weComThirdHelper
.
post
(
pUrl
+
""
,
postJson
);
//将授权的客户企业存入数据库
InsertWeComCompany
(
corpInfo
);
...
...
@@ -209,6 +229,8 @@ namespace Siger.WeComApi.Biz.service
//区分普通消息与第三方应用授权推送消息,MsgType有值说明是普通消息,反之则是第三方应用授权推送消息
if
(
xmlDoc
.
Root
.
Element
(
"MsgType"
)
!=
null
)
{
_logger
.
Info
(
$"ReceiveResponse-MsgType:
{
xmlDoc
.
Root
.
Element
(
"MsgType"
).
Value
}
"
);
var
msgType
=
(
ResponseMsgType
)
Enum
.
Parse
(
typeof
(
ResponseMsgType
),
xmlDoc
.
Root
.
Element
(
"MsgType"
).
Value
,
true
);
switch
(
msgType
)
{
...
...
@@ -231,6 +253,7 @@ namespace Siger.WeComApi.Biz.service
}
else
if
(
xmlDoc
.
Root
.
Element
(
"InfoType"
)
!=
null
)
{
_logger
.
Info
(
$"ReceiveResponse-InfoType:
{
xmlDoc
.
Root
.
Element
(
"InfoType"
).
Value
}
"
);
//第三方回调
var
infoType
=
(
ResponseInfoType
)
Enum
.
Parse
(
typeof
(
ResponseInfoType
),
xmlDoc
.
Root
.
Element
(
"InfoType"
).
Value
,
true
);
...
...
@@ -246,6 +269,7 @@ namespace Siger.WeComApi.Biz.service
else
{
//其他情况
_logger
.
Info
(
$"ReceiveResponse-Root:
{
xmlDoc
.
Root
.
Value
}
"
);
}
// result==0表示解密成功,sMsg表示解密之后的明文xml串
...
...
@@ -353,14 +377,27 @@ namespace Siger.WeComApi.Biz.service
if
(
corpJson
[
"errcode"
]
!=
null
)
{
string
errorMsg
=
string
.
Format
(
"获取企业信息及永久授权码失败:errcode{0},errmsg{1}"
,
corpJson
[
"errcode"
],
corpJson
[
"errmsg"
]);
_logger
.
Info
(
errorMsg
);
throw
new
Exception
(
errorMsg
);
}
var
authCorpInfo
=
corpJson
[
"auth_corp_info"
].
ToString
();
siger_wecom_company
company
=
JsonConvert
.
DeserializeObject
<
siger_wecom_company
>(
authCorpInfo
);
//赋值永久授权码permanent_code
var
permanentCode
=
corpJson
[
"permanent_code"
].
ToString
();
company
.
permanent_code
=
permanentCode
;
return
_sigerWeComCompanyRepository
.
AddSigerWeComCompany
(
company
);
try
{
var
authCorpInfo
=
corpJson
[
"auth_corp_info"
].
ToString
();
siger_wecom_company
company
=
JsonConvert
.
DeserializeObject
<
siger_wecom_company
>(
authCorpInfo
);
//赋值永久授权码permanent_code
var
permanentCode
=
corpJson
[
"permanent_code"
].
ToString
();
company
.
permanent_code
=
permanentCode
;
_logger
.
Info
(
$"赋值永久授权码permanent_code成功"
);
return
_sigerWeComCompanyRepository
.
AddSigerWeComCompany
(
company
);
}
catch
(
Exception
ex
)
{
_logger
.
Info
(
$"赋值永久授权码permanent_code失败:
{
ex
.
Message
}
"
);
throw
ex
;
}
}
...
...
@@ -410,5 +447,14 @@ namespace Siger.WeComApi.Biz.service
}
}
public
string
Test
(
string
decryptionParame
)
{
WeComThirdHelper
weComThirdHelper
=
new
WeComThirdHelper
();
var
decryptInfo
=
XDocument
.
Parse
(
decryptionParame
);
var
infoType
=
decryptInfo
.
Root
.
Element
(
"InfoType"
);
return
infoType
.
Value
;
}
}
}
src/Siger.WeComApi.Core/Biz/ISigerWeComThirdService.cs
View file @
a22b8086
...
...
@@ -15,5 +15,7 @@ namespace Siger.WeComApi.Core.Biz
ResponseWeComUser
GetUserInfo
(
string
code
);
string
Test
(
string
decryptionParame
);
}
}
src/Siger.WeComApi.WebApi/Controllers/CallbackController.cs
View file @
a22b8086
...
...
@@ -30,12 +30,14 @@ namespace Siger.ApiTPM.Controllers
/// </summary>
/// <returns></returns>
[
NoTokenValidateFilter
]
[
OperationLog
(
"企业维修"
,
"数据响应回调"
)]
public
ActionResult
Instruct
()
{
string
result
=
"success"
;
string
httpMethod
=
""
;
try
{
string
httpMethod
=
Request
.
Method
.
ToUpper
();
httpMethod
=
Request
.
Method
.
ToUpper
();
if
(
httpMethod
==
"GET"
)
{
//数据响应回调 验证回调URL(注意:企业回调的url-该url不做任何的业务逻辑,仅仅微信查看是否可以调通)
...
...
@@ -49,10 +51,24 @@ namespace Siger.ApiTPM.Controllers
}
catch
(
Exception
ex
)
{
result
=
"企微回调异常:"
+
ex
.
Message
;
result
=
"企微回调异常:"
+
$"
{
ex
.
Message
}
,
{
ex
.
StackTrace
}
"
;
}
return
Content
(
result
);
var
resultobj
=
Content
(
result
);
_logger
.
Info
(
"数据响应回调请求返回:httpMethod:"
+
httpMethod
+
","
+
Newtonsoft
.
Json
.
JsonConvert
.
SerializeObject
(
resultobj
));
return
resultobj
;
}
[
NoTokenValidateFilter
]
[
HttpGet
]
public
ActionResult
Test
()
{
string
text
=
"<xml><ToUserName><![CDATA[wpc-J6CQAAzan_WMX_MJs2tJxFH1akEg]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1654828095</CreateTime><MsgType><![CDATA[event]]></MsgType><AgentID>1000002</AgentID><Event><![CDATA[change_app_admin]]></Event></xml>"
;
var
result
=
_sigerWeComThirdService
.
Test
(
text
);
return
Content
(
result
);
}
}
}
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