Beispiel #1
0
 public virtual ActionResult Get(NeuCharAppPostModel postModel, string echostr, string neucharAppId)
 {
     postModel.Token = Token;
     postModel.AppId = neucharAppId;//加密暂时用不到
     if (postModel.Signature == CheckSignatureWeChat.GetSignature(postModel))
     {
         return(Content(echostr)); //返回随机字符串则表示验证通过
     }
     else
     {
         return(Content($"failed:{postModel.Signature},{CheckSignatureWeChat.GetSignature(postModel.Timestamp, postModel.Nonce, Token)}。" +
                        $"如果你在浏览器中看到这句话,说明此地址可以被作为 NeuChar - App后台的Url,请注意保持Token一致。"));
     }
 }
Beispiel #2
0
        /// <summary>
        /// 获取Xml结果。
        /// </summary>
        /// <param name="messageHandler"></param>
        /// <param name="url"></param>
        /// <param name="token"></param>
        /// <param name="stream"></param>
        /// <param name="useNeuCharKey">是否使用WeiWeiHiKey,如果使用,则token为WeiWeiHiKey</param>
        /// <param name="timeOut">代理请求超时时间(毫秒)</param>
        /// <returns></returns>
        public static string RequestXml(this IMessageHandlerBase messageHandler, string url, string token, Stream stream, bool useNeuCharKey = false, int timeOut = AGENT_TIME_OUT)
        {
            if (messageHandler != null)
            {
                messageHandler.UsedMessageAgent = true;
            }
            string timestamp = DateTime.Now.Ticks.ToString();
            string nonce     = "GodBlessYou";
            string signature = CheckSignatureWeChat.GetSignature(timestamp, nonce, token);

            url += string.Format("{0}signature={1}&timestamp={2}&nonce={3}",
                                 url.Contains("?") ? "&" : "?", signature.AsUrlData(), timestamp.AsUrlData(), nonce.AsUrlData());

            stream.Seek(0, SeekOrigin.Begin);
            var responseXml = RequestUtility.HttpPost(url, null, stream, timeOut: timeOut);

            //WeixinTrace.SendApiLog("RequestXmlUrl:" + url, responseXml);
            return(responseXml);
        }
Beispiel #3
0
        /// <summary>
        /// 使用GET请求测试URL和TOKEN是否可用
        /// </summary>
        /// <param name="url"></param>
        /// <param name="token"></param>
        /// <param name="timeOut">代理请求超时时间(毫秒)</param>
        /// <returns></returns>
        public static bool CheckUrlAndToken(string url, string token, int timeOut = 2000)
        {
            try
            {
                string timestamp = DateTime.Now.Ticks.ToString();
                string nonce     = "GodBlessYou";
                string echostr   = Guid.NewGuid().ToString("n");
                string signature = CheckSignatureWeChat.GetSignature(timestamp, nonce, token);
                url += string.Format("{0}signature={1}&timestamp={2}&nonce={3}&echostr={4}",
                                     url.Contains("?") ? "&" : "?", signature.AsUrlData(), timestamp.AsUrlData(), nonce.AsUrlData(), echostr.AsUrlData());

                var responseStr = RequestUtility.HttpGet(url, encoding: null, timeOut: timeOut);
                return(echostr == responseStr);
            }
            catch
            {
                return(false);
            }
        }
Beispiel #4
0
        public virtual ActionResult Post(NeuCharAppPostModel postModel, string neucharAppId)
        {
            postModel.Token = Token;
            postModel.AppId = neucharAppId;// $"NeuCharApp:AppId:{neucharAppId}";

            if (postModel.Signature != CheckSignatureWeChat.GetSignature(postModel))
            {
                return(Content("参数错误!"));
            }

            //postModel.EncodingAESKey = EncodingAESKey;//根据自己后台的设置保持一致
            //postModel.AppId = AppId;//根据自己后台的设置保持一致

            NeuCharAppMessageHandler messageHandler = null;

            try
            {
#if NET45
                messageHandler = new NeuCharAppMessageHandler(Request.InputStream, postModel);
#else
                messageHandler = new NeuCharAppMessageHandler(Request.GetRequestMemoryStream(), postModel);
#endif

                messageHandler.SaveRequestMessageLog();  //记录 Request 日志(可选)

                messageHandler.Execute();                //执行微信处理过程(关键)

                messageHandler.SaveResponseMessageLog(); //记录 Response 日志(可选)

                var responseText = messageHandler.TextResponseMessage ?? "";
                return(Content(responseText));
            }
            catch (Exception ex)
            {
                #region 异常处理
                SenparcTrace.Log($"NeuCharAppMessageHandler错误:{ex.Message}");

                var logPath = Path.Combine(messageHandler.GetLogPath(), $"Error_{_getRandomFileName()}.txt");
                using (TextWriter tw = new StreamWriter(logPath))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.ResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.ResponseDocument.ToString());
                    }

                    if (ex.InnerException != null)
                    {
                        tw.WriteLine("========= InnerException =========");
                        tw.WriteLine(ex.InnerException.Message);
                        tw.WriteLine(ex.InnerException.Source);
                        tw.WriteLine(ex.InnerException.StackTrace);
                    }

                    tw.Flush();
                    tw.Close();
                }
                return(Content(""));

                #endregion
            }
        }