/// <summary> /// 调用。 /// </summary> /// <param name="context">处理上下文。</param> /// <returns>任务。</returns> public override Task Invoke(IHandlerContext context) { var dependencyResolver = context.GetDependencyResolver(); var requestMessageFactory = dependencyResolver.GetService <IRequestMessageFactory>(); var content = context.Content; var parameters = context.GetRequestParameters(); if (parameters.ContainsKey("encrypt_type")) { var nonce = parameters["nonce"]; var signature = parameters["msg_signature"]; var timestamp = parameters["timestamp"]; var baseInfo = context.GetMessageHandlerBaseInfo(); var appId = baseInfo.AppId; var encodingAesKey = baseInfo.EncodingAesKey; var token = baseInfo.Token; var wxBizMsgCrypt = new WXBizMsgCrypt(token, encodingAesKey, appId); wxBizMsgCrypt.DecryptMsg(signature, timestamp, nonce, content, ref content); } context.SetRequestMessage(requestMessageFactory.CreateRequestMessage(content)); return(Next.Invoke(context)); }
/// <summary> /// 调用。 /// </summary> /// <param name="context">处理上下文。</param> /// <returns>任务。</returns> public override Task Invoke(IHandlerContext context) { var responseMessage = context.GetResponseMessage(); if (responseMessage == null) { context.ResponseXml = string.Empty; } else { var requestMessage = context.GetRequestMessage(); //基本信息初始化。 responseMessage.CreateTime = DateTime.Now; responseMessage.FromUserName = requestMessage.ToUserName; responseMessage.ToUserName = requestMessage.FromUserName; var dependencyResolver = context.GetDependencyResolver(); var responseMessageFactory = dependencyResolver.GetService <IResponseMessageFactory>(); var content = responseMessageFactory.GetXmlByReponseMessage(responseMessage); #region Encrypt if (!string.IsNullOrWhiteSpace(content)) { var parameters = context.GetRequestParameters(); var encryptType = parameters["encrypt_type"]; if (encryptType != null) { var nonce = parameters["nonce"]; var timestamp = parameters["timestamp"]; var baseInfo = context.GetMessageHandlerBaseInfo(); var appId = baseInfo.AppId; var encodingAesKey = baseInfo.EncodingAesKey; var token = baseInfo.Token; var wxBizMsgCrypt = new WXBizMsgCrypt(token, encodingAesKey, appId); wxBizMsgCrypt.EncryptMsg(content, timestamp, nonce, ref content); } } #endregion Encrypt context.ResponseXml = content; } return(Next.Invoke(context)); }
/// <summary> /// 调用。 /// </summary> /// <param name="context">处理上下文。</param> /// <returns>任务。</returns> public override Task Invoke(IHandlerContext context) { //HTTP正文。 var bytes = Encoding.UTF8.GetBytes(context.Content); //根据查询字符串变量集合得到一个参数字典表。 var parameters = context.GetRequestParameters(); //得到最终的请求Url。 var postUrl = AppendParameter(_agentRequestModel.Uri.ToString(), parameters); Func <Task <string> > getPostTask = () => { var task = Task.Factory.StartNew(() => Encoding.UTF8.GetString(HttpHelper.Post(postUrl, bytes))); //防止出错时程序崩溃。 task.ContinueWith(t => { }, TaskContinuationOptions.OnlyOnFaulted); return(task); }; string content = null; Exception exception = null; //开始请求。 for (var i = 0; i < _agentRequestModel.RetryCount + 1 /*重试次数加上一次必需请求的次数*/; i++) { var task = getPostTask(); var isTimeout = !task.Wait(_agentRequestModel.Timeout); exception = task.Exception; //超时或者失败则进行尝试。 if (isTimeout || task.IsFaulted) { continue; } content = task.Result; //结束请求。 break; } if (content == null) { throw new Exception("代理请求次数超过了重试次数并且目标方还是没有正确响应" + (exception == null ? "。" : "错误消息:" + exception.Message)); } context.ResponseXml = content; return(Next.Invoke(context)); }
/// <summary> /// 调用。 /// </summary> /// <param name="context">处理上下文。</param> /// <returns>任务。</returns> public override Task Invoke(IHandlerContext context) { var parameters = context.GetRequestParameters(); var signature = parameters["signature"]; var timestamp = parameters["timestamp"]; var nonce = parameters["nonce"]; var token = context.GetMessageHandlerBaseInfo().Token; var dependencyResolver = context.GetDependencyResolver(); var signatureService = dependencyResolver.GetService <ISignatureService>(); if (!signatureService.Check(signature, timestamp, nonce, token)) { throw new Exception("非法请求。"); } return(Next.Invoke(context)); }