Пример #1
0
        private string EncryptXML(WechatResponse resp)
        {
            string sEncryptMsg = "";

            string ToUserNameLabelHead = "<ToUserName><![CDATA[";
            string ToUserNameLabelTail = "]]></ToUserName>";

            string FromUserNameLabelHead = "<FromUserName><![CDATA[";
            string FromUserNameLabelTail = "]]></FromUserName>";
            string CreateTimeLabelHead   = "<CreateTime><![CDATA[";
            string CreateTimeLabelTail   = "]]></CreateTime>";
            string MsgTypeLabelHead      = "<MsgType><![CDATA[";
            string MsgTypeLabelTail      = "]]></MsgType>";
            string ContentLabelHead      = "<Content><![CDATA[";
            string ContentLabelTail      = "]]></Content>";

            sEncryptMsg += "<xml>" + ToUserNameLabelHead + resp.ToUserName + ToUserNameLabelTail;
            sEncryptMsg += FromUserNameLabelHead + resp.FromUserName + FromUserNameLabelTail;
            sEncryptMsg += CreateTimeLabelHead + resp.CreateTime + CreateTimeLabelTail;
            sEncryptMsg += MsgTypeLabelHead + resp.MsgType + MsgTypeLabelTail;
            sEncryptMsg += ContentLabelHead + resp.Content + ContentLabelTail;
            sEncryptMsg += "</xml>";

            return(sEncryptMsg);
        }
Пример #2
0
        public JsonResult GetNews(long id)
        {
            var response = new WechatResponse()
            {
                data = NewsService.Instance.GetNews(id)
            };

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Пример #3
0
        public JsonResult GetUserById(long userId)
        {
            var response = new WechatResponse()
            {
                data = UserService.Instance.GetUser(userId)
            };

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Пример #4
0
        public JsonResult GetUserInfo()
        {
            var response = new WechatResponse()
            {
                data = UserService.GetCurrentUser()
            };

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Пример #5
0
        public string GenerateEncryptResponse(WechatRequest req, string replyMsg)
        {
            WechatResponse resp = new WechatResponse();

            resp.FromUserName = req.ToUserName;
            resp.ToUserName   = req.FromUserName;
            resp.CreateTime   = DateTime.Now.Ticks.ToString();
            resp.MsgType      = req.MsgType;
            resp.Content      = req.MsgType == "text" ? replyMsg : "";

            string encryptResp = this.EncryptXML(resp);

            return(encryptResp);
        }
Пример #6
0
        public ActionResult Post(string signature, string timestamp, string nonce, string openid, string encrypt_type, string msg_signature)
        {
            //StringBuilder log = new StringBuilder();
            LogService.AnyLog("WeChatWebHook", $"WxApi\tPost In");//{DateTime.Now.ToString("HH:mm:ss.fffffff")}\t

            PostModel postModel = new PostModel()
            {
                Token          = WechatMpSettings.Default.Token, //根据自己后台的设置保持一致
                Signature      = signature,
                Timestamp      = timestamp,
                Nonce          = nonce,
                AppId          = WechatMpSettings.Default.AppId,
                EncodingAESKey = WechatMpSettings.Default.EncodingAESKey,
                Msg_Signature  = msg_signature,
            };

            try
            {
                //加密异常
                if (encrypt_type == "aes" && string.IsNullOrEmpty(postModel.EncodingAESKey))
                {
                    return(Content("公从号接口有异常,请通过其它途径解决您的问题,并反馈此消息"));
                }
                if (encrypt_type == "aes" && wxcrypt == null)
                {
                    wxcrypt = new WXBizMsgCrypt(postModel.Token, postModel.EncodingAESKey, postModel.AppId);
                }

                if (!CheckSignature.Check(signature, postModel))
                {
                    return(Content("参数错误!"));
                }

                String PostXml = Request.GetBodyString();
                //解密信息
                if (encrypt_type == "aes")
                {
                    var    aeskey = WechatMpSettings.Default.EncodingAESKey;
                    string detext = null;
                    var    res    = wxcrypt.DecryptMsg(postModel.Msg_Signature, postModel.Timestamp, postModel.Nonce, PostXml, ref detext);
                    //Console.WriteLine($"{res} detext({postModel.Token},{postModel.EncodingAESKey},{postModel.AppId},{postModel.Msg_Signature}, {postModel.Timestamp}, {postModel.Nonce},{PostXml})>{detext}");
                    PostXml = detext;
                }

                WechatResponse wxsponse  = new WechatResponse(Request, PostXml);
                var            botsponse = wxsponse.Rebot();
                LogService.AnyLog("WeChatWebHook", "响应源数据", $"{botsponse.Content}");
                //加密信息
                if (encrypt_type == "aes")
                {
                    var    rTimeStamp = DateTime.Now.GetTimestamp10();
                    var    rNonce     = RandomString.BuildRndString(16);
                    string restr      = null;
                    var    rb         = wxcrypt.EncryptMsg(botsponse.Content, rTimeStamp + "", rNonce, ref restr);
                    if (rb == 0)
                    {
                        botsponse.Content = restr;
                    }
                    else
                    {
                        $"{rb} EncryptMsg".WriteErrorLine();
                    }
                }
                LogService.AnyLog("WeChatWebHook", "响应密数据", $"{botsponse.Content}");
                return(botsponse);
            }
            catch (Exception ex)
            {
                #region 异常处理
                LogService.AnyLog("WeChatWebHook", $"{ex.Message}");
                LogService.Exception(ex);
                return(Content(""));

                #endregion
            }
            finally
            {
                LogService.AnyLog("WeChatWebHook", $"WxApi\tPost Out");
            }
        }