Commit a22b8086 by 姚传斌

提交更新

parent eb2e0621
...@@ -55,6 +55,9 @@ namespace Siger.WeComApi.Biz.service ...@@ -55,6 +55,9 @@ namespace Siger.WeComApi.Biz.service
//在1秒内响应GET请求,响应内容为上一步得到的明文消息内容decryptEchoString(不能加引号,不能带bom头,不能带换行符) //在1秒内响应GET请求,响应内容为上一步得到的明文消息内容decryptEchoString(不能加引号,不能带bom头,不能带换行符)
string echostr = request.Query["echostr"];//加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文 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)) if (!string.IsNullOrEmpty(signature) && !string.IsNullOrEmpty(timestamp) && !string.IsNullOrEmpty(nonce) && !string.IsNullOrEmpty(echostr))
{ {
string decryptEchoString = null; string decryptEchoString = null;
...@@ -108,6 +111,9 @@ namespace Siger.WeComApi.Biz.service ...@@ -108,6 +111,9 @@ namespace Siger.WeComApi.Biz.service
{ {
string responseContent = ""; string responseContent = "";
string postString = GetXMLParameters(request); //xml数据解析 string postString = GetXMLParameters(request); //xml数据解析
_logger.Info($"指令回调:{postString}");
if (string.IsNullOrEmpty(postString)) if (string.IsNullOrEmpty(postString))
{ {
responseContent = "响应失败,未获取到xml中的请求参数"; responseContent = "响应失败,未获取到xml中的请求参数";
...@@ -129,7 +135,9 @@ namespace Siger.WeComApi.Biz.service ...@@ -129,7 +135,9 @@ namespace Siger.WeComApi.Biz.service
string signature = request.Query["msg_signature"];//微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体 string signature = request.Query["msg_signature"];//微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
string timestamp = request.Query["timestamp"];//时间戳 string timestamp = request.Query["timestamp"];//时间戳
string nonce = request.Query["nonce"];//随机数 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); WXBizMsgCrypt crypt = new WXBizMsgCrypt(Token, EncodingAESKey, xmlDoc.Root.Element("ToUserName").Value);
var result = crypt.DecryptMsg(signature, timestamp, nonce, postString, ref decryptionParame); var result = crypt.DecryptMsg(signature, timestamp, nonce, postString, ref decryptionParame);
if (result != 0) if (result != 0)
...@@ -137,6 +145,8 @@ namespace Siger.WeComApi.Biz.service ...@@ -137,6 +145,8 @@ namespace Siger.WeComApi.Biz.service
return "fail"; return "fail";
} }
_logger.Info($"WXBizMsgCrypt-DecryptMsg-decryptionParame:{decryptionParame}");
//解密后的数据 囊括了身份信息 验证信息 //解密后的数据 囊括了身份信息 验证信息
WeComThirdHelper weComThirdHelper = new WeComThirdHelper(); WeComThirdHelper weComThirdHelper = new WeComThirdHelper();
var decryptInfo = XDocument.Parse(decryptionParame); var decryptInfo = XDocument.Parse(decryptionParame);
...@@ -148,11 +158,17 @@ namespace Siger.WeComApi.Biz.service ...@@ -148,11 +158,17 @@ namespace Siger.WeComApi.Biz.service
case "suite_ticket": case "suite_ticket":
string suitTicket = decryptInfo.Root.Element("SuiteTicket").Value; string suitTicket = decryptInfo.Root.Element("SuiteTicket").Value;
weComThirdHelper.SetSuitTicket(suitTicket); weComThirdHelper.SetSuitTicket(suitTicket);
_logger.Info($"InstructCallback-suite_ticket:{suitTicket}");
break; break;
case "create_auth": case "create_auth":
//从企业微信应用市场发起授权时,企业微信后台会推送授权成功通知 //从企业微信应用市场发起授权时,企业微信后台会推送授权成功通知
//获取auth_code 临时授权码 //获取auth_code 临时授权码
string authCode = decryptInfo.Root.Element("AuthCode").Value; string authCode = decryptInfo.Root.Element("AuthCode").Value;
_logger.Info($"InstructCallback-authCode:{authCode}");
GetPermentCode(authCode); GetPermentCode(authCode);
break; break;
case "change_auth": case "change_auth":
...@@ -184,7 +200,11 @@ namespace Siger.WeComApi.Biz.service ...@@ -184,7 +200,11 @@ namespace Siger.WeComApi.Biz.service
JObject postJson = new JObject(); JObject postJson = new JObject();
postJson["auth_code"] = authCode; postJson["auth_code"] = authCode;
var suitAccessToken = weComThirdHelper.GetSuiteAccessToken(); var suitAccessToken = weComThirdHelper.GetSuiteAccessToken();
_logger.Info($"获取第三方应用凭证:{suitAccessToken}");
string pUrl = weComThirdHelper.GetPermanentCodeUrl() + suitAccessToken; string pUrl = weComThirdHelper.GetPermanentCodeUrl() + suitAccessToken;
_logger.Info($"开始获取授权的客户企业:pUrl:{pUrl},postJson:{postJson}");
string corpInfo = weComThirdHelper.post(pUrl + "", postJson); string corpInfo = weComThirdHelper.post(pUrl + "", postJson);
//将授权的客户企业存入数据库 //将授权的客户企业存入数据库
InsertWeComCompany(corpInfo); InsertWeComCompany(corpInfo);
...@@ -209,6 +229,8 @@ namespace Siger.WeComApi.Biz.service ...@@ -209,6 +229,8 @@ namespace Siger.WeComApi.Biz.service
//区分普通消息与第三方应用授权推送消息,MsgType有值说明是普通消息,反之则是第三方应用授权推送消息 //区分普通消息与第三方应用授权推送消息,MsgType有值说明是普通消息,反之则是第三方应用授权推送消息
if (xmlDoc.Root.Element("MsgType") != null) 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); var msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), xmlDoc.Root.Element("MsgType").Value, true);
switch (msgType) switch (msgType)
{ {
...@@ -231,6 +253,7 @@ namespace Siger.WeComApi.Biz.service ...@@ -231,6 +253,7 @@ namespace Siger.WeComApi.Biz.service
} }
else if (xmlDoc.Root.Element("InfoType") != null) 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); var infoType = (ResponseInfoType)Enum.Parse(typeof(ResponseInfoType), xmlDoc.Root.Element("InfoType").Value, true);
...@@ -246,6 +269,7 @@ namespace Siger.WeComApi.Biz.service ...@@ -246,6 +269,7 @@ namespace Siger.WeComApi.Biz.service
else else
{ {
//其他情况 //其他情况
_logger.Info($"ReceiveResponse-Root:{xmlDoc.Root.Value}");
} }
// result==0表示解密成功,sMsg表示解密之后的明文xml串 // result==0表示解密成功,sMsg表示解密之后的明文xml串
...@@ -353,14 +377,27 @@ namespace Siger.WeComApi.Biz.service ...@@ -353,14 +377,27 @@ namespace Siger.WeComApi.Biz.service
if (corpJson["errcode"] != null) if (corpJson["errcode"] != null)
{ {
string errorMsg = string.Format("获取企业信息及永久授权码失败:errcode{0},errmsg{1}", corpJson["errcode"], corpJson["errmsg"]); string errorMsg = string.Format("获取企业信息及永久授权码失败:errcode{0},errmsg{1}", corpJson["errcode"], corpJson["errmsg"]);
_logger.Info(errorMsg);
throw new Exception(errorMsg); throw new Exception(errorMsg);
} }
var authCorpInfo = corpJson["auth_corp_info"].ToString(); try
siger_wecom_company company = JsonConvert.DeserializeObject<siger_wecom_company>(authCorpInfo); {
//赋值永久授权码permanent_code var authCorpInfo = corpJson["auth_corp_info"].ToString();
var permanentCode = corpJson["permanent_code"].ToString(); siger_wecom_company company = JsonConvert.DeserializeObject<siger_wecom_company>(authCorpInfo);
company.permanent_code = permanentCode; //赋值永久授权码permanent_code
return _sigerWeComCompanyRepository.AddSigerWeComCompany(company); 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 ...@@ -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;
}
} }
} }
...@@ -15,5 +15,7 @@ namespace Siger.WeComApi.Core.Biz ...@@ -15,5 +15,7 @@ namespace Siger.WeComApi.Core.Biz
ResponseWeComUser GetUserInfo(string code); ResponseWeComUser GetUserInfo(string code);
string Test(string decryptionParame);
} }
} }
...@@ -30,12 +30,14 @@ namespace Siger.ApiTPM.Controllers ...@@ -30,12 +30,14 @@ namespace Siger.ApiTPM.Controllers
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[NoTokenValidateFilter] [NoTokenValidateFilter]
[OperationLog("企业维修", "数据响应回调")]
public ActionResult Instruct() public ActionResult Instruct()
{ {
string result = "success"; string result = "success";
string httpMethod = "";
try try
{ {
string httpMethod = Request.Method.ToUpper(); httpMethod = Request.Method.ToUpper();
if (httpMethod == "GET") if (httpMethod == "GET")
{ {
//数据响应回调 验证回调URL(注意:企业回调的url-该url不做任何的业务逻辑,仅仅微信查看是否可以调通) //数据响应回调 验证回调URL(注意:企业回调的url-该url不做任何的业务逻辑,仅仅微信查看是否可以调通)
...@@ -49,10 +51,24 @@ namespace Siger.ApiTPM.Controllers ...@@ -49,10 +51,24 @@ namespace Siger.ApiTPM.Controllers
} }
catch (Exception ex) 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);
}
} }
} }
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