[HttpPost]
public ActionResult Message(string id, Senparc.Weixin.MP.Entities.Request.PostModel postModel)
{
Addlog("公众号消息与事件接收", "方法Message,wechatAppId:" + id + ",postModel" + JsonConvert.SerializeObject(postModel));
try
{
string wechatAppId = id;
if (wechatAppId == "wx570bc396a51b8ff8")//微信官方测试公众号appId
{
return GetPublishResult(Request.InputStream, postModel);
}
}
catch (Exception ex)
{
Addlog("公众号消息与事件接收", "方法Message:异常信息:" + ex.ToString());
}
return Content("success");
}
/// <summary>
/// 全网发布
/// </summary>
/// <param name="requestStream"></param>
/// <param name="postModel"></param>
/// <returns></returns>
private ContentResult GetPublishResult(Stream requestStream, Senparc.Weixin.MP.Entities.Request.PostModel postModel)
{
try
{
XDocument oldDoc = XmlUtility.Convert(requestStream);
XDocument newXmlDoc = _wechatOpenService.GetDecryptXDocument(oldDoc, postModel.AppId, postModel.Token, postModel.EncodingAESKey, postModel.Signature, postModel.Signature, postModel.Nonce);
Addlog("全网发布.GetPublishResult", "newXmlDoc:" + newXmlDoc);
Senparc.Weixin.MP.Entities.IRequestMessageBase requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(newXmlDoc);
Addlog("全网发布.GetPublishResult", "requestMessage:" + JsonHelper.Serialize(requestMessage));
if (requestMessage != null)
{
switch (requestMessage.MsgType)
{
case RequestMsgType.Text:
var requestMessageText = requestMessage as RequestMessageText;
LogHelper.Debug("全网发布2,requestMessage.Content:" + requestMessageText.Content);
if (!string.IsNullOrEmpty(requestMessageText.Content))
{
if (requestMessageText.Content == "TESTCOMPONENT_MSG_TYPE_TEXT")
{
#region 返回普通文本回复
string content = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";
//这种方法只能暂时处理
//string accessToken = "11_k3zFtp5fJropHXMHuGQ6owYwV_LIJiFyjL7Zf7yjOzkL5N3ILDKl4hEOda4ZRXmGtiMpMIEQTN0FOtCCHz5Hj3OOloTaCw90fbqnNjuvr2R2FsRPgWyv2KsMg_B-IAZZ5UM2xnmje9RjxATzKASgAFDPFX";
//SenparcAPI.SendCustomText(accessToken, requestMessage.FromUserName, content);
StringBuilder sbContent = new StringBuilder();
sbContent.Append("<xml>");
sbContent.Append("<ToUserName><![CDATA[" + requestMessage.FromUserName + "]]></ToUserName>");
sbContent.Append("<FromUserName><![CDATA[" + requestMessage.ToUserName + "]]></FromUserName>");
sbContent.Append("<CreateTime>" + requestMessage.CreateTime + "</CreateTime>");
sbContent.Append("<MsgType><![CDATA[text]]></MsgType>");
sbContent.Append("<Content><![CDATA[" + content + "]]></Content>");
sbContent.Append("</xml>");
//WechatBizMsgCrypt wechatBizMsgCrypt = new WechatBizMsgCrypt(postModel.Token, postModel.EncodingAESKey, postModel.AppId);
//int ret = wechatBizMsgCrypt.EncryptMsg(replyMsg, postModel.Timestamp, postModel.Nonce, ref returnValue);
//LogHelper.Debug("全网发布.GetPublishResult.ret结果:" + ret);
return Content(StringHelper.ToString(sbContent));
#endregion 返回普通文本回复
}
else if (requestMessageText.Content.Contains("QUERY_AUTH_CODE:"))
{
#region Api回复--发送客服消息回复
string queryAuthCode = requestMessageText.Content.Replace("QUERY_AUTH_CODE:", "");
LogHelper.Debug("全网发布.GetPublishResult.queryAuthCode:" + queryAuthCode);
var platFrom = _wechatPlatFormService.GetModel();
if (platFrom == null)
{
LogHelper.Debug("全网发布.GetPublishResult.platFrom为空!");
}
string componentAccessToken = _wechatOpenService.GetComponentAccessToken();
LogHelper.Debug("全网发布.GetPublishResult.PlatFormAppId:" + platFrom.PlatFormAppId + ",componentAccessToken:" + componentAccessToken);
QueryAuthResult authorizerInfo = _wechatOpenService.GetAuthInfo(componentAccessToken, platFrom.PlatFormAppId, queryAuthCode);
LogHelper.Debug("全网发布.GetPublishResult.authorizerInfo:" + JsonHelper.Serialize(authorizerInfo));
if (authorizerInfo == null)
{
LogHelper.Debug("全网发布.GetPublishResult.authorizerInfo为空");
}
string authorizer_access_token = authorizerInfo.authorization_info.authorizer_access_token;
var tempContent = queryAuthCode + "_from_api";
LogHelper.Debug("全网发布.GetPublishResult.tempContent:" + tempContent);
SenparcAPI.SendCustomText(authorizer_access_token, requestMessage.FromUserName, tempContent);
#endregion Api回复--发送客服消息回复
}
}
break;
default:
break;
}
}
return Content("success");
}
catch (Exception ex)
{
Addlog("全网发布.GetPublishResult异常", "GetPublishResult异常:" + ex.Message);
return Content("success");
}
}
/// <summary>
/// 获取解密后的XDocument
/// </summary>
/// <param name="doc"></param>
/// <param name="appId">授权方公众号AppId</param>
/// <param name="token"></param>
/// <param name="encodingAESKey"></param>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <returns></returns>
public XDocument GetDecryptXDocument(XDocument doc, string appId, string token, string encodingAESKey, string signature, string timestamp, string nonce)
{
try
{
WechatBizMsgCrypt msgCrype = new WechatBizMsgCrypt(token, encodingAESKey, appId);
string decryptDoc = null;
var result = msgCrype.DecryptMsg(signature, timestamp, nonce, doc.ToString(), ref decryptDoc);
if (result == 0)
{
return XDocument.Parse(decryptDoc);//完成解密
}
return null;
}
catch (Exception ex)
{
LogHelper.Error("GetDecryptXDocument发生异常", ex);
return null;
}
}