Commit a22b8086 by 姚传斌

提交更新

parent eb2e0621
......@@ -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;
}
}
}
......@@ -15,5 +15,7 @@ namespace Siger.WeComApi.Core.Biz
ResponseWeComUser GetUserInfo(string code);
string Test(string decryptionParame);
}
}
......@@ -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);
}
}
}
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